Deep Learning

Docker를 이용해서 편리하게 GPU Tensorflow를 사용하자

둔진 2020. 4. 25. 17:25

  Ubuntu에 업데이트가 있을 때마다, Tensorflow에 업데이트가 있을 때마다, GPU를 사용할 수 있도록 Tensorflow를 설치하는 일이 여간 어려운 일이 아닙니다. Nvidia 드라이버 버전도 꼬이고, CUDA는 또 호환되는 버전이 따로 있고, Package는 LTS만 지원한다고하고, CuDNN 버전 등등에. 여러분만의 고민이 아닙니다.

  이 고민을 Docker를 이용해서 비교적(?) 손쉽게 해결해보겠습니다. 물론 Docker에 대해서 아주 기본 사용법은 아셔야 합니다.

  (여담이지민 Ubuntu 20.04 LTS가 출시됐다기에 설치해보면서 Tensorflow를 Docker로 설치해봤습니다. 아무래도 이제 막 나온 따끈따끈한 판이다 보니 CUDA와 Tensorflow가 잘 될지도 의문이었고, 무엇보다 다른 프로젝트에서 Docker의 강력함을 맛봤거든요.)

  Docker를 통해 GPU Tensorflow를 사용하기 위한 전제 조건은 딱 하나입니다. 바로 Ubuntu에 Nvidia 드라이버만 설치돼있으면 됩니다. 나머지는 다 Docker 이미지에서 제공이 되거든요.

1. Nvidia 드라이버가 설치되었는지 확인해봅시다.

  GUI를 사용하고 계시다면 아주 쉽습니다. Software & Updates 를 실행시키시고 Additional Drivers 탭으로 가보시면 됩니다.

나머지는 다 Docker 이미지에서 제공이 되거든요.

  저는 자동으로 최신 드라이버인 440 버전이 설치됐습니다. 혹시 설치가 안 되신 분은 저 화면에서 최신 버전을 선택하시고 적용 후에 재부팅을 해주시면 됩니다.

 

  터미널만 사용하시는 분은 아래 명령으로 어떤 드라이버 버전이 지원되는지 확인하시고,

$ sudo ubuntu-drivers devices

아래 명령으로 추천 버전을 설치하시면 됩니다. 재부팅 한번 해주시구요.

$ sudo ubuntu-drivers autoinstall

2. Docker 설치

  혹시 아직 Docker가 설치되지 않았다면 아래 명령으로 Docker를 설치해줍니다.

$ sudo apt install docker.io

 

  그리고 root가 아닌 일반 사용자 권한으로 docker를 쓸 수 있도록 그룹을 추가해줍니다. 이 부분은 선택사항이지만 하지 않으면 매번 docker 명령을 실행할 때마다 앞에 sudo를 붙여서 root 권한으로 실행해야 합니다. 명령 실행 후 그룹 반영을 위해서 다시 로그인을 하시면 됩니다.

$ sudo usermod -aG docker {계정명}

3. Nvidia Container Toolkit 설치

  다음으로는 Docker에서 GPU 가속을 하게 해주는 Nvidia Container Toolkit(https://github.com/NVIDIA/nvidia-docker)을 설치합니다. 아래 명령을 터미널에 차례로 실행합니다.

$ 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

 

  이제 Docker가 제대로 GPU 가속을 지원하는지 테스트를 해보겠습니다.

$ docker run --gpus all nvidia/cuda:10.0-base nvidia-smi

 

4. Tensorflow Docker 이미지 사용  

  드디어 대망의 Tensorflow Docker 이미지를 설치해보겠습니다. Tensorflow는 GPU를 지원하느냐 안 하느냐, Python 2/3, Jupyter Notebook 지원 여부 등에 따라 다양한 Tag 조합을 제공합니다. 하지만 난 (저처럼) "최신 버전의 파이썬에 GPU도 되고 Jupyter Notebook도 쓰겠다" 라고 하시면 아래 명령을 실행하시면 됩니다.

$ docker run --gpus all -it --rm -p 8888:8888 tensorflow/tensorflow:latest-gpu-py3-jupyter

 

전체 Tag에 대해서 궁금하신 분은 공식 Docker 이미지 페이지 (https://hub.docker.com/r/tensorflow/tensorflow/) 에서 확인하실 수 있습니다.

 

  처음 실행하시면 Docker 이미지를 다운받느라고 시간이 좀 걸립니다.

  최초 다운로드를 마치고 나면 이렇게 Container가 하나 뜨면서 Jupyter Notebook 서버가 실행된 모습을 모실 수 있습니다. 그리고 터미널의 링크를 브라우저로 여시면 아래와 같이 Jupyter Notebook도 사용하실 수 있구요.

 

  GPU 가속이 되는 Tensorflow 설치가 끝났습니다. 참 쉽죠?

 

  혹시 Shell로 들어가고 싶으시다면 위 명령 대신에 아래 명령을 실행하시면 됩니다.

$ docker run --gpus all -it --rm -p 8888:8888 tensorflow/tensorflow:latest-gpu-py3-jupyter bash

5. 성능은 어떨까?

  결론부터 말씀드리면 일반적으로 시스템에 바로 설치하는 것과 성능 차이를 느끼지 못했습니다. 자세한 성능 평가에 대해서는 https://blog.exxactcorp.com/is-docker-ideal-for-running-tensorflow-lets-measure-performance-with-rtx-2080-ti/을 참고하시면 됩니다. 긴 영어 글인데 요약하자면,

  • 성능 저하는 거의 없음
  • Docker를 사용해서 재사용성이 높고 Dependecy가 분리됨
  • 근데 Docker는 좀 배워야 함

6. 마무리하며

  Tensorflow GPU 설치 때마다 머리가 아팠는데 Docker를 사용하니 참 쉽고 간편합니다. 개인적으로는 저 기본 이미지에 제가 필요한 fasttext, jupyter lab 등을 설치한 이미지를 만들어서 쓰고 있습니다. 이 부분은 각자 취향에 맞춰서 적용해서 쓰시면 됩니다. 그것이 Docker의 묘미이기도 하고요.

 

참고 : https://www.tensorflow.org/install/docker