Docker

Docker컨테이너를 사용하여 TensorFlow 설치를 나머지 시스템에서 격리하는 가상 환경을 만듭니다. TensorFlow 프로그램은 호스트 머신과 리소스를 공유(디렉터리 액세스, GPU 사용, 인터넷 연결 등)할 수 있는 이 가상 환경 내에서 실행됩니다. TensorFlow Docker 이미지는 각 출시에서 테스트되었습니다.

Docker는 Linux에서 TensorFlow GPU 지원을 사용 설정하는 가장 간편한 방법입니다. 호스트 머신에 NVIDIA® GPU 드라이버만 있으면 되고 NVIDIA® CUDA® Toolkit을 설치할 필요가 없기 때문입니다.

TensorFlow Docker 요구사항

  1. 로컬 호스트 머신에 Docker를 설치합니다.
  2. Linux에서 GPU를 지원하려면 NVIDIA Docker 지원을 설치합니다.
    • docker -v로 Docker 버전을 기록합니다. 19.03 이전 버전에는 nvidia-docker2와 --runtime=nvidia 플래그가 필요합니다. 19.03 이상 버전에는 nvidia-container-toolkit 패키지와 --gpus all 플래그를 사용합니다. 두 옵션 모두 위 링크된 페이지에 설명되어 있습니다.

TensorFlow Docker 이미지 다운로드

공식 TensorFlow Docker 이미지는 tensorflow/tensorflow Docker Hub 저장소에 있습니다. 이미지 출시는 다음 형식을 사용하여 태그됩니다.

태그 설명
latest TensorFlow CPU 바이너리 이미지의 최신 출시입니다. 기본값입니다.
nightly TensorFlow 이미지의 나이틀리 빌드입니다(불안정).
version TensorFlow 바이너리 이미지의 버전을 지정합니다(예: 2.1.0).
devel TensorFlow master 개발 환경의 나이틀리 빌드입니다. TensorFlow 소스 코드가 포함되어 있습니다.
custom-op TF 맞춤 작업 개발을 위한 특수 실험용 이미지입니다. 자세히 알아보기

각 베이스 태그에는 기능을 추가하거나 변경하는 변이가 있습니다.

태그 변이 설명
tag-gpu GPU를 지원하는 지정된 태그 출시입니다. 아래를 참고하세요.
tag-jupyter Jupyter를 포함하는 지정된 태그 출시입니다(TensorFlow 가이드 노트북 포함).

여러 변이를 한 번에 사용할 수 있습니다. 예를 들어 다음은 TensorFlow 출시 이미지를 시스템에 다운로드합니다.

docker pull tensorflow/tensorflow                     # latest stable release
docker pull tensorflow/tensorflow:devel-gpu           # nightly dev release w/ GPU support
docker pull tensorflow/tensorflow:latest-gpu-jupyter  # latest release w/ GPU support and Jupyter

TensorFlow Docker 컨테이너 시작

TensorFlow에서 구성된 컨테이너를 시작하려면 다음 명령어 양식을 사용합니다.

docker run [-it] [--rm] [-p hostPort:containerPort] tensorflow/tensorflow[:tag] [command]

자세한 내용은 Docker 실행 참조를 참조하세요.

CPU만 포함하는 이미지를 사용한 예제

latest 태그된 이미지를 사용하여 TensorFlow 설치를 확인해 보겠습니다. Docker를 처음 실행하면 새 TensorFlow 이미지가 다운로드됩니다.

docker run -it --rm tensorflow/tensorflow \
   python -c "import tensorflow as tf; print(tf.reduce_sum(tf.random.normal([1000, 1000])))"

TensorFlow Docker 레시피를 좀 더 살펴보겠습니다. TensorFlow에서 구성된 컨테이너 내에서 bash 셸 세션을 시작합니다.

docker run -it tensorflow/tensorflow bash

컨테이너 내에서 python 세션을 시작하고 TensorFlow를 가져올 수 있습니다.

호스트 머신에서 개발된 TensorFlow 프로그램을 컨테이너 내에서 실행하려면 호스트 디렉터리를 마운트하고 컨테이너의 작업 디렉터리(-v hostDir:containerDir -w workDir)를 변경합니다.

docker run -it --rm -v $PWD:/tmp -w /tmp tensorflow/tensorflow python ./script.py

컨테이너 내에서 생성된 파일이 호스트에 노출되는 경우 권한 문제가 발생할 수 있습니다. 일반적으로 호스트 시스템에서 파일을 수정하는 것이 가장 좋습니다.

TensorFlow의 나이틀리 빌드를 사용하여 Jupyter Notebook 서버를 시작합니다.

docker run -it -p 8888:8888 tensorflow/tensorflow:nightly-jupyter

안내에 따라 호스트 웹브라우저에서 URL을 엽니다. http://127.0.0.1:8888/?token=...

GPU 지원

Docker는 GPU에서 TensorFlow를 실행하는 가장 간편한 방법입니다. 호스트 머신에 NVIDIA® 드라이버만 있으면 되고 NVIDIA® CUDA® Toolkit이 필요하지 않기 때문입니다.

Nvidia Container Toolkit을 설치하여 NVIDIA® GPU 지원을 Docker에 추가합니다. nvidia-container-runtime은 Linux에서만 사용할 수 있습니다. 자세한 내용은 nvidia-container-runtime 플랫폼 지원 FAQ를 참조하세요.

GPU를 사용할 수 있는지 확인합니다.

lspci | grep -i nvidia

nvidia-docker 설치를 확인합니다.

docker run --gpus all --rm nvidia/cuda nvidia-smi

GPU 사용 이미지를 사용한 예제

GPU 사용 TensorFlow 이미지를 다운로드하여 실행합니다(몇 분 정도 걸릴 수 있음).

docker run --gpus all -it --rm tensorflow/tensorflow:latest-gpu \
   python -c "import tensorflow as tf; print(tf.reduce_sum(tf.random.normal([1000, 1000])))"

GPU 사용 이미지를 설정하는 데 시간이 걸릴 수 있습니다. GPU 기반 스크립트를 반복해서 실행하는 경우 docker exec를 사용하여 컨테이너를 재사용할 수 있습니다.

최신 TensorFlow GPU 이미지를 사용하여 컨테이너에서 bash 셸 세션을 시작합니다.

docker run --gpus all -it tensorflow/tensorflow:latest-gpu bash