Skip to main content

Docker에서 GPU로 TensorFlow와 PyTorch 설정하기

Docker를 사용해 GPU에서 TensorFlow와 PyTorch 딥러닝 모델을 설정하는 짧은 튜토리얼. 이 글은 AI 번역된 기사입니다. 오역이 있다면 댓글로 알려주세요.
Created on September 15|Last edited on September 15

목차

이 글은 가상 환경에 대한 기본적인 이해를 전제로 합니다
💡

왜 Docker를 사용할까?

이 보고서에서는 Docker를 활용해 TensorFlow와 PyTorch로 딥러닝 모델을 분산 학습하는 과정을 더 쉽게 만들고, 동시에 성가신 CUDA 오류를 피하는 방법을 단계별로 살펴보겠습니다.
최신 최첨단 모델들은 지나치게 크고 과매개변수화되어 있으며, 실제로 데이터셋의 데이터 포인트 수보다 훨씬 많은 파라미터를 포함합니다. 이러한 모델을 학습하려면 막대한 연산 자원이 필요하므로, 다음과 같은 멀티프로세싱 및 분산 모듈에 의존합니다 torch.distributed 또는 tf.distribute.
설령 병렬 코드가 어떻게든 잘 돌아가더라도, 주 라이브러리가 지원하는 CUDA 버전과 정확히 맞춰야 하고(의존성 지옥 ☠️), 모든 가속기가 “보이는지” 확인해야 하는 또 다른 고충이 있습니다.
Docker는 각 버전에 맞는 최적의 CUDA 구성이 미리 적용된 이미지를 제공하여 이 과정을 대폭 개선합니다. 또한 기존 이미지를 기반으로 열어 직접 빌드하고, 필요한 사용자 정의 라이브러리와 프레임워크를 추가해 작업을 더욱 간단하게 만들 수도 있습니다.
Weights & Biases 로깅은 분산 시스템에서도 원활하게 동작하며, 모든 GPU가 활용되고 있는지 확인할 수 있도록 시스템 지표 추적까지 지원합니다.
Docker를 사용해 TensorFlow와 PyTorch 파이프라인을 학습하는 방법을 몇 가지 예제로 차근차근 살펴보겠습니다.

Docker로 GPU 지원 TensorFlow 설정하기

TensorFlow는 분산 코드를 작성할 수 있도록 쉬운 API를 제공합니다. tf.distribute API이지만, NVIDIA GPU Toolkit, CUDA Toolkit, CUPTI, cuDNN, TensorRT의 정확한 버전을 맞추는 일은 번거로울 수 있습니다. 기본 TensorFlow 이미지를 사용하면 필수 패키지가 미리 설치된 사전 구성 환경을 바로 활용할 수 있습니다.
TensorFlow는 제공합니다 여러 개의 이미지 사용 사례에 따라 latest, nightly, devel 같은 태그를 선택할 수 있습니다. 컴퓨터에 Docker가 설치되어 있다면 다음과 같은 명령으로 이러한 이미지를 내려받을 수 있습니다.
$ docker pull tensorflow/tensorflow
$ docker pull tensorflow/tensorflow:latest-gpu
이 명령들은 각각 최신 안정화 버전과 최신 GPU 호환 버전을 설치합니다. 더 자세한 안내는 다음을 참고하세요 공식 문서.
이제 적절한 분산 전략이 적용된 train.py 스크립트가 있다고 가정해 보겠습니다. 예를 들어 다음과 같습니다:
import wandb
from wandb.keras import WandbCallback

# Initialize the run
wandb.init(project="GPU-Docker")

if __name__ == "__main__":
# Other Steps like Dataset Caching and PreProcessing

strategy = tf.distribute.MirroredStrategy()

with strategy.scope():
# Create Model
# model = ...
# model.compile(...)

