간단하게 이야기를 하자면…
당신이 GitHub 에서 아주 기똥찬(?) 딥러닝 모델을 발견했다고 가정합시다.
당신은 이걸 당장 돌려보고 싶다는 충동에 git clone
을 남발하며 받아왔는데, 아뿔싸. 모델이 요구하는 텐서플로 및 파이토치 버전이 로컬에 설치되어 있던 버전과 맞지 않아서 제대로 돌릴 수가 없다고 뜨네요!
그럼, 모델이 요구하는 패키지들의 버전을 매번 맞추려고 로컬 컴퓨터에 깔린 딥러닝 패키지를 밀어버리고 새로 깔아야 할까요? 절대 아니죠. 그런 생고생을 매번 할 수는 없기 때문에, 내 로컬 컴퓨터와는 독립된, 아무것도 설치 되지 않은 새로운 환경을 만들고 그곳에 모델이 요구하는 패키지들을 까는 것이 쉬울 것입니다.
conda
를 이용해 가상 환경을 생성하고, 거기에 필요한 패키지를 설치하는 방법도 있지만, docker
체계가 conda
보다 컴퓨터 용량을 덜 잡아먹고 더 빨리 돈다고 합니다.
conda
의 venv
와 유사한 개념이라고 생각해주면 됩니다.저의 경우 딥러닝 도커 구축을 다음과 같이 하는 편입니다.
Project
만듭니다. 대충 만듭니다.여기서 On docker…
를 선택해준다
Pull 옵션을 선택해준담에 Image tag 에 아까 만든 도커 이름을 써준다. Run option 에는 뭐 그렇게 많이 아직은 안써도 되지만 --rm -it --gpus all --shm-size=32gb
정도만 일단은 써주자.
이 후 [Next] 를 누르면 인터프리터 뭐할거냐고 뜰텐데, virtualvenv
꺼 말고 local interpreter
로 /usr/bin/python3
선택해주면 된다. (근데 이건 내가 가져온 도커가 사용하는 파이썬 버전이 뭔지 체크해봐야 한다. 도커에 따라서 /usr/bin/python3
이 아닐 수도 있음.)
근데 이렇게 하고 끝내면 안되고 run option 을 꼭 내 입맛에 맞게 신나고 깔쌈하게 커스터마이징을 해주어야 한다
docker run -it --gpus all\
--shm-size 32gb --entrypoint \
-v /home/se0yeon00/Project:/ws/project \
-v /media/data:/ws/data \
--rm
--ipc host
나 같은 경우는 호스트의 데이터셋을 도커로 마운트 해와야 하는 부분이 있어서, -v option 을 추가적으로 넣어줬다. -v <host 마운트 경로>:<도커 마운트 경로>
이렇게 사용하면 된다.
위의 예제로 본다면, -v home/se0yeon00/Project:/ws/project
를 하면 호스트 폴더인 /home/se0yeon00/Project
가 도커 상의 폴더인/ws/project
로 마운트 된다.
-v <호스트 폴더 경로>:<도커 폴더 경로>
이렇게 적어주면 된다. 중요한 건 이렇게 써주면 해당 도커 경로에는 호스트의 파일을 cp 명령어로 복사해서 붙여준다거나 그럴 필요가 전혀 없다는 점이다. 이렇게 해주면 된다.
--shm-size 32gb
여기는 도커가 돌아가는 메모리 같은건데 부족하면 안돌아 간다. 자꾸 무슨 아웃오브 메모리가 뜨면서 오류가 나고 그러므로 꼭 설정을 해주도록 하자.
--ipc host
pytorch 에서 num_workers 가 클 때에도 메모리 오류가 뜨는데 그 때 해결하기 위한 명령어 이다. num_workers = 0 으로 두고 돌리면 딥러닝 train 할 때 오오지게 느려진다는데 그 문제를 해결하기 위한? 방법이라고 볼 수 있다.
-it
내가 가장 사랑하는 옵션…. 도커 돌릴 때 그냥 꺼져버리면 얼마나 속상한지 아냐며… 도커 종료시까지 안꺼지는 효자 옵션이다.
--rm
컨테이너 다 쓰고 나면 알아서 삭제되는 효자 명령어2 라고 할 수 있다.