<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>조금씩 꾸준히 완성을 향해</title>
    <link>https://allsound.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Thu, 11 Jun 2026 01:10:48 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>all_sound</managingEditor>
    <image>
      <title>조금씩 꾸준히 완성을 향해</title>
      <url>https://tistory1.daumcdn.net/tistory/5495513/attach/aa214f61ad764e3a9db7f3b4068ac270</url>
      <link>https://allsound.tistory.com</link>
    </image>
    <item>
      <title>Ubuntu 백그라운드에서 프로그램 실행하기: Screen 사용법</title>
      <link>https://allsound.tistory.com/211</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot; data-token-index=&quot;0&quot;&gt;screen&lt;/span&gt;은 터미널 멀티플렉서 도구로, 프로세스를 백그라운드에서 실행하고 세션을 분리할 수 있는 유용한 도구입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f7f7f8; color: #374151; text-align: start;&quot;&gt;하나의 터미널 창에서 여러 프로세스를 실행시키고 싶을 때, &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f7f7f8; color: #374151; text-align: start;&quot;&gt;그리고 원격 서버에서 터미널 연결이 끊기더라도 작업을 지속하고 싶을 때 주로 사용됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f7f7f8;&quot;&gt;screen 설치&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #374151;&quot;&gt;&lt;span style=&quot;background-color: #f7f7f8;&quot;&gt;먼저 아래 명령어로 screen을 설치합니다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1692928896449&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ sudo apt-get install screen&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;screen 생성&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로운 screen 세션을 생성합니다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1692928989878&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ screen -S screen_name&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;screen 목록 확인하기&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-token-index=&quot;0&quot;&gt;현재 생성돼 있는 screen의 목록을 확인합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1692935739237&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ screen -ls&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;screen 세션 접속&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;백그라운드 작업을 위해 세션에 접속(attach) 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1694477524010&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ screen -R screen_name&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;screen 세션 백그라운드 분리&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;screen 세션을 백그라운드로 분리하여 서버에 올려놓으려면 접속(Attached) 상태에서 아래 키를 차례대로 입력합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Ctrl + A&amp;nbsp; &amp;rarr; D&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;screen 세션 삭제&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;screen 세션을 완전히 삭제하려면 아래 키를 차례대로 입력합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Ctrl + A &amp;nbsp;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;&amp;rarr; K&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;종료할 것인지 묻는 프롬프트에 &quot;y&quot; 입력&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;screen 세션 접속 후 명령어 모음&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;screen 세션에 들어가서는 특정 명령을 주기 위해 모두 &lt;b&gt;Ctrl&lt;span&gt;&amp;nbsp;&lt;/span&gt;+&lt;span&gt;&amp;nbsp;&lt;/span&gt;A&lt;/b&gt; 로 시작&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;awk&quot;&gt;&lt;code&gt;# 키보드 사용방법 확인하기
ctrl+a ?

# screen에서 빠져나가기(종료되지 않음)
ctrl+a d

# screen 종료하면서 빠져나가기
ctrl+a k

# 세로로 화면 분할
ctrl+a |

# 가로로 화면 분할
ctrl+a S

# 분할된 화면 으로 넘어가기
ctrl+a Tab

# 새 세션 열기
ctrl+a c

# 스크롤 하기(아래 명령어 후 방향키 입력)
ctrl+a esc

# screen 종료하면서 빠져나가기
$ exit
&lt;/code&gt;&lt;/pre&gt;</description>
      <category>AWS &amp;amp; Linux</category>
      <category>screen</category>
      <category>screen 사용법</category>
      <category>screen 설치</category>
      <category>Ubuntu 백그라운드</category>
      <author>all_sound</author>
      <guid isPermaLink="true">https://allsound.tistory.com/211</guid>
      <comments>https://allsound.tistory.com/211#entry211comment</comments>
      <pubDate>Tue, 12 Sep 2023 09:22:45 +0900</pubDate>
    </item>
    <item>
      <title>CUDA error: device-side assert triggered  에러 해결 / Driver &amp;amp; CudaToolkit 버전 호환 문제</title>
      <link>https://allsound.tistory.com/210</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Jupyter에서 잘 돌아가던 코드에 자꾸 이런 에러가 떠서 해결해 나섰다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1434&quot; data-origin-height=&quot;580&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VGoqt/btssHDWIQRw/2Mh4gqXgPaVekcpav92Ki0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VGoqt/btssHDWIQRw/2Mh4gqXgPaVekcpav92Ki0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VGoqt/btssHDWIQRw/2Mh4gqXgPaVekcpav92Ki0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVGoqt%2FbtssHDWIQRw%2F2Mh4gqXgPaVekcpav92Ki0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1434&quot; height=&quot;580&quot; data-origin-width=&quot;1434&quot; data-origin-height=&quot;580&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #343541; text-align: start;&quot;&gt;처음에 에러 메세지로 검색을 해보니 코드에서 Class Number가 불일치한 경우가 대부분이었다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #343541; text-align: start;&quot;&gt;그래서 코드를 뜯어보고 또 뜯어보고 데이터 라벨까지 다 점검해 보았지만 전혀 문제가 없어 보여 멘붕에 빠졌는데....&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #343541; text-align: start;&quot;&gt;혹시나 해서 동일 코드를 Colab에 옮겨 돌려보니 무사히 잘 돌아가는 게 아닌가!!!!!&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #343541; text-align: start;&quot;&gt;아니 이건 Cuda 관련 프로그램들의 버전 불일치일 수 밖에 없다고 판단해서 확인해 보았다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 Cuda의 버전을 확인해 본다.&lt;/p&gt;
&lt;pre id=&quot;code_1693448303189&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ nvcc --version&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1693410045519&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2021 NVIDIA Corporation
Built on Thu_Nov_18_09:45:30_PST_2021
Cuda compilation tools, release 11.5, V11.5.119
Build cuda_11.5.r11.5/compiler.30672275_0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;11.5라고 떠있는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1693448362215&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ nvidia-smi&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;nvidia 드라이버 정보를 확인해 보니,,,, &lt;b&gt;driver 535 / Cuda 12.1&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignLeft&quot; data-emoticon-type=&quot;face&quot; data-emoticon-name=&quot;022&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/face/large/022.png&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/face/large/022.png&quot; width=&quot;80&quot; /&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다 드라이버를 이상한 걸 깔아놓은 것이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1693448469823&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ python --version&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이썬 버전도 확인해 보니 호환이 안되는 3. 9버전이었다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;&lt;code&gt;Python 3.9.13&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;해결책&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로운 가상환경에 드라이버 설치부터 Cuda Toolkit설치, Python, Torch 버전 조정까지 다시 진행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=&amp;gt; 깨끗히 문제 해결!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;버전 확인 및 설치 방법은 아래 포스팅 참고요망&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://allsound.tistory.com/207&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://allsound.tistory.com/207&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1693448617113&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[2023 최신] Ubuntu 환경에서 nvidia-driver, cuda, cudnn 설치 방법 (Ubuntu 22.04)&quot; data-og-description=&quot;서버알못인 제가 어쩌다 연구실의 서버를 세팅하게 되었습니다...!!!! 여러 블로그들을 찾아보고, chatGPT에게도 물어 가며 하루 종일 삽질한 결과를 기록하겠습니다 ^^ 부디 누군가에게는 도움이 &quot; data-og-host=&quot;allsound.tistory.com&quot; data-og-source-url=&quot;https://allsound.tistory.com/207&quot; data-og-url=&quot;https://allsound.tistory.com/207&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/9CBYS/hyTL4A3s41/31zd3GSZG4jO5QVjM6NEMK/img.png?width=800&amp;amp;height=576&amp;amp;face=0_0_800_576,https://scrap.kakaocdn.net/dn/cZ1UtA/hyTPHqD4b2/WU2vlkp1D86LlV9KyNrpcK/img.png?width=800&amp;amp;height=576&amp;amp;face=0_0_800_576,https://scrap.kakaocdn.net/dn/iCh9I/hyTL3WqiSB/lGxnMb9J6YMUzbKI51XYXk/img.png?width=925&amp;amp;height=809&amp;amp;face=0_0_925_809&quot;&gt;&lt;a href=&quot;https://allsound.tistory.com/207&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://allsound.tistory.com/207&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/9CBYS/hyTL4A3s41/31zd3GSZG4jO5QVjM6NEMK/img.png?width=800&amp;amp;height=576&amp;amp;face=0_0_800_576,https://scrap.kakaocdn.net/dn/cZ1UtA/hyTPHqD4b2/WU2vlkp1D86LlV9KyNrpcK/img.png?width=800&amp;amp;height=576&amp;amp;face=0_0_800_576,https://scrap.kakaocdn.net/dn/iCh9I/hyTL3WqiSB/lGxnMb9J6YMUzbKI51XYXk/img.png?width=925&amp;amp;height=809&amp;amp;face=0_0_925_809');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[2023 최신] Ubuntu 환경에서 nvidia-driver, cuda, cudnn 설치 방법 (Ubuntu 22.04)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;서버알못인 제가 어쩌다 연구실의 서버를 세팅하게 되었습니다...!!!! 여러 블로그들을 찾아보고, chatGPT에게도 물어 가며 하루 종일 삽질한 결과를 기록하겠습니다 ^^ 부디 누군가에게는 도움이&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;allsound.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>AWS &amp;amp; Linux</category>
      <category>cuda error</category>
      <category>cuda toolkit 버전</category>
      <category>cuda 버전</category>
      <category>cuda 호환</category>
      <category>device-side assert triggered</category>
      <category>driver 버전</category>
      <category>jupyter notebook gpu</category>
      <author>all_sound</author>
      <guid isPermaLink="true">https://allsound.tistory.com/210</guid>
      <comments>https://allsound.tistory.com/210#entry210comment</comments>
      <pubDate>Thu, 31 Aug 2023 11:25:22 +0900</pubDate>
    </item>
    <item>
      <title>Window에서 Linux(Ubuntu) GUI 원격 데스크톱 프로토콜(RDP) 세팅 - Xrdp 설치</title>
      <link>https://allsound.tistory.com/209</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #374151; text-align: start;&quot;&gt;&amp;nbsp;Windows 환경에서 Linux의 GUI를 직접적으로 사용하기 위해서는 &lt;span style=&quot;color: #374151; text-align: start;&quot;&gt;&lt;b&gt;원격 데스크톱 접속&lt;/b&gt;을 해야 합니다. &lt;b&gt;xrdp&lt;/b&gt;&lt;span style=&quot;color: #374151; text-align: start;&quot;&gt;는 이를 가능하게 해주는 툴로, &lt;b&gt;Windows에서 Linux(Ubuntu)의 GUI 환경으로 원활하게 연결&lt;/b&gt;할 수 있게 도와줍니다. 이 글에서는 &lt;span style=&quot;color: #374151; text-align: start;&quot;&gt;xrdp를 실처하고 원격 접속을 하는 과정을&lt;/span&gt; 다룹니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;1.&amp;nbsp; Ubuntu에 Xrdp 설치&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 먼저 터미널을 열고 &lt;b&gt;xrdp를 설치&lt;/b&gt;합니다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;$ sudo apt install xrdp&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;Xrdp 서비스가 실행되고 있는지 확인합니다.&amp;nbsp; (참고로, Xrdp 서비스는 설치 시 자동으로 시작됩니다)&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;$ sudo systemctl status xrdp&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled.png&quot; data-origin-width=&quot;1376&quot; data-origin-height=&quot;973&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/THJHr/btsrDG8CS7l/LYdTV2LzXjeC7otbXa2VV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/THJHr/btsrDG8CS7l/LYdTV2LzXjeC7otbXa2VV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/THJHr/btsrDG8CS7l/LYdTV2LzXjeC7otbXa2VV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTHJHr%2FbtsrDG8CS7l%2FLYdTV2LzXjeC7otbXa2VV0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;660&quot; height=&quot;467&quot; data-filename=&quot;Untitled.png&quot; data-origin-width=&quot;1376&quot; data-origin-height=&quot;973&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-token-index=&quot;0&quot;&gt;xrdp&lt;/span&gt; 데몬이 활성화되어 실행 중이라면 위와 같은 화면이 뜹니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;2. Ubuntu에서 Xrdp 구성&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Xrdp&lt;span style=&quot;color: #374151; text-align: start;&quot;&gt;를 설치한 후, SSL 인증서 키인 &lt;/span&gt;&lt;b&gt;ssl-cert-snakeoil.key &lt;/b&gt;&lt;span style=&quot;color: #374151; text-align: start;&quot;&gt;가 &lt;/span&gt;&lt;b&gt;/etc/ssl/private/&lt;/b&gt;&lt;span style=&quot;color: #374151; text-align: start;&quot;&gt; 폴더에 생성됩니다. 이 키 파일에 접근하기 위해서는 xrdp 사용자를 &lt;/span&gt;&lt;b&gt;ssl-cert&lt;/b&gt;&lt;span style=&quot;color: #374151; text-align: start;&quot;&gt; 그룹에 추가해 주어야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;$ sudo adduser xrdp ssl-cert&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 필요하다면 &lt;b&gt;방화벽을 해제&lt;/b&gt;해 주어야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;접근하고 있는 &lt;b&gt;ip 주소&lt;/b&gt;를 넣어 아래 명령어를 실행합니다. (참고로 xrdp는 보통 &lt;b&gt;3398 port&lt;/b&gt;를 사용합니다.)&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;$ sudo ufw allow from ip주소 to any port 3389&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후, 방화벽 설정이 잘 되었는지 확인합니다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;$ sudo ufw reload
