반응형

출처 : http://choesin.com/docker-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88%EC%99%80-%ED%95%A8%EA%BB%98-nvidia-gpu%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95-kubernetes-%EC%BB%A8%ED%8A%B8%EB%A1%A4%EB%9F%AC

 

Docker 컨테이너는 시스템의 GPU를 자동으로 보지 않습니다. 이로 인해 기계 학습 프레임워크와 같은 GPU 종속 워크로드에서 성능이 저하됩니다. 호스트의 NVIDIA GPU를 컨테이너에 노출하는 방법은 다음과 같습니다.

 

GPU가 Docker에서 작동하도록 만들기

Docker 컨테이너는 호스트의 커널을 공유하지만 자체 운영 체제 및 소프트웨어 패키지를 가져옵니다. 이는 GPU와 인터페이스하는 데 사용되는 NVIDIA 드라이버가 없음을 의미합니다. Docker는 기본적으로 컨테이너에 GPU를 추가하지 않으므로 일반 docker run 하드웨어가 전혀 표시되지 않습니다.

높은 수준에서 GPU가 작동하도록 하는 것은 이미지 내에 드라이버를 설치한 다음 런타임에 컨테이너에 GPU 장치를 추가하도록 Docker에 지시하는 2단계 절차입니다.

이 가이드는 최신 버전의 CUDA 및 Docker에 중점을 둡니다. NVIDIA Container Toolkit의 최신 릴리스는 CUDA 10 및 Docker Engine 19.03 이상의 조합을 위해 설계되었습니다. CUDA, Docker 및 NVIDIA 드라이버의 이전 빌드에는 추가 단계가 필요할 수 있습니다.

NVIDIA 드라이버 추가

Docker 구성을 계속하기 전에 호스트에서 NVIDIA 드라이버가 제대로 작동하는지 확인하십시오. 성공적으로 실행할 수 있어야 합니다. nvidia-smi GPU의 이름, 드라이버 버전 및 CUDA 버전을 확인하십시오.

광고

GPU를 Docker와 함께 사용하려면 먼저 NVIDIA Container Toolkit을 호스트에 추가하십시오. 이는 Docker 엔진에 통합되어 GPU 지원을 위해 컨테이너를 자동으로 구성합니다.

예제 명령을 사용하여 툴킷의 패키지 저장소를 시스템에 추가하십시오.

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

다음 설치 nvidia-docker2 호스트의 패키지:

apt-get update
apt-get install -y nvidia-docker2

Docker 데몬을 다시 시작하여 설치를 완료합니다.

sudo systemctl restart docker

이제 Container Toolkit이 작동해야 합니다. 테스트 컨테이너를 시작할 준비가 되었습니다.

GPU 액세스로 컨테이너 시작

Docker는 기본적으로 시스템의 GPU를 제공하지 않으므로 다음을 사용하여 컨테이너를 생성해야 합니다. --gpus 하드웨어가 표시되도록 플래그를 지정합니다. 활성화하거나 사용할 특정 장치를 지정할 수 있습니다. all 예어.

그만큼 nvidia/cuda 이미지는 CUDA 바이너리 및 GPU 도구로 사전 구성됩니다. 컨테이너를 시작하고 nvidia-smi GPU의 액세스 가능 여부를 확인하는 명령입니다. 출력은 사용할 때 본 것과 일치해야 합니다. nvidia-smi 당신의 호스트에. CUDA 버전은 호스트 및 선택한 컨테이너 이미지의 툴킷 버전에 따라 다를 수 있습니다.

docker run -it --gpus all nvidia/cuda:11.4.0-base-ubuntu20.04 nvidia-smi

기본 이미지 선택

중 하나를 사용하여 nvidia/cuda 태그는 GPU 워크로드를 Docker에서 실행하는 가장 빠르고 쉬운 방법입니다. 다양한 변형을 사용할 수 있습니다. 운영 체제, CUDA 버전 및 NVIDIA 소프트웨어 옵션의 매트릭스를 제공합니다. 이미지는 여러 아키텍처용으로 빌드됩니다.

각 태그의 형식은 다음과 같습니다.

11.4.0-base-ubuntu20.04
  • 11.4.0 – CUDA 버전.
  • base – 이미지 풍미.
  • ubuntu20.04 – 운영 체제 버전.
광고

