이번주는 계속 환경설정과의 싸움이다. 도커를 이용하는 주목적이 환경설정을 간편하게 하는것인데, 오히려 도커에 대한 이해도가 낮다보니, 결국 도긴개긴, 시간을 엄청 소비하고 있다... 그래도 확실히 삽질하면서 배우는게 진짜 남는거니까...😥
Ubuntu container에 centernet을 돌리는게 cuda에서 잘 안되서, nvidia-docker라는 엔비디아에서 제공하는 도커 toolkit을 이용하여 GPU를 쓰는 방법으로 다시 하고있다..
nvidia-docker를 쓰면 gpu를 나눠쓰는것도 간단하게 할 수있고, 엄청 좋다고 하는데 난 솔직히 vision쪽으로 딥러닝을 해본적이 없어서 gpu를 써서 트레이닝 해본적이 없어서 CUDA나 cuDNN도 좀 생소하다..ㅎㅎ😅
일단 nvidia-toolkit installation 방법은 정말 간단한다. 우선 호스트에 nvidia driver와 도커 19.03 이상이 깔려 있어야한다.
그런 다음 host OS에 맞게 설치를 커맨드를 주어서 하면된다. (깃헙 참조)
지금 쓰고 있는 서버에 총 7개의 GPU가 있는 것을 확인 할 수있다. 여기서 nvidia-docker를 쓰면 쓰고 싶은 GPU갯수를 선택해서 컨테이너를 실행 할 수 있다.
sudo docker run --gpus all nvidia/cuda:[version] /bin/bash
or 나눠 쓰고 싶다면
sudo docker run --gpus '"device=1,2"' nvidia/cuda:[version] /bin/bash
이런 식으로 돌릴 수있다.
2개의 GPU가 할당된것을 확인 할 수있다
이건 꽤 많이 필요한 커맨드이니까 기록해놓고 두고두고 써야겠다.
sudo docker cp [hostfile] [container-name]:[directory]
반대로도 가능 Container에서 Host로
sudo docker cp [container-name]:[file-directory] [host-directory]
(추가) 이것보다 더 좋은 방법을 찾아냄!!
docker run
할때 -v option을 써서 host에 있는 파일과 디렉토리를 mount해서 바로 쓰는 방법이다.
점점 docker run이 길어지지만 그래도 더 편하게 쓸 수 있으니까!
sudo docker run -it --gpus '"device=1,2"' -v [hostdir]:[containerdir] --ipc=host --name=whatever [image] [command]