$ sudo ufw status&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;3. RDP 클라이언트로 원격 Ubuntu 데스크톱에 액세스&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 Windows의 &lt;b&gt;원격 데스크톱 클라이언트&lt;/b&gt;를 통해 &lt;b&gt;Ubuntu 데스크톱 시스템&lt;/b&gt;에 접속합니다. 하지만 접속하기 전에 Ubuntu에서 반드시 &lt;b&gt;로그아웃&lt;/b&gt;을 해야 합니다. Xrdp가 동시에 &lt;b&gt;하나의 Xsession&lt;/b&gt;만을 지원하기 때문입니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #f7f7f8; color: #374151; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;로그아웃을 완료했다면, 원격 데스크톱 클라이언트를 실행하고 원격 시스템의 IP 주소를 입력합니다. 그 후 '&lt;b&gt;연결&lt;/b&gt;' 버튼을 클릭하여 접속을 진행합니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #f7f7f8; color: #374151; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled (1).png&quot; data-origin-width=&quot;679&quot; data-origin-height=&quot;472&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blRS6r/btsrCxxAVJD/biWj07LGbqwr9RzUkBovRk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blRS6r/btsrCxxAVJD/biWj07LGbqwr9RzUkBovRk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blRS6r/btsrCxxAVJD/biWj07LGbqwr9RzUkBovRk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblRS6r%2FbtsrCxxAVJD%2FbiWj07LGbqwr9RzUkBovRk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;560&quot; height=&quot;389&quot; data-filename=&quot;Untitled (1).png&quot; data-origin-width=&quot;679&quot; data-origin-height=&quot;472&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원격 시스템의 ID를 확인하라는 팝업에서 &lt;b&gt;인증서 오류&lt;/b&gt;를 무시하고 &lt;b&gt;'&lt;span data-token-index=&quot;1&quot;&gt;다음&lt;/span&gt;'&lt;/b&gt; 버튼을 클릭합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-token-index=&quot;0&quot;&gt;Xrdp&lt;/span&gt; 로그인 페이지가 나오면 &lt;b&gt;로그인 정보를 입력&lt;/b&gt;하고 '&lt;span data-token-index=&quot;2&quot;&gt;확인&lt;/span&gt;'을 누르면 아래와 같이 연결이 완료됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled (2).png&quot; data-origin-width=&quot;1885&quot; data-origin-height=&quot;1085&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nqi8N/btsrCnocWAj/BdwoWb6aTnRQTLXiVRwAx0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nqi8N/btsrCnocWAj/BdwoWb6aTnRQTLXiVRwAx0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nqi8N/btsrCnocWAj/BdwoWb6aTnRQTLXiVRwAx0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fnqi8N%2FbtsrCnocWAj%2FBdwoWb6aTnRQTLXiVRwAx0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;792&quot; height=&quot;456&quot; data-filename=&quot;Untitled (2).png&quot; data-origin-width=&quot;1885&quot; data-origin-height=&quot;1085&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;※ 블랙 화면 문제 해결 방법&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Ubuntu 바탕 화면 배경 대신 검정색 화면이 나타나는 경우 아래의 해결법들을 시도해 볼 수 있습니다.&lt;span data-token-index=&quot;0&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;1. startwm.sh 스크립트 수정을 통한 문제 해결&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;$ sudo vim /etc/xrdp/startwm.sh&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f7f7f8; color: #374151; text-align: start;&quot;&gt;스크립트 내에서 &lt;/span&gt;&lt;b&gt;Xsession&lt;/b&gt;&lt;span style=&quot;background-color: #f7f7f8; color: #374151; text-align: start;&quot;&gt;을 테스트하고 실행하는 부분을 찾아, 그 앞에 다음 두 줄을 추가합니다:&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;unset DBUS_SESSION_BUS_ADDRESS
unset XDG_RUNTIME_DIR&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f7f7f8; color: #374151; text-align: start;&quot;&gt;추가한 후, 파일을 저장하고 종료합니다. 마지막으로 &lt;/span&gt;Xrdp&lt;span style=&quot;background-color: #f7f7f8; color: #374151; text-align: start;&quot;&gt; 서비스를 재시작한 후, 연결을 시도합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;$ sudo systemctl restart xrdp&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;2. Xorg와의 호환성 문제 확인&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;홈 디렉터리의 &lt;b&gt;.xsession&lt;/b&gt; 파일 내용과 &lt;b&gt;DE(Desktop Environment) 설정&lt;/b&gt;을 확인합니다. GNOME 사용 시&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;$ echo &quot;gnome-session --session=ubuntu&quot; &amp;gt; ~/.xsession&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;명령으로 .xsession 파일을 수정한 후, xrdp 세션을 재시작 합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;3. Xauthority 파일 권한 학인&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.Xauthority 파일 권한 문제로 xrdp 접속에 이슈가 발생할 수 있기 때문에 &lt;b&gt;파일의 소유자를 수정&lt;/b&gt;합니다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;$ sudo chown $USER:$USER ~/.Xauthority&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot; data-token-index=&quot;0&quot;&gt;4. Xrdp 와 Xrogcrdp 패키지 재설치&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Xrdp 패키지를 삭제 후 재설치해 봅니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;$ sudo apt-get --purge remove xrdp
$ sudo apt-get install xrdp&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;5. 로그와 오류메세지 확인&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 방법으로 해결되지 않는 경우, &lt;b&gt;로그와 오류메세지&lt;/b&gt;를 직접 확인해 보고 그에 맞는 해결방법을 찾아보아야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로그와 오류 메시지 확인&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;$ cat /var/log/xrdp.log&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f7f7f8; color: #374151; text-align: left;&quot;&gt;로그 파일의 마지막 부분만 확인 (특히 최근의 로그 또는 오류를 빠르게 확인할 때 유용)&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;$ tail /var/log/xrdp.log&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저도 설치하면서 블랙 스크린 문제 때문에 힘든 과정을 겪었습니다ㅠㅠ 연결 후에는 또 브라우저가 켜지지 않아 무한 구글링을 했네요...&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 포스팅을 보는 분들은 문제없이 빠르게 성공하시길!!!!&lt;/p&gt;</description>
      <category>AWS &amp;amp; Linux</category>
      <category>linux GUI</category>
      <category>RDP</category>
      <category>xrdp</category>
      <category>리눅스 GUI</category>
      <category>원격데스크톱연결</category>
      <author>all_sound</author>
      <guid isPermaLink="true">https://allsound.tistory.com/209</guid>
      <comments>https://allsound.tistory.com/209#entry209comment</comments>
      <pubDate>Mon, 21 Aug 2023 13:59:30 +0900</pubDate>
    </item>
    <item>
      <title>Ubuntu 서버 외부 IP 연결 끊김(UFW BLOCK) - 방화벽 설정 및 해제</title>
      <link>https://allsound.tistory.com/208</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;여태껏 잘 되던 연구실 서버와의 연결이 갑자기 끊겨 버렸습니다...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;988&quot; data-origin-height=&quot;517&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6FBH7/btsqwABiChi/WyPU8B7BrVbNc6l4QlygT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6FBH7/btsqwABiChi/WyPU8B7BrVbNc6l4QlygT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6FBH7/btsqwABiChi/WyPU8B7BrVbNc6l4QlygT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6FBH7%2FbtsqwABiChi%2FWyPU8B7BrVbNc6l4QlygT0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;429&quot; height=&quot;247&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;988&quot; data-origin-height=&quot;517&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연구실 IP 뿐만이 아니라 다른 모든 IP에서 접속이 불가했습니다.&lt;br /&gt;연결돼 있던 KOREN 망 문제가 아님을 확인했고, WIFI 역시 잘 작동되는 상태였습니다.&lt;br /&gt;어쩔 수 없이 서버실에 찾아가는 수 밖에.....&amp;nbsp; (서버실이란 곳을 3일 전에 생전 처음 가봤지만 저밖에 해결할 사람이 없습니다....)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;모니터에 직접 연결해 보니 네트워크 통신도 멀쩡했고, 서버 자체의 이상도 없어 보였습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;가장 의심스러운 &lt;b&gt;방화벽 설정&lt;/b&gt;을 먼저 확인해 봅니다.&lt;/p&gt;
&lt;pre id=&quot;code_1691504570405&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ sudo ufw status numbered&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 IP에서 접근이 가능하게 설정이 돼 있는 것으로 보입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음으로 &lt;b&gt;방화벽 로그&lt;/b&gt;를 확인해 봅니다.&lt;/p&gt;
&lt;pre id=&quot;code_1691504729167&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ sudo tail -f /var/log/ufw.log&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[UFW BLOCK]&lt;/b&gt; 이라는 메세지와 함께 끈질긴 접속 시도가 모두 차단된 것으로 확인되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 방화벽 해제가 필요한 IP들을 직접 추가해 주었습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1691504945063&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ sudo ufw allow in from [ip]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #374151; text-align: left;&quot;&gt;변경된 방화벽 설정을 적용하기 위해 &lt;b&gt;방화벽을 활성화&lt;/b&gt;합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1691505717920&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ sudo ufw enable&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 방화벽 설정 상태를 확인해 보니 무사히 추가가 되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_KakaoTalk_20230808_223908790_02.jpg&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;1739&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cWakb8/btsqCsXGGkE/snuzq9QBGGLL5rfEpQM9Z1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWakb8/btsqCsXGGkE/snuzq9QBGGLL5rfEpQM9Z1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWakb8/btsqCsXGGkE/snuzq9QBGGLL5rfEpQM9Z1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWakb8%2FbtsqCsXGGkE%2Fsnuzq9QBGGLL5rfEpQM9Z1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;603&quot; height=&quot;350&quot; data-filename=&quot;edited_KakaoTalk_20230808_223908790_02.jpg&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;1739&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 특정 ip에 대한 &lt;b&gt;방화벽 차단&lt;/b&gt; 명령어는 아래와 같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1691505314978&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ sudo ufw deny from [ip]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아무튼 이렇게 IP를 추가하고 연구실에 전화해 접속해 보라고 하니 접속 된다는 소식을 들었습니다....&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 해결!!!!! 서버실 탈출!!!&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignLeft&quot; data-emoticon-type=&quot;niniz&quot; data-emoticon-name=&quot;003&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/niniz/large/003.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/niniz/large/003.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 왜 출발지가 Anywhere인데 외부 IP에서 접속이 되지 않았는지 아직도 의문이긴 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웃긴 것은 같은 IP들에서 여태껏 접속이 아주 잘 되었다는 사실입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네트워크 망이 변경된 것도 아니고, 서버 설정이 변경된 것도 아닌데 무엇이 이런 변화를 초래하였는지&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;혹시 아시는 분이 있다면 알려주십시오...(꾸벅)&lt;/p&gt;</description>
      <category>AWS &amp;amp; Linux</category>
      <category>ubuntu</category>
      <category>ufw allow</category>
      <category>ufw block</category>
      <category>ufw deny</category>
      <category>방화벽 설정</category>
      <category>방화벽 해제</category>
      <author>all_sound</author>
      <guid isPermaLink="true">https://allsound.tistory.com/208</guid>
      <comments>https://allsound.tistory.com/208#entry208comment</comments>
      <pubDate>Tue, 8 Aug 2023 23:50:22 +0900</pubDate>
    </item>
    <item>
      <title>[2023 최신] Ubuntu 환경에서 nvidia-driver, cuda, cudnn 설치 방법 (Ubuntu 22.04)</title>
      <link>https://allsound.tistory.com/207</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버알못인 제가 어쩌다 연구실의 서버를 세팅하게 되었습니다...!!!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러 블로그들을 찾아보고, chatGPT에게도 물어 가며 하루 종일 삽질한 결과를 기록하겠습니다 ^^&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부디 누군가에게는 도움이 될 수 있길 (미래의 나도 포함해서...ㅎ)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;1. Ubuntu 환경 파악&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 서버에 로그인을 하면 이런 종류의 인사말이 뜹니다.&lt;/p&gt;
