Docker

[Docker] Docker with python

언킴 2022. 3. 3. 11:02
반응형

머신러닝이나 딥러닝을 돌릴때 프레임워크 혹은 패키지의 버전마다 호환되는 파이썬 버전이 다르다. 그렇다면 매번 파이썬을 새로 설치하고 새로 다시 환경을 구축해야될 것이다. 이건 여간 번거로운 일이 아니다. 그렇기 때문에 우리는 도커를 사용해 각 이미지 혹은 각 컨테이너마다 새로운 환경을 구축해 사용할 수 있다. 

 

복잡한 환경, 협업 환경에서는 도커를 사용하는 것이 유용하다. Dockerfile에 내가 사용하는 환경의 정보를 담고 Dockerfile을 공유함으로써 같은 환경에서 파이썬을 실행시킬 수 있기 때문에 오류 없이 제대로 작동할 수 있기 때문이다. 그렇다면 도커 허브에서 파이썬을 pull한 후 도커를 사용해보자. 도커 허브에서 pull하고, run 하는 과정은 이전 글에서 다루었기 때문에 설명은 생략한다. 

 

$ docker pull python:3.8.3-slim

$ docker run -it python:3.8.3-slim

 

여기서 한가지 짚고 넘어가야될 부분은 일반적인 파이썬 3.8.3 버전이 아니라 3.8.3-slim이라는 것을 다운 받았다. 도커 허브에서 이미지를 가지고 올때에는 가장 가벼운(?) 모델을 가지고 온 후 추가로 레이어(Layer)를 추가해 컨테이너를 생성하는 방법으로 진행하는 것이 좋다. 그렇기 때문에 가장 기초가 되는 모델인 slim을 가지고 오는 것이다.

 

추가로 컨테이너 내부에서 사용하기 위해 특별히 제작된 알파인 리눅스 프로젝트를 기반으로한 Alpine 버전도 존재한다. Alpine 이미지의 경우 이미지를 최대한 작게 만들기 위해 사용되는 녀석이다. 윈도우 서버를 기반으로 파이썬 이미지를 생성하고 싶다면 windowservercore를 사용하면 된다. 

 

딥러닝을 돌릴때에는 일반적으로 cpu보단 gpu를 사용해서 모델을 학습시킨다. 이 경우 cuda가 필요한데, 우리는 pytorch 1.7.1 버전에 cuda11.0 버전을 다운받아 사용해보자. 여기로 들어가게되면 아래와 같은 페이지가 나오며, 맨 위에 있는 버전을 다운받자. 

 

 

$ docker pull pytorch/pytorch:1.7.1-cuda11.0-cudnn8-runtime

 

설치가 완료되었으면 이제 도커를 실행시켜보자. 

$ docker run -it pytorch/pytorch:1.7.1-cuda11.0-cudnn8-runtime

root@324a8439e296:/workspace#

324a8439e296은 컨테이너의 아이디를 의미한다. 해당 프로그램은 리눅스 환경 내에 pytorch를 설치한 것이기 때문에 리눅스 명령어를 사용할 수 있다. 

 

$ pwd
/workspace

$ python
Python 3.8.5 (default, Sep 2020, 07:30:14)

$ import torch 

$ torch.__version__
'1.7.1'

파이썬의 경우 3.8.5 버전이 설치되었고, pytorch는 우리가 설치한대로 1.7.1 버전이 설치된 것을 확인할 수 있다. 그렇다면 우리가 도커에서 gpu를 사용하기 위해서는 NVIDIA 그래픽 카드 드라이버가 설치되어 있어야하고, 도커가 설치되어 있어야 한다. 도커-ce 19.03 이후 버전부터 NVIDIA Runtime을 지원하기 때문에 도커 버전을 확인하자. 만약 이전 버전의 도커를 사용하고 있다면 도커에 NVIDIA Runtime(Nvidia-Docker)을 따로 설치해주어야 한다. 

 

 

gpu를 사용하고 싶을 땐 아래와 같은 코드를 입력해 gpu를 할당해서 컨테이너를 생성하면 된다. 

# Docker-ce 19.03 or later
$ docker run -it --gpus all pytorch/pytorch:1.7.1-cuda11.0-cudnn8-runtime


# If the nvidia-docker2 package is installed
# for NVIDIA Docker version 2.0 or later.
$ nvidia-docker run -it pytorch/pytorch:1.7.1-cuda11.0-cudnn8-runtime

$ docker run -it --runtime=nvidia pytorch/pytorch:1.7.1-cuda11.0-cudnn8-runtime


# If the nvidia-docker package is installed 
# for NVIDIA Docker version 1.x.

$ nvidia-docker run -it pytorch/pytorch:1.7.1-cuda11.0-cudnn8-runtime

본인의 Docker-ce 의 버전이 19.03 이후 버전이라고 하면 첫번째 코드를 입력해 실행시키면 된다. 다른 경우는 아래 코드를 참고해 nvidia-docker를 실행시킬 수 있다.