세 가지 다른 이미지 맛을 사용할 수 있습니다. 그만큼 base image는 필수 CUDA 런타임 바이너리가 포함된 최소 옵션입니다. runtime GPU 간 통신을 위한 CUDA 수학 라이브러리 및 NCCL을 포함하는 보다 완전한 기능을 갖춘 옵션입니다. 세 번째 변형은 devel 그것은 당신에게 모든 것을 제공합니다 runtime 사용자 정의 CUDA 이미지를 생성하기 위한 헤더 및 개발 도구뿐만 아니라

이미지 중 하나가 효과가 있으면 이를 기반으로 사용하는 것을 목표로 삼으십시오. Dockerfile. 그런 다음 일반 Dockerfile 지침을 사용하여 프로그래밍 언어를 설치하고 소스 코드를 복사하고 애플리케이션을 구성할 수 있습니다. 수동 GPU 설정 단계의 복잡성을 제거합니다.

FROM nvidia/cuda:11.4.0-base-ubuntu20.04
RUN apt update
RUN apt-get install -y python3 python3-pip
RUN pip install tensorflow-gpu

COPY tensor-code.py .
ENTRYPONT ["python3", "tensor-code.py"]

다음을 사용하여 이 이미지를 빌드하고 실행합니다. --gpus 플래그는 GPU 가속으로 Tensor 워크로드를 시작합니다.

수동으로 이미지 구성

다른 기반을 선택해야 하는 경우 이미지에 CUDA 지원을 수동으로 추가할 수 있습니다. 이를 달성하는 가장 좋은 방법은 공식 NVIDIA Dockerfile을 참조하는 것입니다.

CUDA 패키지 리포지토리를 추가하는 데 사용된 지침을 복사하고 라이브러리를 설치하고 경로에 연결합니다. CUDA 버전 및 운영 체제에 따라 다르기 때문에 이 가이드의 모든 단계를 재현하지는 않습니다.

Dockerfile 끝에 있는 환경 변수에 주의하십시오. 이는 이미지를 사용하는 컨테이너가 NVIDIA Container Runtime과 통합되는 방식을 정의합니다.

ENV NVIDIA_VISIBLE_DEVICES all
ENV NVIDIA_DRIVER_CAPABILITIES compute,utility
광고

CUDA가 설치되고 환경 변수가 설정되면 이미지가 GPU를 감지해야 합니다. 이렇게 하면 이미지 내용을 더 잘 제어할 수 있지만 새 CUDA 버전이 출시되면 지침을 조정할 수 있습니다.

어떻게 작동합니까?

NVIDIA Container Toolkit은 Docker와 같은 컨테이너 런타임을 호스트의 NVIDIA 드라이버에 대한 인터페이스로 래핑하는 패키지 모음입니다. 그만큼 libnvidia-container 라이브러리는 런타임 래퍼를 통해 시스템의 GPU를 컨테이너에 자동으로 제공하는 API 및 CLI를 제공하는 역할을 합니다.

그만큼 nvidia-container-toolkit 구성 요소는 컨테이너 런타임을 구현합니다. prestart 훅. 즉, 새 컨테이너가 시작되려고 할 때 알림을 받습니다. 연결하려는 GPU를 확인하고 호출합니다. libnvidia-container 컨테이너 생성을 처리합니다.

후크는 다음에 의해 활성화됩니다. nvidia-container-runtime. 이는 NVIDIA가 다음을 보장하도록 containerd 또는 runc와 같은 “실제” 컨테이너 런타임을 래핑합니다. prestart 후크가 실행됩니다. 기존 런타임은 후크가 실행된 후 컨테이너 시작 프로세스를 계속합니다. 컨테이너 툴킷이 설치되면 Docker 데몬 구성 파일에서 선택한 NVIDIA 런타임이 표시됩니다.

요약

Docker 컨테이너 내에서 NVIDIA GPU를 사용하려면 호스트에 NVIDIA Container Toolkit을 추가해야 합니다. 이것은 NVIDIA 드라이버를 컨테이너 런타임과 통합합니다.

부름 docker run 와 더불어 --gpu 플래그는 컨테이너에서 하드웨어를 볼 수 있도록 합니다. Container Toolkit을 설치한 후 실행하는 각 컨테이너에서 설정해야 합니다.

광고

NVIDIA는 애플리케이션의 빠른 시작으로 사용할 수 있는 사전 구성된 CUDA Docker 이미지를 제공합니다. 더 구체적인 것이 필요하면 공식 Dockerfiles를 참조하여 Container Toolkit과 여전히 호환되는 자신만의 것을 조립하십시오.

반응형

+ Recent posts