&lt;pre id=&quot;code_1690995982233&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Welcome to Ubuntu 22.04.2 LTS (GNU/Linux 5.19.0-50-generic x86_64)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요 버전을&amp;nbsp;잘 기록해 놓아야 이후 설치 과정이 매끄러워 집니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. 기존의 nvidia-driver, Cuda Toolkit 삭제&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존에 설치한 이력이 있다면 다 지워주고 다시 시작해야 합니다. 혹시 모르니 무조건 한 번 씩 실행하고 넘어갑시다!&lt;/p&gt;
&lt;pre class=&quot;bash&quot; style=&quot;background-color: #2e3440; color: #f8f8f2; text-align: left;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;$ sudo apt-get remove --purge nvidia-*
$ sudo apt-get autoremove
$ sudo apt-get update&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. Nvidia driver 설치&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음으로 시스템에 설치된 CUDA 컴파일러의 버전 확인합니다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; style=&quot;background-color: #2e3440; color: #f8f8f2; text-align: left;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;$ nvcc --version&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1693414659507&quot; class=&quot;angelscript&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2021 NVIDIA Corporation
Built on Thu_Nov_18_09:45:30_PST_2021
Cuda compilation tools, release 11.5, V11.5.119
Build cuda_11.5.r11.5/compiler.30672275_0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cuda 11.5 버전이라는 것을 알 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면 이 cuda 버전에 맞는 driver 버전은 무엇인지 확인하러 갑니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.nvidia.com/deploy/cuda-compatibility/index.html&quot;&gt;https://docs.nvidia.com/deploy/cuda-compatibility/index.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1693415218213&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;CUDA Compatibility  :: NVIDIA Data Center GPU Driver Documentation&quot; data-og-description=&quot;The NVIDIA&amp;reg; CUDA&amp;reg; Toolkit enables developers to build NVIDIA GPU accelerated compute applications for desktop computers, enterprise, and data centers to hyperscalers. It consists of the CUDA compiler toolchain including the CUDA runtime (cudart) and vari&quot; data-og-host=&quot;docs.nvidia.com&quot; data-og-source-url=&quot;https://docs.nvidia.com/deploy/cuda-compatibility/index.html&quot; data-og-url=&quot;https://docs.nvidia.com/deploy/cuda-compatibility/index.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/wXFPI/hyTMe4EYUR/Skj8wcGDiqpLWhMh7ef3aK/img.png?width=1105&amp;amp;height=465&amp;amp;face=0_0_1105_465,https://scrap.kakaocdn.net/dn/hOOyC/hyTL8J8hAU/qSiJCWWizMuLLhm3JaW9Ok/img.png?width=624&amp;amp;height=467&amp;amp;face=0_0_624_467,https://scrap.kakaocdn.net/dn/Pykvc/hyTMhf1OAQ/XgtBedn67oTWkgasCBVfDk/img.png?width=542&amp;amp;height=400&amp;amp;face=0_0_542_400&quot;&gt;&lt;a href=&quot;https://docs.nvidia.com/deploy/cuda-compatibility/index.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.nvidia.com/deploy/cuda-compatibility/index.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/wXFPI/hyTMe4EYUR/Skj8wcGDiqpLWhMh7ef3aK/img.png?width=1105&amp;amp;height=465&amp;amp;face=0_0_1105_465,https://scrap.kakaocdn.net/dn/hOOyC/hyTL8J8hAU/qSiJCWWizMuLLhm3JaW9Ok/img.png?width=624&amp;amp;height=467&amp;amp;face=0_0_624_467,https://scrap.kakaocdn.net/dn/Pykvc/hyTMhf1OAQ/XgtBedn67oTWkgasCBVfDk/img.png?width=542&amp;amp;height=400&amp;amp;face=0_0_542_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;CUDA Compatibility :: NVIDIA Data Center GPU Driver Documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;The NVIDIA&amp;reg; CUDA&amp;reg; Toolkit enables developers to build NVIDIA GPU accelerated compute applications for desktop computers, enterprise, and data centers to hyperscalers. It consists of the CUDA compiler toolchain including the CUDA runtime (cudart) and vari&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.nvidia.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 사이트를 참고하여 호환 가능한 driver 버전을 설치해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;확인을 했다면 서버에 어떤 버전의 driver를 설치할 수 있는지 확인해 봅니다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; style=&quot;background-color: #2e3440; color: #f8f8f2; text-align: left;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;$ ubuntu-drivers devices&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;909&quot; data-origin-height=&quot;381&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MaGe6/btspTJZ5IeF/zg5khIWk9gLMqvSFChybTk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MaGe6/btspTJZ5IeF/zg5khIWk9gLMqvSFChybTk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MaGe6/btspTJZ5IeF/zg5khIWk9gLMqvSFChybTk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMaGe6%2FbtspTJZ5IeF%2Fzg5khIWk9gLMqvSFChybTk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;585&quot; height=&quot;245&quot; data-origin-width=&quot;909&quot; data-origin-height=&quot;381&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 쭉 뜨는데서 저에게 필요한 450-server 버전을 선택했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;bash&quot; style=&quot;background-color: #2e3440; color: #f8f8f2; text-align: left;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;$ sudo apt-get install nvidia-driver-450-server&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #343434; text-align: left;&quot;&gt;&lt;span&gt;&amp;nbsp;그리고 나서, &lt;/span&gt;NVIDIA kernel module의 load를 도와주는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;modprobe&lt;span style=&quot;background-color: #ffffff; color: #343434; text-align: left;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;패키지를 설치하고, 업데이트 후 재부팅 해줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;bash&quot; style=&quot;background-color: #2e3440; color: #f8f8f2; text-align: left;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;$ sudo apt-get install dkms nvidia-modprobe
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo reboot&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;재부팅 완료 후. 아래 명령어를 치면 nvidia driver 정보가 나옵니다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; style=&quot;background-color: #2e3440; color: #f8f8f2; text-align: left;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;$ nvidia-smi&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;978&quot; data-origin-height=&quot;567&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2M15p/btssvgCvnGn/Ul8yC28MmkJ95pkyh7JpWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2M15p/btssvgCvnGn/Ul8yC28MmkJ95pkyh7JpWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2M15p/btssvgCvnGn/Ul8yC28MmkJ95pkyh7JpWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2M15p%2FbtssvgCvnGn%2FUl8yC28MmkJ95pkyh7JpWk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;576&quot; height=&quot;334&quot; data-origin-width=&quot;978&quot; data-origin-height=&quot;567&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 꼭 확인해야 할 정보는 맨 윗줄입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;NVIDIA-SMI&amp;nbsp;450.248.02&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Driver&amp;nbsp;Version:&amp;nbsp;450.248.02&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;CUDA&amp;nbsp;Version:&amp;nbsp;11.0&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;450.248.02&lt;/b&gt; 버전의 드라이브가 설치되었고, 그에 잘맞는 CUDA Toolkit의 버전은 &lt;b&gt;11.0&lt;/b&gt;라는 의미입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, &lt;b&gt;11.0의 &lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;CUDA Toolkit&lt;/b&gt;을 설치해야 하는게 가장 좋다고 알려주고 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4. CUDA Toolkit 설치&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #374151; text-align: start;&quot;&gt;&lt;b&gt;CUDA Toolkit&lt;/b&gt;은 &lt;span style=&quot;color: #374151; text-align: start;&quot;&gt;GPU 컴퓨팅을 위한 라이브러리, 컴파일러, 도구 등의 패키지를 제공하며, CUDA 프로그램을 개발하고 실행하는 데 필요한 환경을 구성합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer.nvidia.com/cuda-toolkit-archive&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer.nvidia.com/cuda-toolkit-archive&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1690987961654&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;CUDA Toolkit Archive&quot; data-og-description=&quot;Previous releases of the CUDA Toolkit, GPU Computing SDK, documentation and developer drivers can be found using the links below. Please select the release you want from the list below, and be sure to check www.nvidia.com/drivers for more recent production&quot; data-og-host=&quot;developer.nvidia.com&quot; data-og-source-url=&quot;https://developer.nvidia.com/cuda-toolkit-archive&quot; data-og-url=&quot;https://developer.nvidia.com/cuda-toolkit-archive&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://developer.nvidia.com/cuda-toolkit-archive&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer.nvidia.com/cuda-toolkit-archive&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;CUDA Toolkit Archive&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Previous releases of the CUDA Toolkit, GPU Computing SDK, documentation and developer drivers can be found using the links below. Please select the release you want from the list below, and be sure to check www.nvidia.com/drivers for more recent production&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer.nvidia.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 웹사이트로 들어가서 설치를 하면 되는데,&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt; !!!최대한!!&lt;/span&gt;!&amp;nbsp; &lt;u&gt;driver 버전과 맞는 걸&lt;/u&gt;&lt;/b&gt; 다운받아야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나 저의 경우 &lt;b&gt;CUDA는 11.5&lt;/b&gt;, 또 &lt;b&gt;Utuntu 버전은 22.04&lt;/b&gt;이기 때문에 설치가 가능한 &lt;u&gt;가장 가까운 버전&lt;/u&gt;을 선택했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;925&quot; data-origin-height=&quot;809&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dhcUim/btsswittZtD/8mZZSbBPwujmHstD0l4Ryk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dhcUim/btsswittZtD/8mZZSbBPwujmHstD0l4Ryk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dhcUim/btsswittZtD/8mZZSbBPwujmHstD0l4Ryk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdhcUim%2FbtsswittZtD%2F8mZZSbBPwujmHstD0l4Ryk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;493&quot; height=&quot;431&quot; data-origin-width=&quot;925&quot; data-origin-height=&quot;809&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빨간 박스 쳐진 11.7 버전을 클릭하고, 조건을 선택합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img style=&quot;text-align: center; caret-color: transparent; letter-spacing: 0px;&quot; src=&quot;https://blog.kakaocdn.net/dn/etDSOK/btspXlK1puk/sF3vwxD5yCSLiN59tC2Y3k/img.png&quot; width=&quot;676&quot; height=&quot;242&quot; data-origin-width=&quot;1852&quot; data-origin-height=&quot;664&quot; data-is-animation=&quot;false&quot; /&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1644&quot; data-origin-height=&quot;637&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SGFly/btssBosT05G/HkUuBUKViaYIDDhIw8yijK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SGFly/btssBosT05G/HkUuBUKViaYIDDhIw8yijK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SGFly/btssBosT05G/HkUuBUKViaYIDDhIw8yijK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSGFly%2FbtssBosT05G%2FHkUuBUKViaYIDDhIw8yijK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;695&quot; height=&quot;269&quot; data-origin-width=&quot;1644&quot; data-origin-height=&quot;637&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나타나는 명령어 두 줄을 차례대로 입력하면 설치가 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1195&quot; data-origin-height=&quot;712&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cJeteK/btspNPGSjp1/kP6zTMlvlftYqryQenrDj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cJeteK/btspNPGSjp1/kP6zTMlvlftYqryQenrDj0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cJeteK/btspNPGSjp1/kP6zTMlvlftYqryQenrDj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcJeteK%2FbtspNPGSjp1%2FkP6zTMlvlftYqryQenrDj0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;628&quot; height=&quot;374&quot; data-origin-width=&quot;1195&quot; data-origin-height=&quot;712&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 게 뜨면 continue로 가서 enter를 누르고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1110&quot; data-origin-height=&quot;703&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bz0hXS/btspMKy27na/fMqnsbDJSP44P4QRqHm3T0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bz0hXS/btspMKy27na/fMqnsbDJSP44P4QRqHm3T0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bz0hXS/btspMKy27na/fMqnsbDJSP44P4QRqHm3T0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbz0hXS%2FbtspMKy27na%2FfMqnsbDJSP44P4QRqHm3T0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;650&quot; height=&quot;412&quot; data-origin-width=&quot;1110&quot; data-origin-height=&quot;703&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 게 뜨면 accept라고 입력하고 enter를 눌러줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1312&quot; data-origin-height=&quot;655&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uvQSd/btssv1ykXGH/74KaMx8VUnjFNZqLRl1fG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uvQSd/btssv1ykXGH/74KaMx8VUnjFNZqLRl1fG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uvQSd/btssv1ykXGH/74KaMx8VUnjFNZqLRl1fG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuvQSd%2Fbtssv1ykXGH%2F74KaMx8VUnjFNZqLRl1fG0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;653&quot; height=&quot;326&quot; data-origin-width=&quot;1312&quot; data-origin-height=&quot;655&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 여기서 주의할 점!!!!&amp;nbsp; &lt;b&gt;맨 위에 Driver는 체크를 해제&lt;/b&gt;해야 합니다!!!! (해체는 enter 키)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(체크 놔두고 설치하면 무한 에러 뜸)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;무사히 install을 선택해 주면 이렇게 완료 메세지가 뜹니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1306&quot; data-origin-height=&quot;445&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EIkk0/btsswVSa0s6/kWSktCEuKIDL3esbqLcEv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EIkk0/btsswVSa0s6/kWSktCEuKIDL3esbqLcEv0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EIkk0/btsswVSa0s6/kWSktCEuKIDL3esbqLcEv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEIkk0%2FbtsswVSa0s6%2FkWSktCEuKIDL3esbqLcEv0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;722&quot; height=&quot;246&quot; data-origin-width=&quot;1306&quot; data-origin-height=&quot;445&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;※ 참고로 이 부분에서 &lt;span style=&quot;background-color: #ffffff; color: #343434; text-align: start;&quot;&gt;gcc 관련 에러가 뜰 수도 있습니다. gcc를 설치하거나, 버전을 맞추는 방식으로 에러를 해결해 나가시면 됩니다.&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #343434; text-align: left;&quot;&gt;CUDA Toolkit 관련 설정을 환경 변수에 추가해 줍니다. (PATH는 당연히 &lt;b&gt;본인이 설치한 cuda 버전&lt;/b&gt;으로 변경해 주셔야 합니다!)&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;bash&quot; style=&quot;background-color: #2e3440; color: #f8f8f2; text-align: left;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;$ sudo sh -c &quot;echo 'export PATH=$PATH:/usr/local/cuda-11.7/bin'&amp;gt;&amp;gt; /etc/profile&quot;
$ sudo sh -c &quot;echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.7/lib64'&amp;gt;&amp;gt; /etc/profile&quot;
$ sudo sh -c &quot;echo 'export CUDADIR=/usr/local/cuda-11.7'&amp;gt;&amp;gt; /etc/profile&quot;
$ source /etc/profile&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4. cuDNN 설치&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #374151; text-align: start;&quot;&gt;cuDNN은 NVIDIA가 개발한 &lt;span style=&quot;color: #374151; text-align: start;&quot;&gt;Deep Neural Network &lt;/span&gt;전용 &lt;span style=&quot;color: #374151; text-align: start;&quot;&gt;GPU 가속 라이브러리&lt;/span&gt;입니다. 딥러닝 프레임워크들이 빠르고 효율적으로 학습하고 추론하도록 도와줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #4b4f58; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;아래 cuDNN 사이트로 이동하면 버전에 맞는 cuDNN을 다운로드 받을 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #4b4f58; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #4b4f58; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer.nvidia.com/cudnn&quot;&gt;https://developer.nvidia.com/cudnn&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1690988053346&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;CUDA Deep Neural Network&quot; data-og-description=&quot;cuDNN provides researchers and developers with high-performance GPU acceleration.&quot; data-og-host=&quot;developer.nvidia.com&quot; data-og-source-url=&quot;https://developer.nvidia.com/cudnn&quot; data-og-url=&quot;https://developer.nvidia.com/cudnn&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bmVe11/hyTwjxR1Xt/2TstrYQv76wJzRLx3Ga6t0/img.jpg?width=1200&amp;amp;height=1191&amp;amp;face=0_0_1200_1191,https://scrap.kakaocdn.net/dn/41c41/hyTwiTfap0/RkT3Gs6MTVfuzPvwpkJYAk/img.png?width=1200&amp;amp;height=264&amp;amp;face=0_0_1200_264,https://scrap.kakaocdn.net/dn/FtgKi/hyTwpY7oDP/u39Nn8kQPQIQk9tWKSHH81/img.jpg?width=1145&amp;amp;height=220&amp;amp;face=731_112_773_160&quot;&gt;&lt;a href=&quot;https://developer.nvidia.com/cudnn&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer.nvidia.com/cudnn&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bmVe11/hyTwjxR1Xt/2TstrYQv76wJzRLx3Ga6t0/img.jpg?width=1200&amp;amp;height=1191&amp;amp;face=0_0_1200_1191,https://scrap.kakaocdn.net/dn/41c41/hyTwiTfap0/RkT3Gs6MTVfuzPvwpkJYAk/img.png?width=1200&amp;amp;height=264&amp;amp;face=0_0_1200_264,https://scrap.kakaocdn.net/dn/FtgKi/hyTwpY7oDP/u39Nn8kQPQIQk9tWKSHH81/img.jpg?width=1145&amp;amp;height=220&amp;amp;face=731_112_773_160');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;CUDA Deep Neural Network&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;cuDNN provides researchers and developers with high-performance GPU acceleration.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer.nvidia.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 아이디가 없다면 가입하고 로그인을 해야 합니다.&lt;/p&gt;
&lt;div&gt;
&lt;div style=&quot;color: #000000;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;버전에 맞게 압출파일을 다운로드 해 줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1734&quot; data-origin-height=&quot;594&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/53RdL/btspVpUujau/O2KVlnCm9UrE9Yc0XxLMF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/53RdL/btspVpUujau/O2KVlnCm9UrE9Yc0XxLMF0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/53RdL/btspVpUujau/O2KVlnCm9UrE9Yc0XxLMF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F53RdL%2FbtspVpUujau%2FO2KVlnCm9UrE9Yc0XxLMF0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1734&quot; height=&quot;594&quot; data-origin-width=&quot;1734&quot; data-origin-height=&quot;594&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #343434; text-align: left;&quot;&gt;그리고 아래 명령어로 압축을 풀고, 파일을&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt; /usr/local/cuda 디렉토리로 복사해 줍니다. &lt;span style=&quot;background-color: #ffffff; color: #343434; text-align: left;&quot;&gt;(파일은 당연히&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;본인이 설치한 파일명&lt;/b&gt;으로&lt;span style=&quot;background-color: #ffffff; color: #343434; text-align: left;&quot;&gt;&amp;nbsp;변경해 주셔야 합니다!)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;bash&quot; style=&quot;background-color: #000000; color: #b5b3aa; text-align: left;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;$ tar xvf cudnn-linux-x86_64-8.9.4.25_cuda11-archive.tar.xz
$ cd cudnn-linux-x86_64-8.9.4.25_cuda11-archive
$ sudo cp include/cudnn* /usr/local/cuda/include
$ sudo cp lib/libcudnn* /usr/local/cuda/lib64
$ sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;※ 참고로&lt;span&gt;&amp;nbsp;&lt;/span&gt;저 같은 경우, 원격 서버에 접속 중이기 때문에 filezilla를 사용해 서버에 파일을 옮겨주었습니다.&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #4b4f58; text-align: start;&quot;&gt;cuda 디렉토리와 실제 설치된 cuda-11.7 디렉토리를 심볼릭 링크 설정해 줍니다. &lt;span style=&quot;background-color: #ffffff; color: #343434; text-align: left;&quot;&gt;(마찬가지로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;본인이 설치한 드라이버, 파일&lt;/b&gt;을 참고하여&lt;span style=&quot;background-color: #ffffff; color: #343434; text-align: left;&quot;&gt; 변경해 주세요!)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;bash&quot; style=&quot;background-color: #000000; color: #b5b3aa; text-align: left;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;$ sudo ln -sf /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_adv_train.so.8.9.4 /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_adv_train.so.8
$ sudo ln -sf /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_ops_infer.so.8.9.4  /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_ops_infer.so.8
$ sudo ln -sf /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8.9.4  /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8
$ sudo ln -sf /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_adv_infer.so.8.9.4  /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_adv_infer.so.8
$ sudo ln -sf /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_ops_train.so.8.9.4  /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_ops_train.so.8
$ sudo ln -sf /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8.9.4 /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8
$ sudo ln -sf /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn.so.8.2.1 /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn.so.8&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 새로 추가된 라이브러리를 시스템에서 찾을 수 있도록 합니다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;$ sudo ldconfig&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로 설정이 제대로 되었는지 확인하기 위해 아래 명령어를 시행합니다.&lt;/p&gt;
&lt;div style=&quot;background-color: #000000; color: #b5b3aa; text-align: left;&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;$ ldconfig -N -v $(sed 's/:/ /' &amp;lt;&amp;lt;&amp;lt; $LD_LIBRARY_PATH) 2&amp;gt;/dev/null | grep libcudnn&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1023&quot; data-origin-height=&quot;354&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/s11EY/btssxIrXlp5/1Yrq6UAvHqJbDVMFRZEpPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/s11EY/btssxIrXlp5/1Yrq6UAvHqJbDVMFRZEpPK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/s11EY/btssxIrXlp5/1Yrq6UAvHqJbDVMFRZEpPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fs11EY%2FbtssxIrXlp5%2F1Yrq6UAvHqJbDVMFRZEpPK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;698&quot; height=&quot;242&quot; data-origin-width=&quot;1023&quot; data-origin-height=&quot;354&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CUDA 관련된 설치는 이렇게 하면 완료가 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후에 가상환경 설치, 여러 라이브러리들 설치 등의 과정을 진행하면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정말 힘겨웠지만 꼭 해야하는 것이었기에,,, 집념의 힘을 발휘해 보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;뒤에 세팅이 더 남았지만 어쨌거나 여기까진 하루만에 성공했다는 게 정말 감격.......&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연학학습 수행가능한 환경이 완성되는 날까지... 화이팅!!!!&lt;/p&gt;</description>
      <category>AWS &amp;amp; Linux</category>
      <category>CUDA 설치</category>
      <category>cudnn</category>
      <category>driver 버전</category>
      <category>gpu 설정</category>
      <category>gpu 세팅</category>
      <category>linux cuda</category>
      <category>Nvidia driver</category>
      <category>ubuntu</category>
      <category>ubuntu 22.4</category>
      <author>all_sound</author>
      <guid isPermaLink="true">https://allsound.tistory.com/207</guid>
      <comments>https://allsound.tistory.com/207#entry207comment</comments>
      <pubDate>Fri, 4 Aug 2023 16:28:26 +0900</pubDate>
    </item>
    <item>
      <title>드디어 백준 골드 진입!!!!</title>
      <link>https://allsound.tistory.com/206</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;562&quot; data-origin-height=&quot;295&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqq3r7/btsnEorNrYU/Aa6POiCZKmFnJzQpeTzil1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqq3r7/btsnEorNrYU/Aa6POiCZKmFnJzQpeTzil1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqq3r7/btsnEorNrYU/Aa6POiCZKmFnJzQpeTzil1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcqq3r7%2FbtsnEorNrYU%2FAa6POiCZKmFnJzQpeTzil1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;364&quot; height=&quot;191&quot; data-origin-width=&quot;562&quot; data-origin-height=&quot;295&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실버에서 골드로 진입하는 데 정말 오랜 시간이 걸렸다ㅠㅠ 그 이유는 그간 문제를 전혀 안 풀었기 때문이다...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8개월 전 처음 Python을 시작했을 때 2어달 동안 기초 문제들을 약간 건드렸는데, 그 이후 부트캠프 진도 + 프로젝트로 도저히 코테에 시간을 할애할 수 없었다(는 변명.....)&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;face&quot; data-emoticon-name=&quot;046&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/face/large/046.png&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/face/large/046.png&quot; width=&quot;80&quot; /&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어쨌거나 이번에 다시 심기일전 해서 백준을 풀기 시작한지 3주 정도 되어가는 것 같다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1161&quot; data-origin-height=&quot;492&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNFDNW/btsnSZXxhQG/dcPMKovbDLyTSqXg7dZB01/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNFDNW/btsnSZXxhQG/dcPMKovbDLyTSqXg7dZB01/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNFDNW/btsnSZXxhQG/dcPMKovbDLyTSqXg7dZB01/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNFDNW%2FbtsnSZXxhQG%2FdcPMKovbDLyTSqXg7dZB01%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;674&quot; height=&quot;286&quot; data-origin-width=&quot;1161&quot; data-origin-height=&quot;492&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이쯤되니 쉬운 문제는 거의 다 풀어버려서 한 문제 한 문제 시간이 정말 많이 걸린다. 꾸역꾸역 아이디어를 생각해 내려고 하니 뇌에 쥐가 난다.. 그냥 패턴을 통째로 외워버리는 식으로 접근해야 할 것 같다!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근에 다시 또 바빠져 버려서 언제까지 이 텐션을 유지할 수 있을지는 모르겠다ㅠㅠ&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 당장 코테를 보는 입장이 아니라서 자꾸 2순위로 미뤄버리는 듯...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;감각 읽지 않기 위해 조금씩이라도 꾸준히 풀어보자 제발~~~~&lt;/p&gt;</description>
      <category>후기</category>
      <category>백준</category>
      <category>백준 골드</category>
      <category>알고리즘 공부</category>
      <category>코딩테스트</category>
      <author>all_sound</author>
      <guid isPermaLink="true">https://allsound.tistory.com/206</guid>
      <comments>https://allsound.tistory.com/206#entry206comment</comments>
      <pubDate>Sun, 16 Jul 2023 16:54:46 +0900</pubDate>
    </item>
    <item>
      <title>[Algorithm] 백준 20920 영단어 암기는 괴로워 with Python</title>
      <link>https://allsound.tistory.com/205</link>
      <description>&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;문제&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_description&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;화은이는 이번 영어 시험에서 틀린 문제를 바탕으로 영어 단어 암기를 하려고 한다. 그 과정에서 효율적으로 영어 단어를 외우기 위해 영어 단어장을 만들려&amp;nbsp;하고 있다. 화은이가 만들고자 하는 단어장의 단어 순서는 다음과 같은 우선순위를 차례로 적용하여 만들어진다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li style=&quot;color: #555555;&quot;&gt;자주 나오는 단어일수록 앞에 배치한다.&lt;/li&gt;
