개인 데스크탑에서 cuda나 cudnn 등 nvidia 가속을 이용하는 환경을 구축하는 게 간단하지는 않습니다. 저의 경우 파이선 가성화를 위해서 anaconda를 주로 사용하는데, conda 업그레이드시 함께 포함된 패키지가 업데이트되면서 호환성이 깨지는 경우가 종종 발생하였습니다.
그래서, 차라리 누군가 잘 만들어놓은 도커를 가져다가 조금만 변경해서 사용하면 좋겠다는 생각에서 저의 개인적인 경험을 바탕으로 소개하도록 하겠습니다.
deepo는 딥러닝/머신러닝 개발 환경을 쉽게 구축할 수 있는 all-in-one 도커입니다.
자세한 것은 이 링크를 눌러 deepo 깃헙 페이지를 방문하면 알 수 있습니다.
간략하게 소개해보면,
등 딥러닝/머신러닝 개발에 필요한 프레임워크와 라이브러리 등을 거의다 갖추고 있습니다.
이거 하나면 왠만한 개발환경은 다 커버할것 같습니다.
아래가 대략의 설치 환경입니다.
아래 명령어를 실행하면 최신 deepo 도커 이미지를 설치할 수 있습니다.
$ docker pull ufoym/deepo
설치가 잘 되었는지 확인해봅니다.
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
...
ufoym/deepo all-py36-cu101 5d5a5c342dbf 2 weeks ago 13.3GB
ufoym/deepo latest 5d5a5c342dbf 2 weeks ago 13.3GB
...
저는 2개의 별도 버전을 설치했는데, 동일한 것으로 보이네요.
이것으로 설치완료입니다. 이제부터 사용하기만 하면 됩니다. 다만, 도커에 익숙하지 않은 분들을 위해서 몇 가지 더 설명해봅니다.
아래는 deepo 도커를 실행하고 bash로 진입하는 명령어입니다.
$ docker run -p 8888:8888 --gpus all -it -v {host-dir}:{container-dir} ufoym/deepo bash
도커 옵션 설명:
저는 Jupyter Notebook 보다는 Jupyter Lab을 선호하는데 Deepo에는 안타깝게도 Jupyter Notebook만 설치되어 있습니다. Jupyter Lab을 설치하겠습니다. 컨테이너 내부에서 설치한다고 가정합니다.
# pip install jupyterlab
또는 컨테이너 외부에서도 설치할 수 있습니다.
# docker exec -it {container-name} pip install jupyterlab
컨테이너 내부에서 실행할 때는 아래와 같이 실행하면 됩니다.
# nohup jupyter lab --ip 0.0.0.0 --port 8888 --allow-root --no-browser &
포트는 아까 실행할때 지정한 8888번 포트로 띄웁니다. 그러면, 이제 호스트 OS의 8888번 포트를 열어두기만 하면 외부에서도 접근이 가능해집니다. 그리고 컨테이너 내부에서 root로 실행시키고 있기 때문에, --allow-root 옵션이 필요하고 브라우저가 없기 때문에 --no-browser 옵션도 같이 붙여 실행합니다.
필요에 따라서 Jupyter Lab 등 별도의 라이브러리나 프레임워크를 설치하는 경우에는 도커를 실행할 때마다 리셋되기 때문에 재설치의 번거로움이 있습니다. 이런 경우 변경사항을 저장해서 내가 원하는 최적의 환경을 구축할 수 있습니다.
$ docker commit {container-id} {new-image-name}
위 명령어를 실행하면 현재 실행중인 컨테이너의 상태를 저장하여 새로운 도커 이미지로 생성합니다.
$ docker commit f7e19aaeef3f deepo_jupyterlab
을 실행하고 이미지를 확인해보겠습니다.
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
deepo_jupyterlab latest 19ea1eeb6d17 2 hours ago 13.3GB
ufoym/deepo all-py36-cu101 5d5a5c342dbf 2 weeks ago 13.3GB
ufoym/deepo latest 5d5a5c342dbf 2 weeks ago 13.3GB
위와 같이 새롭게 생성한 도커 이미지를 실행하면 jupyter lab이 설치된 나만의 이미지를 실행할 수 있게 됩니다.
아니, 친숙한 얼굴이네. 좋은 글 잘 봤어. 많은 참고가 되었네. :)