tensorflow gpu 사용과 함께 도커를 이용하기 위한 환경 셋팅(우분투 18.04 LST 기준)
우선적으로 tensorflow에서 제공하는 도커이미지를 사용하도록 한다. 편리한 개발을 위해서 jupyter notebook까지 설치된 환경을 텐서플로우에서는 제공하고 있다.
도커이미지명 tensorflow/tensorflow:lastest-gpu-jupyter 을 사용하게 되면 GPU 버전이 장착된 도커이미지를 사용할 수 있다. 하지만 도커이미지로는 GPU를 사용할 수 없다. GPU를 사용하기 위해서는 몇가지 필요사항이 있다.
1. nvidia-smi 가 설치되어있어야한다(nvidia cuda 드라이버가 설치 되어있어야 한다.)
$ nvidia-smi #설치된 nvida 드라이버 확인 명령어
2. nvidia-container-toolkit 가 설치 되어있어야 한다.
$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey sudo apt-key add - #다운로드받기위한 공개키 발급
$ sudo apt-get install -y nvidia-container-toolkit #nvidia-conainer-toolkit 설치
$ sudo systemctl docker restart #도커 재시작
상기 과정이 다 준비가 되어있으면 tensorflow 를 GPU 기반으로 사용할 수 있으며 jupyter notebook까지 설치된 버전을 이용할 수 있다. 하지만 상기 과정을 준비하다보면 버전이 안 맞는다던지 몇가지 난관이 봉착 할 수 있다. nvidia-container-toolkit 설치는 nvidia cuda 드라이버의 의존성을 가지기 때문에 하위버전의 드라이버라면 업데이트를 해줘야 한다. 415버전으로는 안되어서 510버전까지 설치하였다.
당연히 도커를 기반으로 하기 때문에 도커는 설치가 되어있어야 한다.
$ sudo docker run --gpus all -itd --name tensorflow --rm -p 8883:8888 -v $PWD:/tmp tensorflow/tensorflow:latest-gpu-jupyter
실행 후 접속 화면
토큰번호는 docker 로그를 통해서 알 수 있다.
$ docker logs tensorflow #로그보기
도커가 가동되면서 토큰값을 보여준다. 로그가 지나가서 볼 수 없다면 도커이미지 내부로 들어가 명령어로 조회를 해야된다.
$docker exec -it tensorflow /bin/bash -c "jupyter notebook list"
GPU 사용 확인
정리를 하고 나니 너무 쉽다. 그런데 3시간이 넘게 걸렸다. 일단 기존에 우분투가 16.XX 대 버전이여서 이걸 올렸다. 도커버전도 낮아서 새로 올렸다. nvidia cuda 드라이버도 새로 버전을 올리고 하다보니 삽질이 너무 길었다.
결국 우분투 18.04 LTS 버전으로 만들고 nvidia cuda 드라이버 버전오 415에서 510으로 변경했다. 도커 api 버전도 1.39에서 1.41버전까지 올렸다.
이젠 코딩하고 공부하는 일만 남았다. 이런 모든 과정이 귀찮고 싫으면 colab을 쓰면된다. 비용도 colab에 싼 것 같다. 회사에 남는 머신러닝 테스트기계가 있어서 사용하는거지만 없으면 colab 유료를 쓰는게 비용면에서 훨씬 이득일 것이다. 요즘 최신 세대도 아닌데 중고 GPU가격이 아직도 1장에 100만원이라고 하니 눈이 돌아가는 가격이다.
추가
docker compose 파일을 만들어서 사용하기
그래픽카드를 모두 사용하고 비밀번호는 'password'로 지정한 상황
version: "3.7"
services:
tensorflow:
image: tensorflow/tensorflow:2.9.0-gpu-jupyter
container_name: tensorflow
ports:
- "8883:8888"
volumes:
- /tf/src:/tf/notebooks
environment:
- "JUPYTER_TOKEN=password"
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
restart: always
참고 웹사이트
nvidia cuda드라이버 설치 업그레이드
https://www.2cpu.co.kr/lec/3998
텐서플로우 관련
https://hub.docker.com/r/tensorflow/tensorflow
https://www.tensorflow.org/install/docker?hl=ko