&lt;li style=&quot;color: #555555;&quot;&gt;해당 단어의 길이가 길수록 앞에 배치한다.&lt;/li&gt;
&lt;li style=&quot;color: #555555;&quot;&gt;알파벳 사전 순으로 앞에 있는&amp;nbsp;단어일수록 앞에 배치한다&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;M보다 짧은 길이의 단어의 경우 읽는 것만으로도 외울 수 있기 때문에 길이가&lt;span&gt; &lt;/span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;M&lt;/span&gt;이상인 단어들만 외운다고 한다. 화은이가 괴로운 영단어 암기를 효율적으로 할 수 있도록 단어장을 만들어 주자.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;입력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_input&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에는 영어 지문에 나오는 단어의 개수&lt;span&gt; &lt;/span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;N&lt;/span&gt;과 외울 단어의 길이 기준이 되는&lt;span&gt; &lt;/span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;M&lt;/span&gt;이 공백으로 구분되어 주어진다. (1&amp;le;N&amp;le;100000,&lt;span aria-hidden=&quot;true&quot;&gt; &lt;/span&gt;1&amp;le;M&amp;le;10)&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;둘째 줄부터&lt;span&gt; &lt;/span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;N+1&lt;/span&gt;번째 줄까지 외울 단어를 입력받는다. 이때의 입력은 알파벳 소문자로만 주어지며 단어의 길이는&lt;span&gt;&amp;nbsp;&lt;/span&gt;10의 10승을 넘지 않는다.&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;단어장에&amp;nbsp;단어가 반드시 1개 이상 존재하는&amp;nbsp;입력만 주어진다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;출력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_output&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;화은이의 단어장에 들어 있는 단어를 단어장의 앞에 위치한 단어부터 한 줄에 한 단어씩 순서대로 출력한다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;예제 입력&amp;nbsp;&lt;/h2&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-input-1&quot; class=&quot;bash&quot; style=&quot;background-color: #f7f7f9; color: #333333;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;7 4
apple
ant
sand
apple
append
sand
sand&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;예제 출력&amp;nbsp;&lt;/h2&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-output-1&quot; class=&quot;bash&quot; style=&quot;background-color: #f7f7f9; color: #333333;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;sand
apple
append&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;예제 입력&amp;nbsp;&lt;/h2&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-input-2&quot; class=&quot;bash&quot; style=&quot;background-color: #f7f7f9; color: #333333;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;12 5
appearance
append
attendance
swim
swift
swift
swift
mouse
wallet
mouse
ice
age&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;예제 출력&amp;nbsp;&lt;/h2&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-output-2&quot; class=&quot;bash&quot; style=&quot;background-color: #f7f7f9; color: #333333;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;swift
mouse
appearance
attendance
append
wallet&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 자체는 간단해서 쉽게 구현 가능할 줄 알았는데, 생각보다 훨씬 복잡한 정렬 알고리즘을 짜야했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순하게 생각했던 sorting 함수에 대해 더 깊게 이해할 수 있었던 참 좋은 문제라고 할 수 있겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구체적으로는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) lambda 함수를 사용해 sorting의 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;key &lt;/span&gt;조건 지정하기,&amp;nbsp; 2) dictionary의 정렬 방법&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;등을 다시금 이해할 수 있었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제에서 요구하는 조건은 3가지이다.&lt;/p&gt;
&lt;pre id=&quot;code_1689491337817&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sorted_words = sorted(set(words), key=lambda x: (-cnt_dict[x], -len(x), x))&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li style=&quot;color: #555555;&quot;&gt;자주 나오는 단어일수록 앞에 배치 : 단어의 빈도수를 value로 가지는 dictionary 생성 후 lambda 함수에 적용&lt;/li&gt;
&lt;li style=&quot;color: #555555;&quot;&gt;해당 단어의 길이가 길수록 앞에 배치 : len()를 취해 l&lt;span style=&quot;color: #555555; text-align: left;&quot;&gt;ambda 함수에 적용&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;color: #555555;&quot;&gt;알파벳 사전 순으로 앞에 있는 단어일수록 앞에 배치 : 그냥 x로 넣을 경우 자동으로 알파벳 사전 순 정렬&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 코드는 아래와 같다.&lt;/p&gt;
&lt;pre id=&quot;code_1689262358770&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
input = sys.stdin.readline
n, m = map(int, input().split())

