<p class="MsoNormal">안녕하세요,</p> <p class="MsoNormal">이번 게시물은 linux환경하에서의 4-way GTX 1080 시스템을 테스트한 결과입니다. </p> <p class="MsoNormal">주로 딥러닝용 장비인만큼 CUDA프로그램을 돌리기 위한 OS, 드라이버, 툴 셋팅과 프로그램 실행시 온도, 속도, 안정성을 엉성하게나마 다룰려고 합니다.</p> <p class="MsoNormal">본론으로 들어갑니다.</p> <p class="MsoNormal"><br></p> <p class="MsoNormal">시스템 스펙 & 테스트 환경<span lang="en-us">:</span></p><p></p> <p class="MsoNormal"><span lang="en-us">CPU: Xeon E5-1650 3.5Ghz, 6 cores, 12 threads</span></p><p></p> <p class="MsoNormal"><span lang="en-us">RAM: 64GB DDR4</span></p><p></p> <p class="MsoNormal"><span lang="en-us">GPU: GTX 1080 @ 1733Mhz x 4EU</span></p><p></p> <p class="MsoNormal"><span lang="en-us">SSD: Intel pro 2500 480GB x 4EU (RAID 0 x 2)</span></p><p></p> <p class="MsoNormal"><span lang="en-us">OS: Ubuntu 14.04 LTS server 64bit</span></p> <p class="MsoNormal">CUDA: 8.0 RC version</p> <p class="MsoNormal">Driver: NVIDIA graphics driver for linux 64bit ver. 367.35</p> <p class="MsoNormal"></p> <div style="text-align:left;"><img src="http://thimg.todayhumor.co.kr/upfile/201608/14702911056abe80d072ad48dcaa0219fe0629dcb0__mn364901__w5312__h2988__f2838983__Ym201608.jpg" width="800" height="450" alt="14700489120a4158d8ee234912a690ba0400f5817a__mn364901__w5312__h2988__f2839063__Ym201608.jpg" class="chimg_photo" style="border:none;" filesize="2838983"></div><br><p></p> <p class="MsoNormal"><b><font size="3" style="background-color:#ffffff;">OS, DRIVER, TOOL 셋팅 </font></b></p> <p class="MsoNormal">먼저 <span lang="en-us">Ubuntu 14.04 LTS server 64bit</span>를 설치합니다<span lang="en-us">.</span></p><p></p> <p class="MsoNormal">설치후 재부팅하는 도중에 <span lang="en-us">“nouveau failed to create 0x000…, -22” “unknown hardware </span>어쩌구<span lang="en-us">” </span>하는 문구가 뜹니다<span lang="en-us">.</span></p><p></p> <p class="MsoNormal">역시 우분투 만악의 근원 <span lang="en-us">nouveau</span>이 말썽을 일으키는군요<span lang="en-us">. Nouveau</span>는 우분투에서 쓰는 오픈소스 그래픽 드라이버입니다<span lang="en-us">. </span>서드파티라 업데이트가 느려 최신 하드웨어는 인식 못합니다<span lang="en-us">;;;</span></p><p></p> <p class="MsoNormal">강제 재부팅후<span lang="en-us"> grub </span>화면에서 <span lang="en-us">“e”</span>를 누르면 부팅 옵션을 넣을수 있습니다<span lang="en-us">. </span>눌러주고 맨 마지막 두번째 줄 맨 마지막에 <span lang="en-us">nomodeset </span>이라는 문구를 넣어주고 부팅하면 정상적으로 로그인 됩니다<span lang="en-us">.</span></p><p></p> <p class="MsoNormal">재부팅하면 아까 <span lang="en-us">grub</span>에서의 설정이 리셋되기 때문에 <span lang="en-us">nouveau</span>를 영구적으로 정지시켜야 합니다<span lang="en-us">.</span></p><p></p> <p class="MsoNormal">일단 <span lang="en-us">/etc/default/grub </span>파일을 열고 <span lang="en-us">GRUB_CMDLINE_LINUX_DEFAULT </span>옵션에 <span lang="en-us">nomodeset</span>를 추가합니다<span lang="en-us">.</span></p><p></p> <p class="MsoNormal">다음 <span lang="en-us">/etc/modprobe.d/blacklist.conf </span>에 다음과 같은 라인을 추가합니다<span lang="en-us">.</span></p><p></p> <p class="MsoNormal"><span lang="en-us">blacklist nouveau</span></p><p></p> <p class="MsoNormal"><span lang="en-us">blacklist vga16fb</span></p><p></p> <p class="MsoNormal"><span lang="en-us">blacklist rivafb</span></p><p></p> <p class="MsoNormal"><span lang="en-us">blacklist nvidiafb</span></p><p></p> <p class="MsoNormal"><span lang="en-us">blacklist rivatv</span></p><p></p> <p class="MsoNormal"><span lang="en-us">blacklist lbm-nouveau</span></p><p></p> <p class="MsoNormal"><span lang="en-us">options nouveau modeset=0</span></p><p></p> <p class="MsoNormal"><span lang="en-us">alias nouveau off</span></p><p></p> <p class="MsoNormal"><span lang="en-us">alias lbm-nouveau off</span></p><p></p> <p class="MsoNormal"><span lang="en-us"> </span></p> <p class="MsoNormal">재부팅하면 <span lang="en-us">nouveau</span>를 다시는 볼수 없습니다<span lang="en-us">^^</span></p><p></p> <p class="MsoNormal"><span lang="en-us"> </span></p> <p class="MsoNormal">이제 <span lang="en-us">nvidia </span>사이트에 가서 최선 그래픽 드라이버하고 <span lang="en-us">cuda 8.0 RC</span>버전을 다운받아 설치하면 됩니다<span lang="en-us">. (</span>주의할 점은 두 개를 제각기 설치하고 <span lang="en-us">cuda</span>에 딸린 드라이버는 건너뛰는게 정신건강에 유리합니다<span lang="en-us">)</span></p><p></p> <p class="MsoNormal">단 설치하기전 <span lang="en-us">gcc</span>설치하고 <span lang="en-us">sudo apt-get install libglu1-mesa libxi-dev libxmu-dev libglu1-mesa-dev </span>명령어로 필요한 의존 라이브러리 설치합니다<span lang="en-us">. </span>설치해도 <span lang="en-us">libGLU.so </span>가 없다고 뜨는데 <span lang="en-us">/usr/lib/x86_64-linux-gnu </span>경로를 환경변수 <span lang="en-us">LD_LIBRARY_PATH</span>에 추가하면 됩니다<span lang="en-us">. </span></p><p></p> <p class="MsoNormal">다 끝났으면<span lang="en-us"> cuda sample </span>폴더에 들어가 <span lang="en-us">make</span>합니다<span lang="en-us">. </span><span lang="en-us">bin</span>에 들어가 <span lang="en-us">deviceQuery</span>를 실행해보면 아래와 같이 뜨면 일단 <span lang="en-us">cuda</span>는 설치성공입니다<span lang="en-us">.</span></p><p></p> <p class="MsoNormal"><span lang="en-us"></span></p> <div style="text-align:left;"><img src="http://thimg.todayhumor.co.kr/upfile/201608/147029124100951e3953e54f09a08de88c48fec4dd__mn364901__w1349__h687__f210832__Ym201608.png" width="800" height="407" alt="devicequery.PNG" class="chimg_photo" style="border:none;" filesize="210832"></div><br><p></p> <p class="MsoNormal"><span lang="en-us">Peer access</span>는 <span lang="en-us">GPU</span>간 통신으로 <span lang="en-us">CPU</span>를 거치지 않고 <span lang="en-us">PCI-E bus</span>를 통해 직접 통신하는 방식을 말합니다<span lang="en-us">. </span>일단 스크린샷에서는 잘 되는것으로 나옵니다<span lang="en-us">. (</span>나중에 멀티 <span lang="en-us">GPU</span>관련 작업에 유리합니다<span lang="en-us">)</span></p><p></p> <p class="MsoNormal">이대로 진행해도 괜찮지만 저는 호불호가 좀 갈리는 방식으로 <span lang="en-us">GPU</span>를 셋팅해둡니다<span lang="en-us">. /etc/rc.local</span>에 다음과 같은 라인들을 추가하고 재부팅합니다<span lang="en-us">. </span></p><p></p> <p class="MsoNormal"><span lang="en-us">sudo nvidia-smi -pm 1</span></p><p></p> <p class="MsoNormal"><span lang="en-us">sudo nvidia-smi -i 0 -ac 10010,1733</span></p><p></p> <p class="MsoNormal"><span lang="en-us">sudo nvidia-smi -i 1 -ac 10010,1733</span></p><p></p> <p class="MsoNormal"><span lang="en-us">sudo nvidia-smi -i 2 -ac 10010,1733</span></p><p></p> <p class="MsoNormal"><span lang="en-us">sudo nvidia-smi -i 3 -ac 10010,1733</span></p><p></p> <p class="MsoNormal"><span lang="en-us">exit 0</span></p><p></p> <p class="MsoNormal">첫 라인의 의미는 <span lang="en-us">persistence mode </span>를 부팅할때마다 켜는 명령입니다<span lang="en-us">. Persistence mode </span>는 <span lang="en-us">GPU</span>를 사용하지 않아도 <span lang="en-us">nvidia driver</span>를 항상 미리 로딩해두는 모드로 빠른 프로그램 실행에 유리합니다<span lang="en-us">. </span></p><p></p> <p class="MsoNormal">그 아래 라인들의 의미는 <span lang="en-us">GPU</span>를 시종일관 강제로 최고 클럭에서 작동하게 해줍니다<span lang="en-us">. (</span>그래서 호불호죠<span lang="en-us">) 10010</span>은 <span lang="en-us">VRAM </span>클럭이고 <span lang="en-us">1733</span>는<span lang="en-us"> GPU boost </span>클럭입니다<span lang="en-us">. </span>제품별로<span lang="en-us">, </span>레퍼<span lang="en-us">/</span>비레퍼에 따라 다르기에 본인이 구매한 제품에 맞게 해줘야 합니다<span lang="en-us">. Tesla</span>제품의 경우에는 <span lang="en-us">sudo nvidia-smi -i 0 --ecc-config=0 </span>옵션도 줘서 딥러닝에 쓸데없는 <span lang="en-us">ECC</span>를 꺼야 하지만 <span lang="en-us">1080</span>은 해당사항이 아니므로 안해도 됩니다<span lang="en-us">. </span><span lang="en-us" style="font-size:9pt;line-height:1.5;">0 1 2 3 </span><span style="font-size:9pt;line-height:1.5;">은</span><span lang="en-us" style="font-size:9pt;line-height:1.5;"> GPU ID</span><span style="font-size:9pt;line-height:1.5;">로 시스템에 </span><span lang="en-us" style="font-size:9pt;line-height:1.5;">GPU</span><span style="font-size:9pt;line-height:1.5;">가 몇 개 있으면 다 설정해줘야 합니다</span><span lang="en-us" style="font-size:9pt;line-height:1.5;">.</span></p> <p class="MsoNormal">이제 <span lang="en-us">theano, torch, tensorflow, cntk, caffe </span>등 딥러닝 툴 중에서 원하시는거로 설치하시면 됩니다<span lang="en-us">. </span>일단 <span lang="en-us">theano</span>로 테스트 해봅니다<span lang="en-us">. Openblas</span>를 설치하고 <span lang="en-us">openblas</span>기반으로 <span lang="en-us">numpy</span>를 컴파일한다음 <span lang="en-us">cudnn 5.0</span>을 설치하고 <span lang="en-us">theano</span>를 설치하면 됩니다<span lang="en-us">. </span>아나콘다라는 통합툴이 있지만 귀찮아서 안 씁니다<span lang="en-us">;;; numpy </span>설치는 여기를 참고 <span lang="en-us"><a target="_blank" href="http://stackoverflow.com/questions/11443302/compiling-numpy-with-openblas-integration" target="_blank">http://stackoverflow.com/questions/11443302/compiling-numpy-with-openblas-integration</a></span></p><p></p> <p class="MsoNormal"><br></p> <p class="MsoNormal"><b><font size="3">CUDA 프로그램 실행, 안정성, 온도, 속도 테스트</font></b></p> <p class="MsoNormal">이제 실제 프로그램 테스입니다<span lang="en-us">.</span></p><p></p> <p class="MsoNormal">일단 실행전 <span lang="en-us">GPU </span>정보를 확인합니다<span lang="en-us">.</span></p><p></p> <p class="MsoNormal"><span lang="en-us"></span></p> <div style="text-align:left;"><img src="http://thimg.todayhumor.co.kr/upfile/201608/14702912805bf22cc0e53d4b0780f2935b64805e51__mn364901__w799__h491__f109674__Ym201608.png" width="799" height="491" alt="GPU_info.PNG" style="border:none;" filesize="109674"></div><br><p></p> <p class="MsoNormal">온도가 준수한 수준이고 <span lang="en-us">GPU</span>점유율이 <span lang="en-us">0%</span>입니다<span lang="en-us">. Persistence mode </span>는 <span lang="en-us">on</span>으로 되어있고 <span lang="en-us">GPU</span>상태는 <span lang="en-us">idle</span>을 의미하는 <span lang="en-us">P8 </span>모드에 있습니다<span lang="en-us">.</span></p><p></p> <p class="MsoNormal">딥러닝 트레이닝 프로그램을 <span lang="en-us">4</span>개 <span lang="en-us">GPU</span>에 따로 돌립니다<span lang="en-us">. </span></p><p></p> <p class="MsoNormal"><b><font size="3">대략 <span lang="en-us">6</span>시간 경과후 </font></b><span lang="en-us"><b><font size="3">… ;;;;</font></b></span></p><p></p> <p class="MsoNormal"><span lang="en-us"></span></p> <div style="text-align:left;"><img src="http://thimg.todayhumor.co.kr/upfile/201608/14702912928c83ddc0ada64365a214a1ad145a2981__mn364901__w801__h575__f119195__Ym201608.png" width="800" height="574" alt="temp.PNG" class="chimg_photo" style="border:none;" filesize="119195"></div><br><p></p> <p class="MsoNormal">맨 위의 카드의 온도가 <span lang="en-us">92</span>도에 항상 고정되어 있습니다<span lang="en-us">;;; (1080 </span>공홈에서 표기한 최고온도입니다<span lang="en-us">;;;;) nvidia-smi</span>로 확인한 결과 <span lang="en-us">96</span>도에서 속도저하<span lang="en-us">, 99</span>도에서 <span lang="en-us">GPU </span>셧다운이 일어난다고 합니다<span lang="en-us">. </span></p><p></p> <p class="MsoNormal">엄청 높은 온도이지만 6시간동안 이로 인해 다운되거나 속도저하는 일어나지 않았습니다<span lang="en-us">. </span>서버룸에 에어컨을 추가해달라고 해야겠네요<span lang="en-us">. </span></p><p></p> <p class="MsoNormal">참고로 처리속도는 동일 프로그램에서 대략 <span lang="en-us">Tesla K40 (4.4 ~ 5.0 TFLOPS, GTX 980 </span>상당<span lang="en-us">) </span>의 두배정도 나옵니다<span lang="en-us">. </span>단점이라면 램이 <span lang="en-us">8GB</span>밖에 안됩니다<span lang="en-us">. Float </span>타입을 <span lang="en-us">16bit</span>로 하면 램 두배의 효과가 나지만 지원하는 툴이 많지 않습니다<span lang="en-us">.</span></p><p></p> <p class="MsoNormal">이상입니다.</p> <p class="MsoNormal">감사합니다.</p> <p class="MsoNormal"><span lang="en-us"> </span></p> <p class="MsoNormal"><span lang="en-us"> </span></p> <p class="MsoNormal"><span lang="en-us"> </span></p> <p class="MsoNormal"><span lang="en-us"> </span></p> <p class="MsoNormal"><span lang="en-us"> </span></p>
이 게시물을 추천한 분들의 목록입니다.
[1] 2016/08/04 15:33:30 174.25.***.111 근군
113207[2] 2016/08/04 15:47:04 203.253.***.242 가공쟁이
23273[3] 2016/08/04 16:18:14 203.109.***.142 거덜스
84748[4] 2016/08/04 16:23:48 116.36.***.206 아키호시노
122613[5] 2016/08/04 16:41:48 143.215.***.252 까라
411381[6] 2016/08/04 18:07:53 61.42.***.42 사랑여우별
621554[7] 2016/08/04 18:30:59 175.197.***.7 진지진지해
69201[8] 2016/08/04 22:43:27 110.14.***.236 Elminster
517255[9] 2016/08/05 03:12:52 110.70.***.105 Iodien
441854[10] 2016/08/05 12:48:39 182.211.***.111 cobain
273427
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.