-
[Docker for ML #1] 설치와 기본 명령어개발 환경/Docker 2020. 8. 28. 15:32반응형
Docker는 현재 다양한 개발 분야에서 사용되고 있다. 딥러닝 개발자는 CUDA나 TensorFlow, PyTorch 등 버전이 충돌할 때 docker를 찾게 된다.
1. 설치
sudo apt install docker.io
2. sudo 권한 부여
Docker는 기본적으로 sudo 권한을 필요로 한다. 매번 sudo를 붙여주는 것은 귀찮으니 현재 user에게 docker를 sudo 권한으로 사용할 수 있게 해주자.
sudo usermod -aG docker $USER
명령어를 쳤으면 터미널을 껐다가 다시 키자.
3. 설치 확인
docker --version
output:
Docker version 19.03.8, build afacb8b7f0
4. run
테스트로 tensorflow 이미지를 받아서 run해보자.
docker run -it tensorflow/tensorflow bash docker run -it <이미지 이름> <명령>
위 명령어는 tensorflow 이미지를 받아서 bash를 실행한다. 이미지가 현재 로컬에 없으므로 다운받기 시작한다. 터미널을 사용하기 위해서는 -it 명령어를 사용해야 한다.
output:
이렇게 실행이 되었으면 container가 만들어지고 올라간다.
5. pip list
pip list
명령어를 치면 tensorflow 2.3이 깔려있는 것을 확인할 수 있다.
6. GPU?
딥러닝하면 GPU가 빠지지 않는다. 로컬에 nvidia driver가 깔려있다고 가정한다. 참고로 nvidia driver가 CUDA 10.0을 지원하지 않는 버전을 사용중이라면 tensorflow 1.13 이상 버전은 동작하지 않을 것이다. 업데이트를 하자.
nvidia-smi
output:
bash: nvidia-smi: command not found
드라이버가 없다. docker container에서 GPU를 사용하기 위해서는 nvidia-container-toolkit이 필요하다.
7. 컨테이너 내리고 없애기
우선 지금 실행한 컨테이너를 내리고 없애자.
exit
하면 컨테이너에서 나가진다.
docker ps
위 명령어는 현재 실행되고 있는 컨테이너를 확인한다. 컨테이너에서 나가버렸기 때문에 컨테이너가 중지되고 현재 내려온 상태다. 그러므로 위 명령어로는 내려온 컨테이너를 확인할 수 없다.
docker ps -a
-a 옵션은 all로 모든 컨테이너를 보여준다.
output:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 25fccfc202a9 tensorflow/tensorflow "bash" 13 minutes ago Exited (127) About a minute ago
이제 컨테이너 ID를 알아냈다. 현재 내 기준에서는 25fccfc202a9다.
docker rm 25fccfc202a9
하면 삭제된다.
8. GPU를 위한 nvidia-container-toolkit 설치
Docker에서 GPU를 사용하려면 nvidia-container-toolkit을 설치해야한다.
# Add the package repositories distribution=$(. /etc/os-release;echo $ID$VERSION_ID) curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit sudo systemctl restart docker
github.com/NVIDIA/nvidia-docker
자세한 것은 여기 나와있다.
docker run -it --gpus=all tensorflow/tensorflow bash
--gpus=all이라는 옵션이 추가되었다.
nvidia-smi
output:
Fri Aug 28 06:31:16 2020 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 440.100 Driver Version: 440.100 CUDA Version: N/A | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 GeForce GTX 1070 Off | 00000000:01:00.0 Off | N/A | | 0% 36C P8 7W / 166W | 19MiB / 8117MiB | 0% Default | +-------------------------------+----------------------+----------------------+ | 1 GeForce GTX 1070 Off | 00000000:03:00.0 Off | N/A | | 0% 38C P8 5W / 151W | 2MiB / 8119MiB | 0% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| +-----------------------------------------------------------------------------+
정상적으로 실행된다.
9. 복습
- 이미지로부터 컨테이너 생성 및 실행 : docker run
- 터미널 사용을 위한 옵션: -it
- GPU 사용을 위한 옵션: --gpus=all
- 이미지 이름: tensorflow/tensorflow
- 명령어: bash
- 실행중인 컨테이너 확인: docker ps
- 실행중이지 않은 컨테이너까지 확인: docker ps -a
- 컨테이너 삭제: docker rm <CONTAINER ID>
반응형'개발 환경 > Docker' 카테고리의 다른 글
[Docker for ML #3] 로컬 디렉토리와 컨테이너 마운트하기 (0) 2020.08.28 [Docker for ML #2] 나만의 개발환경 만들기 (Dockerfile) (0) 2020.08.28 Docker, docker-compose에 원하는 GPU만 할당하기 (0) 2020.05.21 Docker compose 원하는 log만 출력하기 (0) 2020.04.16 딥 러닝을 위한 docker-compose 설치 및 사용법 [pytorch, tensorboard 예제] (0) 2020.04.11 - 이미지로부터 컨테이너 생성 및 실행 : docker run