# 특정 길이 이상의 문자열만 저장
words = []
for _ in range(n):
  temp = input().rstrip()
  if len(temp) &amp;gt;= m:
    words.append(temp)

# 빈도수 내림차순으로 정렬하기 위한 기준 만들기
cnt_dict = {}
for word in words:
    if word in cnt_dict:
        cnt_dict[word] += 1
    else:
        cnt_dict[word] = 1
        
# 총 3가지 조건으로 단어 list 정렬하기
sorted_words = sorted(set(words), key=lambda x: (-cnt_dict[x], -len(x), x))

for word in sorted_words:
  print(word)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1105&quot; data-origin-height=&quot;52&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qGEJa/btsnFehXdeS/pxWfivUzoZzNKFjVuy6M6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qGEJa/btsnFehXdeS/pxWfivUzoZzNKFjVuy6M6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qGEJa/btsnFehXdeS/pxWfivUzoZzNKFjVuy6M6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqGEJa%2FbtsnFehXdeS%2FpxWfivUzoZzNKFjVuy6M6k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1105&quot; height=&quot;52&quot; data-origin-width=&quot;1105&quot; data-origin-height=&quot;52&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/20920&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/20920&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1689262150329&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;20920번: 영단어 암기는 괴로워&quot; data-og-description=&quot;첫째 줄에는 영어 지문에 나오는 단어의 개수 $N$과 외울 단어의 길이 기준이 되는 $M$이 공백으로 구분되어 주어진다. ($1&amp;nbsp;\leq N&amp;nbsp;\leq 100\,000$, $1&amp;nbsp;\leq M&amp;nbsp;\leq 10$) 둘째 줄부터 $N+1$번째 줄까지 외울 단&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/20920&quot; data-og-url=&quot;https://www.acmicpc.net/problem/20920&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/20920&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/20920&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;20920번: 영단어 암기는 괴로워&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에는 영어 지문에 나오는 단어의 개수 $N$과 외울 단어의 길이 기준이 되는 $M$이 공백으로 구분되어 주어진다. ($1&amp;nbsp;\leq N&amp;nbsp;\leq 100\,000$, $1&amp;nbsp;\leq M&amp;nbsp;\leq 10$) 둘째 줄부터 $N+1$번째 줄까지 외울 단&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>DataStructure &amp;amp; Algorithm/문제풀이</category>
      <author>all_sound</author>
      <guid isPermaLink="true">https://allsound.tistory.com/205</guid>
      <comments>https://allsound.tistory.com/205#entry205comment</comments>
      <pubDate>Sun, 16 Jul 2023 16:14:09 +0900</pubDate>
    </item>
    <item>
      <title>[논문 리뷰] Federated Learning(연합 학습) /Communication-Efficient Learning of Deep Networks from Decentralized Data</title>
      <link>https://allsound.tistory.com/204</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://polyfill.io/v3/polyfill.min.js?features=es6&quot;&gt;&lt;/script&gt;
