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의 묘미이기도 하고요.
'Deep Learning' 카테고리의 다른 글
CategoricalCrossentropy vs SparseCategoricalCrossentropy (0) | 2020.05.14 |
---|---|
대용량 훈련 데이터 처리 - Generator로 TF Dataset 만들기 (3) | 2020.05.07 |
Word Vector 훈련 데이터를 키우면 얼마나 도움이 될까? (0) | 2020.05.01 |
Tensorflow의 Embedding Layer vs fastText (0) | 2020.04.30 |
한국어 토큰의 단위는 뭐가 좋을까? (4) | 2020.04.28 |