Deep Learning Custom Docker 만들기

·2023년 12월 3일
0

도커가 왜 필요한가요?

간단하게 이야기를 하자면…

당신이 GitHub 에서 아주 기똥찬(?) 딥러닝 모델을 발견했다고 가정합시다.

당신은 이걸 당장 돌려보고 싶다는 충동에 git clone 을 남발하며 받아왔는데, 아뿔싸. 모델이 요구하는 텐서플로 및 파이토치 버전이 로컬에 설치되어 있던 버전과 맞지 않아서 제대로 돌릴 수가 없다고 뜨네요!

그럼, 모델이 요구하는 패키지들의 버전을 매번 맞추려고 로컬 컴퓨터에 깔린 딥러닝 패키지를 밀어버리고 새로 깔아야 할까요? 절대 아니죠. 그런 생고생을 매번 할 수는 없기 때문에, 내 로컬 컴퓨터와는 독립된, 아무것도 설치 되지 않은 새로운 환경을 만들고 그곳에 모델이 요구하는 패키지들을 까는 것이 쉬울 것입니다.

conda 를 이용해 가상 환경을 생성하고, 거기에 필요한 패키지를 설치하는 방법도 있지만, docker 체계가 conda 보다 컴퓨터 용량을 덜 잡아먹고 더 빨리 돈다고 합니다.

도커의 기본 개념

  • 도커 이미지: 내 컴퓨터와는 독립된 어떤 환경을 의미합니다. condavenv 와 유사한 개념이라고 생각해주면 됩니다.
  • 도커 컨테이너: 위에서 원하는 도커 이미지를 찾았을 때, 그 이미지를 임시로 복사해서 가져오는 것입니다.

딥러닝용 도커에서 필요한 요소들

저의 경우 딥러닝 도커 구축을 다음과 같이 하는 편입니다.

  1. Docker Hub 에서 베이스가 되는 도커 이미지 가져오기 (Docker pull)
  2. 가져온 도커 이미지를 도커 컨테이너로 복사하기 (Docker run)
  3. 도커 컨테이너 내 입맛대로 커스텀 하기
  4. 커스텀한 도커 컨테이너를 새로운 도커 이미지로 만들기 (Docker Commit)

도커 환경 구축예제

  1. Pycharm 프로젝트 만들기
    Pycharm 에서 Project 만듭니다. 대충 만듭니다.

    [File] - [New Projects] 에 들어가서 일단 위 사진 처럼 기본적인 프로젝트 포맷을 만들어준다.
    도커가 없다고 가정하고 시작할 것이니 Base interpreter 는 그냥 기본 (venv) 으로 설정하고 시작하자.
    그러고 나서,

여기서 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 옵션 달려~~

근데 이렇게 하고 끝내면 안되고 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, —volume

-v <호스트 폴더 경로>:<도커 폴더 경로>

이렇게 적어주면 된다. 중요한 건 이렇게 써주면 해당 도커 경로에는 호스트의 파일을 cp 명령어로 복사해서 붙여준다거나 그럴 필요가 전혀 없다는 점이다. 이렇게 해주면 된다.

—shm-size

--shm-size 32gb

여기는 도커가 돌아가는 메모리 같은건데 부족하면 안돌아 간다. 자꾸 무슨 아웃오브 메모리가 뜨면서 오류가 나고 그러므로 꼭 설정을 해주도록 하자.

—ipc

--ipc host

pytorch 에서 num_workers 가 클 때에도 메모리 오류가 뜨는데 그 때 해결하기 위한 명령어 이다. num_workers = 0 으로 두고 돌리면 딥러닝 train 할 때 오오지게 느려진다는데 그 문제를 해결하기 위한? 방법이라고 볼 수 있다.

—it

-it

내가 가장 사랑하는 옵션…. 도커 돌릴 때 그냥 꺼져버리면 얼마나 속상한지 아냐며… 도커 종료시까지 안꺼지는 효자 옵션이다.

—rm

--rm

컨테이너 다 쓰고 나면 알아서 삭제되는 효자 명령어2 라고 할 수 있다.

profile
._.

0개의 댓글