&lt;script&gt; MathJax = { tex: {inlineMath: [['$', '$'], ['\\(', '\\)']]} }; &lt;/script&gt;
&lt;script src=&quot;https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js&quot;&gt;&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2016년에 Federated Learning(연합 학습) 개념을 가장 처음 소개한 Google의 논문을 리뷰해 보려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Communication-Efficient&amp;nbsp;Learning&amp;nbsp;of&amp;nbsp;Deep&amp;nbsp;Networks&amp;nbsp;from&amp;nbsp;Decentralized&amp;nbsp;Data&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저자 - &lt;a style=&quot;background-color: #ffffff; text-align: start;&quot; href=&quot;https://arxiv.org/search/cs?searchtype=author&amp;amp;query=McMahan%2C+H+B&quot;&gt; H. Brendan McMahan&lt;/a&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a style=&quot;background-color: #ffffff; text-align: start;&quot; href=&quot;https://arxiv.org/search/cs?searchtype=author&amp;amp;query=Moore%2C+E&quot;&gt;Eider Moore&lt;/a&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a style=&quot;background-color: #ffffff; text-align: start;&quot; href=&quot;https://arxiv.org/search/cs?searchtype=author&amp;amp;query=Ramage%2C+D&quot;&gt;Daniel Ramage&lt;/a&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a style=&quot;background-color: #ffffff; text-align: start;&quot; href=&quot;https://arxiv.org/search/cs?searchtype=author&amp;amp;query=Hampson%2C+S&quot;&gt;Seth Hampson&lt;/a&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a style=&quot;background-color: #ffffff; text-align: start;&quot; href=&quot;https://arxiv.org/search/cs?searchtype=author&amp;amp;query=Arcas%2C+B+A+y&quot;&gt;Blaise Ag&amp;uuml;era y Arcas&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/1602.05629v4&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://arxiv.org/abs/1602.05629v4&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1688521393301&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Communication-Efficient Learning of Deep Networks from Decentralized Data&quot; data-og-description=&quot;Modern mobile devices have access to a wealth of data suitable for learning models, which in turn can greatly improve the user experience on the device. For example, language models can improve speech recognition and text entry, and image models can automa&quot; data-og-host=&quot;arxiv.org&quot; data-og-source-url=&quot;https://arxiv.org/abs/1602.05629v4&quot; data-og-url=&quot;https://arxiv.org/abs/1602.05629v4&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/d9Pm1N/hyTcDEt0fy/3frVexoM5f6PiqkH2DcyEk/img.png?width=1200&amp;amp;height=700&amp;amp;face=0_0_1200_700,https://scrap.kakaocdn.net/dn/d7Sg6M/hyTebfjcr2/RKIkdmbsxlzEzN6aQOJzh1/img.png?width=1000&amp;amp;height=1000&amp;amp;face=0_0_1000_1000&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/1602.05629v4&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://arxiv.org/abs/1602.05629v4&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/d9Pm1N/hyTcDEt0fy/3frVexoM5f6PiqkH2DcyEk/img.png?width=1200&amp;amp;height=700&amp;amp;face=0_0_1200_700,https://scrap.kakaocdn.net/dn/d7Sg6M/hyTebfjcr2/RKIkdmbsxlzEzN6aQOJzh1/img.png?width=1000&amp;amp;height=1000&amp;amp;face=0_0_1000_1000');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Communication-Efficient Learning of Deep Networks from Decentralized Data&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Modern mobile devices have access to a wealth of data suitable for learning models, which in turn can greatly improve the user experience on the device. For example, language models can improve speech recognition and text entry, and image models can automa&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;arxiv.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Problem&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;많은 사람들이 휴대폰, 태블릿 등을 컴퓨팅 디바이스로 사용하고 있다. 이러한 기기에는 강력한 센서(카메라, 마이크, GPS 등)가 탑재돼 있고, 휴대성과 사용성이 높기 때문에 대량의 데이터에 접근이 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;그러나, &lt;b&gt;&lt;u&gt;데이터의 민감성&lt;/u&gt;&lt;/b&gt; + &lt;b&gt;&lt;u&gt;거대한 용량&lt;/u&gt;&lt;/b&gt; 문제들 때문에 중앙 집중식 서버에 데이터를 저장하는데 위험과 책임이 따른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Solution&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;b&gt;&lt;u&gt;연합학습(Federated Learning)&lt;/u&gt;&lt;/b&gt;이라는 알고리즘을 통해 이 문제를 해결할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;각 클라이언트는 서버에 업로드 되지 않은 로컬 학습 데이터 세트를 가지고 있다. 서버에서 글로벌 모델을 각 클라이언트로 보내면, 클라이언트는 모델에 대한 가중치를 업데이트한 뒤 이를 다시 서버로 전송한다. 서버는 클라이언트들에게 받은 가중치들을 통해 최종적으로 글로벌 모델을 업데이트한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이러한 방법을 통해 학습 데이터에 대한 직접 액세스를 하지 않고도 모델 학습을 수행할 수 있다. 따라서 정보 보호 및 보안 위험을 크게 줄일 수 있고, 데이터의 저장 문제도 해결 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;616&quot; data-origin-height=&quot;448&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mhY5B/btsmGAeIKOy/5SKF58KjhFVylXP0iS0Xf0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mhY5B/btsmGAeIKOy/5SKF58KjhFVylXP0iS0Xf0/img.png&quot; data-alt=&quot;Yu, B. ,&amp;amp;amp;nbsp; Mao, W. ,&amp;amp;amp;nbsp; Lv, Y. ,&amp;amp;amp;nbsp; Zhang, C. , &amp;amp;amp;&amp;amp;amp;nbsp; Xie, Y. &amp;amp;amp;nbsp;( 2022 ).&amp;amp;amp;nbsp; A survey on federated learning in data mining .&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mhY5B/btsmGAeIKOy/5SKF58KjhFVylXP0iS0Xf0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmhY5B%2FbtsmGAeIKOy%2F5SKF58KjhFVylXP0iS0Xf0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;438&quot; height=&quot;319&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;616&quot; data-origin-height=&quot;448&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Yu, B. ,&amp;amp;nbsp; Mao, W. ,&amp;amp;nbsp; Lv, Y. ,&amp;amp;nbsp; Zhang, C. , &amp;amp;&amp;amp;nbsp; Xie, Y. &amp;amp;nbsp;( 2022 ).&amp;amp;nbsp; A survey on federated learning in data mining .&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Federated Optimization(연합 최적화) 주요 특성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Non-IID&lt;/b&gt; : 데이터는 독립항등 분포가 아니다. 특정 사용자의 local dataset을 사용하기 때문에 모집단의 분포를 대표하지 않는다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Unbalanced&lt;/b&gt; : 사용자마다 디바이스 사용량이 다르므로 local training data가 불균형하게 구성되어 있다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Massively distributed&lt;/b&gt; : 최적화에 참여하는 클라이언트 수가 방대할 것으로 예상된다. (최대 10의 10승)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Limited communication&lt;/b&gt; : 디바이스와의 커뮤니케이션의 제한적이다. 오프라인 상태, 인터넷 연결 문제 등 다양한 원인이 존재한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Algorithm&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;u&gt;Original &lt;/u&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;770&quot; data-origin-height=&quot;117&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qlF8h/btsmIfHmIGc/08XxFPPbgasAXkDynZum1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qlF8h/btsmIfHmIGc/08XxFPPbgasAXkDynZum1K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qlF8h/btsmIfHmIGc/08XxFPPbgasAXkDynZum1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqlF8h%2FbtsmIfHmIGc%2F08XxFPPbgasAXkDynZum1K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;435&quot; height=&quot;71&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;770&quot; data-origin-height=&quot;117&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;전형적인 머신러닝의 학습 방법은 loss function &lt;span style=&quot;background-color: #dddddd;&quot;&gt;${f}_i\left(w\right)=l{\left({{x}_i}\ ,{{y}_i}\ ;\ w\right)}$&lt;/span&gt; 을 최소화하는 방향으로 나아간다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;u&gt;&amp;nbsp;&lt;b&gt;Fedarated Learning&lt;/b&gt;&lt;/u&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;856&quot; data-origin-height=&quot;135&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bRrn6W/btsmzcdGXF5/B29fWLMNJvUREAWcbTeuzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bRrn6W/btsmzcdGXF5/B29fWLMNJvUREAWcbTeuzK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bRrn6W/btsmzcdGXF5/B29fWLMNJvUREAWcbTeuzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbRrn6W%2FbtsmzcdGXF5%2FB29fWLMNJvUREAWcbTeuzK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;450&quot; height=&quot;71&quot; data-origin-width=&quot;856&quot; data-origin-height=&quot;135&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;연합 학습에서는 각각 로컬 클라이언트의 loss가 먼저 구해진다. 그 후, 서버에서 이들을 종합한 loss를 계산하고 이를 최소화하는 방향으로 모델을 업데이트한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;만약 데이터 분포가 IID라고 가정한다면,&amp;nbsp; &lt;span style=&quot;background-color: #dddddd;&quot;&gt;${{{E}_{{P}_k}\left[{F}_k\left(w\right)\right]\ =\ f\left(w\right)}}$&lt;/span&gt;&amp;nbsp; 이 처럼 클라이언트들의 기댓값이 손실 함수와 같아진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;그런데 본 상황과 같은 Non-IID 상태에서는 클라이언트 당 데이터 분포가 일정하지 않기 때문에 이를 적용할 수 없다. 따라서 위의 식과 같이 서버에서 loss를 구할 때 클라이언트 별로 가중치를 달리 부여하는 형태를 취하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;i&gt;K : 클라이언트들의 개수. (ex. 연합 학습에 참여하는 디바이스의 개수)&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;i&gt;$P_k$ : 클라이언트 k의 인덱스들의 집합&amp;nbsp; (ex. 한 디바이스의 데이터들의 집합)&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;i&gt;$N_k$ = ${\left|{P_k}\right|}$&amp;nbsp; ( $P_k$&lt;span&gt;&amp;nbsp;집합의 크기, 즉 $P_k$ 데이터의 개수)&lt;/span&gt;&lt;/i&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;&lt;span style=&quot;text-align: start;&quot;&gt;FederatedAveraging Algorithm (연합 평균 알고리즘)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;구체적으로 FederatedAveraging 알고리즘을 살펴보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;745&quot; data-origin-height=&quot;712&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cvAoAp/btsmuqw2FPd/7f3AKGYFhVlGQFkoKuach0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cvAoAp/btsmuqw2FPd/7f3AKGYFhVlGQFkoKuach0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cvAoAp/btsmuqw2FPd/7f3AKGYFhVlGQFkoKuach0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcvAoAp%2Fbtsmuqw2FPd%2F7f3AKGYFhVlGQFkoKuach0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;407&quot; height=&quot;389&quot; data-origin-width=&quot;745&quot; data-origin-height=&quot;712&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;i&gt;C : 각 라운드에서 계산을 수행하는 클라이언트 비율. &lt;/i&gt;&lt;i&gt;(C=1 이면 full-batch = non-stochastic, C=0.5 이면 절반의 디바이스만 골라 학습에 참여)&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;i&gt;E : 각 라운드에서 각 클라이언트가 로컬 데이터셋에 대해 수행하는 패스 수 (local epoch)&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;i&gt;B : 로컬 미니 배치 크기.( B=$\infty $ 이면 full local dataset)&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;최초로 서버에서 모델의 웨이트 $w_0$를 클라이언트들에게 전송한다. 그리고 업데이트를 진행시킬 클라이언트 데이터를 선별하게 된다.&amp;nbsp; 그 부분이 $Max(C*K, 1)$ 이다. K개의 클라이언트들 중 랜덤으로 C만큼의 비율을 뽑는데, 적어도 하나의 클라이언트는 참여시키게 된다. $S_t$는 선별된 클라이언트들의 집합이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;그 후 각각의 클라이언트들에서는 병렬적으로 weight update를 진행하게 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클라이언트는 지정된 배치 사이즈, epoch, learning rate를 적용해서 SGD를 수행하여 weight를 업데이트하고, 이 weight들은 다시 서버로 보내지게 된다. 서버에서는 이를 종합해서 최종 weight update를 진행한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;이 하나의 과정이 여러 round를 걸쳐서 반복된다고 보면 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;FederatedSGD&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;논문에서 FederatedAveraging 말고 FederatedSGD 도 소개가 되는데, 이는 동일한 알고리즘에서 B=$\infty $ 이고&amp;nbsp; E=1인 케이스를 일컫는다. 즉, 로컬 클라이언트 업데이트 과정에서 full batch로 모든 데이터를 딱 한 번만 업데이트해서 서버로 보낸다는 의미이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;FedAvg Algorithm의 효율성 검증&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;865&quot; data-origin-height=&quot;435&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bM7dbM/btsmz3gaUs0/2Lta21zABXtyrpoL6uuOo1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bM7dbM/btsmz3gaUs0/2Lta21zABXtyrpoL6uuOo1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bM7dbM/btsmz3gaUs0/2Lta21zABXtyrpoL6uuOo1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbM7dbM%2Fbtsmz3gaUs0%2F2Lta21zABXtyrpoL6uuOo1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;490&quot; height=&quot;246&quot; data-origin-width=&quot;865&quot; data-origin-height=&quot;435&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;MNIST 데이터셋을 사용하여 두 개의 모델을 averging 한 결과를 나타낸 그래프이다. 왼쪽은 초기 weight를 각각 랜덤으로 설정한 케이스인데 averaging 했을 때 loss가 증가하는 것을 볼 수 있다. 반면, 오늘쪽과 같이 동일한&amp;nbsp; weight에서 출발을 한 경우에는 averaging 했을 때 loss가 최저로 떨어지는 것을 볼 수 있다. 이로써 서버 모델의 동일한 weight를 기반으로 한 연합 평균 알고리즘의 효율성이 입증된다고 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;실험 결과&amp;nbsp;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 논문에서는 크게 3가지 데이터를 가지고 수행한 다양한 실험 결과들을 보여준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) MNIST 숫자 인식 Dataset&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 2NN 모델 / CNN 모델 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(구체적인 모델 구성은 논문 참조)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- IID / Non-IID 상황 분리 (구체적인 IID / Non-IID 셋팅 방법은 논문 참조)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) The Complete Works of William Shakespeare &lt;b&gt;Dataset&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;각 연극의 대사가 있는 역할마다 클라이언트 데이터셋 구성 -&amp;gt; 1146개의 클라이언트&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;- &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;stacked character-level LSTM language model : &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;각 라인의 문자를 읽은 후 다음 문자를 예측하는 모델 생성&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3) Cifar-10 이미지 분류 Dataset&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 부터는 논문에 수록된 다양한 실험 결과들을 소개한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;828&quot; data-origin-height=&quot;440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wrvDn/btsmIQ1O9it/FOYLUq6g8uOVuVYyseiTFk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wrvDn/btsmIQ1O9it/FOYLUq6g8uOVuVYyseiTFk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wrvDn/btsmIQ1O9it/FOYLUq6g8uOVuVYyseiTFk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwrvDn%2FbtsmIQ1O9it%2FFOYLUq6g8uOVuVYyseiTFk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;473&quot; height=&quot;251&quot; data-origin-width=&quot;828&quot; data-origin-height=&quot;440&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;MMIST 데이터 사용. 2NN 모델 97% 정확도, CNN 모델 99% 정확도를 달성한 조건에서의 communication round 측정.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 특정 정확도를 달성하는 데 서버와 클라이언트 간 모델 전송을 얼마나 많이 해야하는지를 나타낸다. 빨간 박스들이 최소 communication 비용을 달성했다고 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;921&quot; data-origin-height=&quot;650&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Sofkb/btsmIQOi7al/0pCNrTNUXgv4GJCpMOkSN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Sofkb/btsmIQOi7al/0pCNrTNUXgv4GJCpMOkSN1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Sofkb/btsmIQOi7al/0pCNrTNUXgv4GJCpMOkSN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSofkb%2FbtsmIQOi7al%2F0pCNrTNUXgv4GJCpMOkSN1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;436&quot; height=&quot;308&quot; data-origin-width=&quot;921&quot; data-origin-height=&quot;650&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;MMIST 데이터 사용. FedSGD와 FedAVG를 비교해서 학습한 결과를 보여 준다. FedAVG 중에서도 빨간 박스 조건에서 최소 communication 비용을 달성했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;741&quot; data-origin-height=&quot;816&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLtSeo/btsmzcxWW6k/RcKQk2jmldkDkJpZbhOLq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLtSeo/btsmzcxWW6k/RcKQk2jmldkDkJpZbhOLq1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLtSeo/btsmzcxWW6k/RcKQk2jmldkDkJpZbhOLq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLtSeo%2FbtsmzcxWW6k%2FRcKQk2jmldkDkJpZbhOLq1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;487&quot; height=&quot;536&quot; data-origin-width=&quot;741&quot; data-origin-height=&quot;816&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상위 두 그래프는 MNIST CNN 모델, 하위 두 그래프는 Shakespeare LSTM 모델 사용. Local Batch Size와 Local Epoch의 변화에 따른 정확도 추이를 보여주는 그래프들이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;961&quot; data-origin-height=&quot;604&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pe5m4/btsmDI5K2gS/HraNZOk0pclQNHiNkiYrok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pe5m4/btsmDI5K2gS/HraNZOk0pclQNHiNkiYrok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pe5m4/btsmDI5K2gS/HraNZOk0pclQNHiNkiYrok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fpe5m4%2FbtsmDI5K2gS%2FHraNZOk0pclQNHiNkiYrok%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;481&quot; height=&quot;302&quot; data-origin-width=&quot;961&quot; data-origin-height=&quot;604&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델을 로컬 epoch 수 별로 학습시켜 성능을 비교한 결과이다. Shakespeare LSTM 모델 사용. B=10, C=0.1로 고정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;917&quot; data-origin-height=&quot;175&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XN8aT/btsmHmNJuKv/R7CZinzOFKauuGwfO17O31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XN8aT/btsmHmNJuKv/R7CZinzOFKauuGwfO17O31/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XN8aT/btsmHmNJuKv/R7CZinzOFKauuGwfO17O31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXN8aT%2FbtsmHmNJuKv%2FR7CZinzOFKauuGwfO17O31%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;556&quot; height=&quot;106&quot; data-origin-width=&quot;917&quot; data-origin-height=&quot;175&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;단일 모델에서 SGD를 한 경우 vs Fedarated Learning을 한 경우, 최대 정확도에 도달하기 위한 round를 비교한 결과이다. 최종적으로 FedAVG의 성능이 가능 높았다고 한다. Cifar 10 데이터 사용. C=1, FedAvg에서는 E=5, B=50 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1321&quot; data-origin-height=&quot;460&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d49FgM/btsmHHdlMWM/dRh2vVAiFdt8PGdcWkPM6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d49FgM/btsmHHdlMWM/dRh2vVAiFdt8PGdcWkPM6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d49FgM/btsmHHdlMWM/dRh2vVAiFdt8PGdcWkPM6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd49FgM%2FbtsmHHdlMWM%2FdRh2vVAiFdt8PGdcWkPM6k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;739&quot; height=&quot;257&quot; data-origin-width=&quot;1321&quot; data-origin-height=&quot;460&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FedSGD, FedAvg 두 알고리즘에 Learning Rate 변화를 적용해 학습한 결과들이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 밖에 부록에 더욱 다양한 실험 결과 그래프와 설명들이 존재하니, 관심 있으신 분들을 가서 참고하시길..!!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;관련 논문을 처음 읽어 보지만 앞으로 연합 학습에 대한 연구가 정말 활발해 질 것 같은 느낌이 든다. 데이터는 정말 방대한데 그걸 종합적으로 모으고 정제하고 저장하고 관리하는 일은 결코 쉬운 게 아니라고 생각한다. 연합 학습을 통해 로컬에서 각각 모델 업데이트를 할 수 있다면 정말 쉽고 빠르게 거대 모델을 생성할 수 있을 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;그리고 이런 중요한 Task를 이렇게 간단한 알고리즘으로 수행이 가능하다는 사실도 참 놀라웠다. '여러 가중치들을 모아 weighted sum 한다' 라는 것이 핵심 아이디어의 전부라고 해도 과언이 아니다. 이 아이디어를 실제로 구현하고, 수많은 실험을 수행해서 증명해 냈다는 것이 더 대단한 일이긴 하지만.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;ChatGPT 같은 거대 모델을 업데이트 할 때도 이 연합 학습을 적용시켜 볼 수 있을 것 같기도 하다. 조만간 디바이스들에도유사한 알고리즘이 적용될 수도 있을 거라 생각한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아무튼 재밌고 유익한 논문이었다.&amp;nbsp; 끝!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>AI/Deep Learning</category>
      <category>FedAVG</category>
      <category>Federated learning</category>
      <category>FedSGD</category>
      <category>논문리뷰</category>
      <category>연합학습</category>
      <author>all_sound</author>
      <guid isPermaLink="true">https://allsound.tistory.com/204</guid>
      <comments>https://allsound.tistory.com/204#entry204comment</comments>
      <pubDate>Thu, 6 Jul 2023 19:59:20 +0900</pubDate>
    </item>
    <item>
      <title>SQLD 비전공자 3일 벼락치기 합격 후기 (+공부 방법)</title>
      <link>https://allsound.tistory.com/203</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;23년 6월 10일에 응시한 SQLD 시험 결과가 나왔다!!!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과는 70점으로 합격!!&lt;/p&gt;
