Tool - nvidia-docker

Posted by Young Han Lee on April 17, 2017 · 3 mins read

Intro

docker의 장점이야 다 알테고 구지 여기서 설명하지 않겠다.

nvidia-docker의 장점이라고 하면, 기존에는 docker에서 gpu를 잡으려면, hw 연결해줘야 하고, 여기서 잡고 저기서 잡고 driver를 두군데 설치하고 맞춰야 하고 쿵짝쿵짝 엄청 복잡하게 작업을 했어야 했다.

그런데 nvidia에서 docker에 조금 바꿔서 nvidia-docker를 내놨고, 조금 더 간단하게 docker에서 gpu를 잡을 수 있게끔 되었다. 기존에도 잘 썼었는데, 음. 문제가 발생했다.

driver를 업그레이드 하다.

사실 개발 머신이 여러대면 참 좋겠으나, 한대로 버티는 인생이다보니, driver를 업그레이드 하기 사실 겁난다.

기존에 돌던 부분이 있는데다가, 실험을 한창 돌리고 있는데 뭔가 뻑나면 더 이상 돌리기 어려워지니 말이다.

그래서 가능하면 업그레이드는 자제하면서 나중에 머신 생기면 한번에 해야지… 등등 이런 저런 좋은 핑계를 쌓아가며 잘 지내고 있었다.

그러다가 리더스 시스템즈에서 DGX-1에 대한 설명을 들으면서 driver를 한번 올려야 겠다는 생각이 들었다.

사실 pascal을 지원하는 것도 그렇고, cuda8을 지원하는 것도 그렇고 점점 이 필요성들이 높아지는 상황에서 titan x (pascal)을 얻었다. 기존에는 geforce titan x만 쓰고 있어서 올릴 필요성을 못느꼈는데, 새걸 꼈는데도 돌지 않으니 열이 받아서 올려야겠다 싶었다.

아무튼, 올렸다.

역시나 nvidia-docker 안에서 gpu 안잡혀

아 진짜 짜증이 짜증이 이렇게 날 수 없다. 금요일 저녁에 내가 무슨 부귀 영화를 누리자고 이걸 건드려서!!! 실험 정도야 30% 느리게 돌리면 되지. 남는게 시간인데….(까진 아니지만..)

암튼 driver랑 library랑 mismatch가 난덴다. docker 안에 깔아보고 cuda 깔아보고 생 쑈를 했네,

구글링을 해도 내가 nvidia-docker를 처음부터 차근차근 봐온 것이 아니라, 그냥 필요할 때 띡 보고 docker 쓰듯이 썼더니 중간 중간 구멍이 생겨서 해결하는데 오랜 시간이 걸렸다. 내가 불금에 새벽 2시까지 이걸 해결하려고 ㅠ.ㅠ

nvidia-driver와 volume을 주목하라.

이게 쩝, 사실 driver를 설치하면 제깍제깍 nvidia-docker에서 잘 맞춰서 해주면 얼마나 좋아. 그런거 없다. -_-;;

nvidia-docker volume create -d nvidia-driver nvidia_driver_375.39

이런식으로 해주면 volume이 생성된다. 그리고 이 볼륨을 image를 run할 때 -v로 연결해주어야 한다.

그래야만 정상적으로 원래 것에 맞는 driver 및 실행파일들이 docker 내부로 링크 되면서 정상동작 하게 된다.

여기가 끝이 아니야.

좋았어.

고생했어, 이제 이전처럼 프로세스 다 띄어놔야지.

혼자 쓰는 서버도 아니다보니, 이것저것 할 것들이 많다.

암튼..@.@

…에? 기존 geforce titan X에서는 잘 도는데 titan X (pascal)에서는 에러가 뜬다. 드라이버 버전이 문제가 있단다. -_-;;;

theano를 쓰다가 문제가 생겨서 다시 봤더니,

아니나 다를까, 375.39이게 blacklist란다. -_- 하아..

다시 내려서 373.xx 버전으로 위의 과정을 다시 거쳤다.

이제 좀 정상적으로 돈다. 하아..

epilogue

HW 셋팅하는 것은 항상 필요한 일이긴 한데, 아, 이과정이 너무 귀찮다. 떱. 게다가 왠만큼 docker로 내놓더라도 driver에 따라 이렇게 되고 나니 정말 폭발할 뻔했다. @.@ 그래도 이번 기회에 그냥 막 쓰고 있던 nvidia-docker에 대해서 조금 더 봐서 좋긴한데 (구지 볼 필요가 있었나 싶긴하다) 그래도 여기에 소비한 에너지가 아깝긴 하다. 내 주말과 함께 말이다. ㅠ.ㅠ