model.fit(...,callbacks = [WandbCallback()])
다음 명령을 사용해 컨테이너 내부에서 이 스크립트를 실행하면, 시스템에서 사용 가능한 모든 GPU를 TensorFlow가 사용하도록 할 수 있습니다.
$ docker run --gpus all -v $PWD:/tmp -w /tmp -it tensorflow/tensorflow:latest-gpu python train.py
이 명령을 이해해 봅시다:
  • docker run 이는 Docker 데몬에게 어떤 컨테이너 내부에서 다음 명령들을 실행하라고 지시합니다.
  • --gpus all - 이는 데몬에게 사용 가능한 모든 GPU를 사용하라고 지시합니다.
  • -v $PWD:/tmp -w /tmp - 현재 디렉터리( )를 컨테이너 내부의 어느 위치에 마운트할지 지정하여, 데몬이 그 위치에서 명령을 실행하도록 지시합니다$PWD)
  • -it tensorflow/tensorflow:latest-gpu - 데몬에게 어떤 컨테이너를 “인터랙티브” 모드로 사용할지 지정합니다. 이 모드에서는 컨테이너 내부의 터미널에 접근할 수 있습니다.
  • python train.py - 이 명령들은 컨테이너 내부에서 실행되므로, 파이썬 인터프리터를 사용해 우리의 스크립트를 실행합니다.
기본 TensorFlow 이미지에 포함되어 있지 않은 다른 패키지를 사용한다면, TensorFlow 이미지를 기반으로 한 사용자 정의 Docker 이미지를 만들어 그 안에 필요한 패키지들을 설치할 수 있습니다. 그런 다음 해당 이미지를 빌드하여 TensorFlow 이미지 대신 사용하면 됩니다. 예시 Dockerfile은 이 저장소를 참고하세요.

Docker로 GPU 지원 PyTorch 환경 설정

사실 torch.distributed는 처음 시작하기가 쉽지 않지만, TensorFlow에서 했던 것처럼 PyTorch에서도 분산 실행을 더 쉽게 만들 수 있습니다.
TensorFlow와 마찬가지로 PyTorch도 다양한 버전의 CUDA와 cuDNN이 사전 구성된 훌륭한 이미지를 다수 제공합니다. 가장 간단한 시작 방법은 최신 이미지를 사용하는 것이며, 그 외 태그들도 해당의 페이지에서 확인할 수 있습니다. 공식 Docker 페이지.
TensorFlow와 마찬가지로, 공식 이미지를 다운로드하는 절차도 동일합니다.
$ docker pull pytorch/pytorch:latest
$ docker pull pytorch/pytorch:1.9.1-cuda11.1-cudnn8-runtime
$ docker pull pytorch/pytorch:1.9.1-cuda11.1-cudnn8-devel
위에서 언급한 세 가지 이미지는 대부분의 다른 태그를 대표합니다.
최신 이미지는 최신 안정 버전의 PyTorch, CUDA, cuDNN이 포함되어 있습니다. 또한 다음과 같은 형식의 다른 태그들도 제공됩니다. X-cuda-Y-cudnn-Z-runtime/devel, 여기서 X는 PyTorch 버전, Y는 CUDA 버전, Z는 cuDNN 버전을 의미합니다. 다음과 같이 태그된 이미지들은 devel 여러 가지 컴파일러 구성으로 미리 설치되어 제공합니다.
이미지를 기반으로 Docker를 사용해 유사한 명령어로 모델을 학습할 수 있습니다.


프레임워크에 구애받지 않는 방식으로, 다음과 같은 공식 NVIDIA CUDA 버전도 사용할 수 있습니다:
$ docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi

요약

이 글에서는 Docker를 활용해 분산 학습을 간소화하면서, 보유한 모든 GPU에서 TensorFlow와 PyTorch를 설정해 딥러닝 모델을 학습하는 방법을 살펴보았습니다. W&B의 전체 기능 세트를 확인하려면 다음을 참고하세요. 짧은 5분 가이드수학적 내용과 “처음부터 직접 구현한” 코드까지 다루는 추가 리포트를 원하신다면, 아래 댓글이나 저희의 채널에서 알려주세요. 포럼 ✨!
다음 주제에 대한 다른 리포트도 확인해 보세요 완전 연결 GPU 활용도와 모델 저장과 같은 다른 핵심 개발 주제도 다룹니다.

추천 읽을거리



이 글은 AI로 번역된 기사입니다. 오역이 의심되는 부분이 있다면 댓글로 알려주세요. 원문 리포�� 링크는 다음과 같습니다: 원문 리포트 보기