&lt;figure style=&quot;color: #333333; text-align: left;&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignLeft&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;007&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/007.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/007.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;822&quot; data-origin-height=&quot;510&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2YNB5/btsl1gnNbOF/TQX2U85sSPtqnwoKk1kXOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2YNB5/btsl1gnNbOF/TQX2U85sSPtqnwoKk1kXOk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2YNB5/btsl1gnNbOF/TQX2U85sSPtqnwoKk1kXOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2YNB5%2Fbtsl1gnNbOF%2FTQX2U85sSPtqnwoKk1kXOk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;553&quot; height=&quot;343&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;822&quot; data-origin-height=&quot;510&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;자꾸 벼락치기 후기를 올리는 게 바람직하지는 않지만 이번 자격증 시험은 정말 우여곡절이 많았다...&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;그 이유는 시험 일주일 전에 코로나에 걸렸기 때문이다....ㅠㅠ&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;고향인 대구에 있던 상태였기 때문에 다행히 엄마의 간호 찬스를 획득할 수 있었는데,,&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;문제는 시험을 서울에 신청을 해 놓았다는 사실!&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;자가격리를 끝내자 마자 기차타고 올라와서 시험보는 스케쥴이 참 힘들 것 같아 시험장 변경을 시도했으나 실패!&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;아파서 공부도 제대로 못 할 거 같아 그냥 취소하자고 맘 먹었는데 시험 몇일 전에는 환불마저 안 된다길래;;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;5만원이 아까워 꾸역꾸역 시험을 치러 갔던 것이다!!!!&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;그래서 순 공부시간이 3일밖에 되지 않는다.....&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;사실 정보처리기사를 공부하며 DB에 대한 기본적인 이해는 있었기 때문에 가능했던 것 같다. (정말 가물가물하긴 하지만)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SQL 자체를 아예 처음 보는&amp;nbsp; 노베이스 비전공자라면 솔직히 3일은 힘들 것 같긴 하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;공부 방법&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공부 방법은 남들 다 하는대로 노랭이 문제를 풀었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SQLD의 시험범위는 책의 전범위가 아니다! 울면서 끝까지 공부하는 불상사는 일어나지 않게 주의하자!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;1. 데이터 모델링의 이해&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-54cdb99e-e9c8-4253-95f4-c6de09a25a57&quot; style=&quot;background-color: #ffffff; color: #555555; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;&amp;nbsp;- 데이터 모델링의 이해&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-c8bbb007-22be-40d4-9cfd-0a15311fbbc5&quot; style=&quot;background-color: #ffffff; color: #555555; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;&amp;nbsp;- 데이터 모델과 성능&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-7b85b48a-f241-42a7-9a6e-cfce9bb9ea24&quot; style=&quot;background-color: #ffffff; color: #555555; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;2. SQL 기본 및 활용&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-9dbe5db7-14a7-4c49-8fe1-808697159e2d&quot; style=&quot;background-color: #ffffff; color: #555555; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;&amp;nbsp;- SQL 기본&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-63e9a6d8-29c4-418a-bb36-1a99aa8b5d1f&quot; style=&quot;background-color: #ffffff; color: #555555; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;&amp;nbsp;- SQL 활용&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-6776b947-f34b-483f-86a0-e643893a6f19&quot; style=&quot;background-color: #ffffff; color: #555555; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;&amp;nbsp;- SQL 최적화 기본 원리&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공식적인 시험범위는 이렇게 명시돼 있는데 &lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: left;&quot;&gt;&lt;b&gt;&lt;u&gt;'최적화 기본 원리'&lt;/u&gt;&lt;/b&gt; 파트는 최근 출제를 하지 않는다는 소문을 듣고 과감하게 빼고 봤다. 역시나 1문제도 출제되지 않았으니, 시간이 없는 분은 제외하고 봐도 충분히 합격 가능!&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000; background-color: #dddddd;&quot;&gt;&lt;b&gt;&amp;gt; 1일차&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;- &lt;u&gt;문제 1회독 시도 (70% 정도 성공)&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생각보다 노랭이 문제들은 어려웠다. 기본 select 문 아는 정도의 수준에서 복잡한 join 문, 계층형 쿼리, 순위함수 등을 처음 보니 도통 무슨 말인지 이해할 수 없었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단은 데이터 전문가 포럼 카페에 가입해 재능기부로 올라온 이론 요약본을 다운받았다. (감사합니다 꾸벅)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 문제풀이 강의를 보기 시작했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유튜브에 검색을 하면 몇몇 강의가 나올 텐데, 여자 강사님 2분의 강의 같은 경우 초보자가 듣기에는 설명을 생략하는 부분이 많아 쉽지 않았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://youtu.be/_dx3fPb766E&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://youtu.be/_dx3fPb766E&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=_dx3fPb766E&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/c4YRCX/hyTa5TSdHJ/o4mgUc2m6OEHKW9CULSVMk/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-original-url=&quot;&quot; data-video-title=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/_dx3fPb766E&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다 들어본 결과, 이 분의 설명히 가장 구체적이고 친절하니 참고하시길!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 강의를 들어도 무슨 말인지 이해가 안되는 부분이 많이 생길 것이다. 그럴 땐 3가지 방법이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 다운받은 이론 요약집을 보고 해당되는 내용들을 읽어본다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 구글링&amp;amp;유튜브 검색 해서 간단히 개념을 확인한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 시험 때까지 이해할 수 있는 내용이 아니라는 판단이 들면 과감하게 그냥 넘어간다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞서 언급했듯이 노랭이에는 생각보다 복잡한 문제들이 많다. 나 또한 단기 이해 능력의 범위를 벗어난 문제들은 스킵하는 방식을 활용했다. 어려운 걸 붙잡고 있는 것보다 맞춰야 할 문제들을 맞추는 것이 더 중요하다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫째날은 문제 하나하나를 봐야하는 날이라 시간을 많이 투자했는데도 1회독을 완료하지 못했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000; background-color: #dddddd;&quot;&gt;&lt;b&gt;&amp;gt; 2일차&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;b&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;u&gt;1회독 나머지(30%) + 1일차 문제 복습&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1회독 남은 부분은 마찬가지로 꼼꼼히 살펴봤고, 그 후 전날 봤던 문제들을 한 번 더 흝어보기 시작했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어제 본 건데 까먹은 나 자신 대단하다...&amp;nbsp; 이 때는 요약본도 함께 찬찬히 읽어 봤는데 전체 틀을 이해하는 데 큰 도움이 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000; background-color: #dddddd;&quot;&gt;&lt;b&gt;&amp;gt; 3일차&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;요약본에서 필수 개념 외우기&lt;/b&gt;&lt;/u&gt;&lt;b&gt; + &lt;/b&gt;&lt;u&gt;&lt;b&gt;파이널 요약 강의 듣기&lt;/b&gt;&lt;/u&gt;&lt;b&gt; + &lt;/b&gt;&lt;u&gt;&lt;b&gt;노랭이 별표 친 문제들 다시 확인&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://youtu.be/BQxAxMnHByU&quot;&gt;https://youtu.be/BQxAxMnHByU&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=BQxAxMnHByU&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/Icfcz/hyTaZ0qDLN/eBkLqdZe0kwb67bSTAjpRK/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=990_170_1134_326&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-original-url=&quot;&quot; data-video-title=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/BQxAxMnHByU&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;노랭이 1회독을 했다면 어느 정도 출제 개념들을 파악했기 때문에 하루 전날은 시험에 출제될 만한 부분들을 빠르게 체크하고 정리하는 게 좋다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시간이 없어서 기출문제들은 아예 보지도 못했고 코로나 때문에 컨디션도 엉망이었지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어쨌든 3일간의 집착으로 합격을 해냈다.ㅠㅠㅠ&amp;nbsp; 역시 집착의 아이콘!!!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시험 당일 새벽에 ktx 타고 서울에 올라가면서 진짜 떨어지면 억울해서 어떡하나 생각했는데 참 다행이다..ㅎ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시험 자체는 생각보다 쉽게 나왔다. 노랭이에 나오는 개념들을 잘 이해만 하고 있다면 충분히 커버가 가능한 정도랄까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;짧은 시간에 이 많은 걸 외울 수 있을까?라는 걱정했는데, SQLD 문제는 외워서 푸는 게 아니라 이해해서 푸는 문제라는 느낌을 강하게 받았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 나의 경우 오히려 벼락치기가 가능했던 것같다. (외우는 거 극혐, 이해 안되면 잘 못 넘어감)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아무튼 이렇게 컴퓨터 관련 두번째 자격증을 획득했다. 좋아좋아 점점 레벨업되어 가는군.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 당분간 자격증 시험은 없다!&amp;nbsp; 벼락치기 스트레스 이제 그마안!!!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>후기</category>
      <category>sqld</category>
      <category>sqld 3일</category>
      <category>sqld 노랭이</category>
      <category>sqld 벼락치기</category>
      <category>sql개발자</category>
      <category>데이터 자격증</category>
      <category>비전공자 sqld</category>
      <author>all_sound</author>
      <guid isPermaLink="true">https://allsound.tistory.com/203</guid>
      <comments>https://allsound.tistory.com/203#entry203comment</comments>
      <pubDate>Sat, 1 Jul 2023 10:33:35 +0900</pubDate>
    </item>
    <item>
      <title>[Algorithm] 백준 10989 수 정렬하기3 with Python</title>
      <link>https://allsound.tistory.com/202</link>
      <description>&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #585f69; font-size: 1.62em; letter-spacing: -1px; background-color: #ffffff;&quot;&gt;문제&lt;/span&gt;&lt;/p&gt;
&lt;div id=&quot;problem-body&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;problem_description&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;N개의 수가 주어졌을 때, 이를&amp;nbsp;오름차순으로 정렬하는 프로그램을 작성하시오.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;입력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_input&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 수의 개수 N(1 &amp;le;&amp;nbsp;N &amp;le; 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는&amp;nbsp;10,000보다 작거나 같은 자연수이다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;출력&lt;/h2&gt;
&lt;/div&gt;
&lt;div id=&quot;problem_output&quot;&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;예제 입력 1&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-input-1&quot; class=&quot;angelscript&quot; style=&quot;background-color: #f7f7f9; color: #333333;&quot;&gt;&lt;code&gt;10
5
2
3
1
4
2
3
5
1
7
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h2 style=&quot;color: #585f69;&quot; data-ke-size=&quot;size26&quot;&gt;예제 출력 1&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;
&lt;/div&gt;
&lt;pre id=&quot;sample-output-1&quot; class=&quot;angelscript&quot; style=&quot;background-color: #f7f7f9; color: #333333;&quot;&gt;&lt;code&gt;1
1
2
2
3
3
4
5
5
7&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;내가 짠 코드&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제는 난이도가 브론즈1로 분류되어 있는데 생각보다는 까다로웠던 문제다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정렬 알고리즘을 하나 하나 구현해 보지는 않은 상태여서 문제를 보고 솔루션을 한 번에 떠올리지 못했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;몇 번의 메모리 초과를 겪은 후 &lt;u&gt;&lt;b&gt;계수 정렬&lt;/b&gt;&lt;/u&gt;로 해결이 가능하다는 사실을 깨달았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;계수 정렬이란 카운팅 정렬이라고도 불리는데&amp;nbsp;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;수의 범위가 작다면 굉장히 효율적으로 작동한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터의 개수가  , 데이터(양수) 중 최댓값이  일 때 최악의 경우에도 수행 시간  (  +  )를 보장한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;방법은 아주 간단하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 입력으로 들어올 범위만큼의 길이를 가지는 배열을 생성, 0으로 모든 값을 채움&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 입력이 들어오면 그 수를 배열의 index로 취급하여, 해당 index의 값을 +1 해준다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1687967611486&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import sys
input = sys.stdin.readline

#계수 정렬
n = int(input())

cnt = [0] * 10001  # 입력 숫자의 범위를 커버할 배열 생성

for _ in range(n):  # 숫자가 들어오면 해당 index의 값에 +1
  num = int(input())
  cnt[num ] += 1

for i in range(10001):
  for j in range(cnt[i]):
    print(i)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1230&quot; data-origin-height=&quot;55&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BHByM/btslLg865RC/CudO3MbkCk5Ufv026OKsv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BHByM/btslLg865RC/CudO3MbkCk5Ufv026OKsv0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BHByM/btslLg865RC/CudO3MbkCk5Ufv026OKsv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBHByM%2FbtslLg865RC%2FCudO3MbkCk5Ufv026OKsv0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1230&quot; height=&quot;55&quot; data-origin-width=&quot;1230&quot; data-origin-height=&quot;55&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/10989&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.acmicpc.net/problem/10989&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1687968475051&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;10989번: 수 정렬하기 3&quot; data-og-description=&quot;첫째 줄에 수의 개수 N(1 &amp;le;&amp;nbsp;N &amp;le; 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는&amp;nbsp;10,000보다 작거나 같은 자연수이다.&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/10989&quot; data-og-url=&quot;https://www.acmicpc.net/problem/10989&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cis8Mi/hyS9StmiV7/nUeswX3SJ8LnPFZeKraOrK/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/10989&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/10989&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cis8Mi/hyS9StmiV7/nUeswX3SJ8LnPFZeKraOrK/img.png?width=2834&amp;amp;height=1480&amp;amp;face=0_0_2834_1480');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;10989번: 수 정렬하기 3&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;첫째 줄에 수의 개수 N(1 &amp;le;&amp;nbsp;N &amp;le; 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는&amp;nbsp;10,000보다 작거나 같은 자연수이다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>DataStructure &amp;amp; Algorithm/문제풀이</category>
      <category>10989 python</category>
      <category>계수정렬</category>
      <category>백준 10989</category>
      <category>백준 python</category>
      <category>수정렬하기3</category>
      <category>카운팅정렬</category>
      <author>all_sound</author>
      <guid isPermaLink="true">https://allsound.tistory.com/202</guid>
      <comments>https://allsound.tistory.com/202#entry202comment</comments>
      <pubDate>Thu, 29 Jun 2023 01:08:03 +0900</pubDate>
    </item>
  </channel>
</rss>