GPU 가속기로 인스턴스 실행

이 페이지에서는 Container-Optimized OS 가상 머신(VM) 인스턴스에서 NVIDIA 그래픽 처리 장치(GPU) 하드웨어 가속기를 사용하는 방법을 설명합니다.

개요

Compute Engine에서는 NVIDIA Tesla K80, P100, P4, V100T4 GPU가 장착된 Container-Optimized OS VM을 만들 수 있습니다. GPU는 영상 인식 및 자연어 처리와 같은 딥 러닝 작업은 물론 동영상 트랜스코딩 및 이미지 처리와 같은 다른 컴퓨팅 집약적인 작업을 수행할 수 있는 컴퓨팅 성능을 제공합니다.

Google은 사용자가 Container-Optimized OS VM 인스턴스 상의 Docker 컨테이너에서 GPU 작업 부하를 실행하는 작업을 원활하게 하도록 도와 사용자로 하여금 보안 및 안정성과 같은 다른 Container-Optimized OS 기능을 활용할 수 있게 합니다.

요구사항

Container-Optimized OS VM 인스턴스에서 GPU를 실행하려면 다음 요구사항을 충족해야 합니다.

  • Container-Optimized OS 버전: Container-Optimized OS VM 인스턴스에서 GPU를 실행하려면 Container-Optimized OS 출시 버전 마일스톤이 LTS 마일스톤이고 마일스톤 번호는 85 이상이어야 합니다.
  • GPU 할당량: GPU를 사용하여 Container-Optimized OS VM 인스턴스를 만들려면 먼저 원하는 영역에 Compute Engine GPU 할당량이 있어야 합니다. 프로젝트에 GPU 할당량이 충분한지 확인하려면 Google Cloud Console에서 할당량을 참조하세요.

    추가 GPU 할당량이 필요하면 Cloud Console에서 GPU 할당량을 요청해야 합니다. 결정 계정을 설정한 경우에는 할당량 요청을 제출하면 프로젝트에 GPU 할당량이 자동으로 수신됩니다.

  • NVIDIA GPU 드라이버: Container-Optimized OS VM 인스턴스에 직접 NVIDIA GPU 드라이버를 설치해야 합니다. 이 섹션에서는 Container-Optimized OS VM 인스턴스에 드라이버를 설치하는 방법을 설명합니다.

시작하기: Container-Optimized OS에서 GPU 실행

다음 섹션에서는 Container-Optimized OS VM 인스턴스에서 GPU를 실행하는 방법을 설명합니다.

먼저 GPU가 포함된 Container-Optimized OS VM 인스턴스가 필요합니다. GPU를 사용하여 Container-Optimized OS VM 인스턴스를 생성하거나 기존 Container-Optimized OS VM 인스턴스에 GPU를 추가할 수 있습니다. VM 인스턴스를 만들 때 cos-cloud 이미지 프로젝트에서 이미지 또는 이미지 계열을 선택해야 합니다.

현재 Container-Optimized OS VM 인스턴스에 연결된 모든 GPU를 확인하려면 다음 명령어를 실행합니다.

gcloud compute instances describe instance-name \
  --project=project-id \
  --zone zone \
  --format="value(guestAccelerators)"

다음을 바꿉니다.

  • instance-name: 인스턴스 이름입니다.
  • project-id: 프로젝트 ID입니다.
  • zone: 인스턴스의 영역입니다.

NVIDIA GPU 장치 드라이버 설치

GPU 한 개 이상을 포함하는 인스턴스를 만든 후 애플리케이션이 기기에 액세스할 수 있게 하려면 시스템에 기기 드라이버가 있어야 합니다. 이 가이드에서는 Container-Optimized OS VM 인스턴스에 NVIDIA 독점 드라이버를 설치하는 방법을 설명합니다.

Container-Optimized OS는 NVIDIA 드라이버 설치 프로세스를 단순화하는 기본 제공 유틸리티 cos-extensions를 제공합니다. 이 유틸리티를 실행하면 사용자는 NVIDIA 라이선스 계약에 동의하게 됩니다.

GPU 드라이버 버전 확인

Container-Optimized OS 이미지의 각 버전에는 기본적으로 지원되는 NVIDIA GPU 드라이버 버전이 있습니다. 다음 표는 주요 Container-Optimized OS LTS 마일스톤의 기본 지원 버전을 보여줍니다.

OS 버전 기본 드라이버 버전
COS 85 LTS 450.51.06

Container-Optimized OS VM 인스턴스에서 다음 명령어를 실행하여 지원되는 GPU 드라이버 버전을 모두 확인할 수도 있습니다.

cos-extensions list

셸 명령어를 통해 드라이버 설치

Container-Optimized OS VM 인스턴스에 연결한 후 다음 명령어를 수동으로 실행하여 드라이버를 설치할 수 있습니다.

cos-extensions install gpu

시작 스크립트를 통해 드라이버 설치

시작 스크립트를 통해 GPU 드라이버를 설치할 수도 있습니다. VM 인스턴스를 만들 때 시작 스크립트를 제공하거나 실행 중인 VM 인스턴스에 스크립트를 적용한 다음 VM을 재부팅할 수 있습니다. 이렇게 하면 VM에 연결하지 않고도 드라이버를 설치할 수 있습니다. 또한 모든 VM 재부팅 시 GPU 드라이버가 구성되었는지 확인합니다.

다음은 드라이버를 설치하기 위한 시작 스크립트의 예시입니다.

#! /bin/bash

cos-extensions install gpu

cloud-init를 통해 드라이버 설치

cloud-init는 시작 스크립트와 유사하지만 더 강력합니다. 다음 예시에서는 cloud-init를 통해 GPU 드라이버를 설치하는 방법을 보여줍니다.

#cloud-config

runcmd:
  - cos-extensions install gpu

cloud-init를 사용하면 드라이버가 설치된 이후에만 GPU 애플리케이션이 실행되도록 종속 항목을 지정할 수 있습니다. 자세한 내용은 엔드 투 엔드: Container-Optimized OS에서 GPU 애플리케이션 실행 섹션을 참조하세요.

Container-Optimized OS VM 인스턴스에서 cloud-init를 사용하는 방법에 대한 자세한 내용은 인스턴스 만들기 및 구성 페이지를 참조하세요.

설치 확인

Container-Optimized OS VM 인스턴스에서 다음 명령어를 실행하여 GPU 드라이버 설치를 수동으로 확인할 수 있습니다. 기기 상태 및 드라이버 버전과 같은 GPU 기기 정보가 표시됩니다.

# Make the driver installation path executable by remounting it.
sudo mount --bind /var/lib/nvidia /var/lib/nvidia
sudo mount -o remount,exec /var/lib/nvidia
/var/lib/nvidia/bin/nvidia-smi

GPU를 사용하도록 Docker 컨테이너 구성

GPU 드라이버가 설치된 후 GPU를 사용하도록 Docker 컨테이너를 구성할 수 있습니다. 다음 예시에서는 /dev/nvidia0를 사용하는 Docker 컨테이너에서 간단한 CUDA 애플리케이션을 실행하는 방법을 보여줍니다.

docker run \
  --volume /var/lib/nvidia/lib64:/usr/local/nvidia/lib64 \
  --volume /var/lib/nvidia/bin:/usr/local/nvidia/bin \
  --device /dev/nvidia0:/dev/nvidia0 \
  --device /dev/nvidia-uvm:/dev/nvidia-uvm \
  --device /dev/nvidiactl:/dev/nvidiactl \
  gcr.io/google_containers/cuda-vector-add:v0.1

cloud-init를 통해 Docker 컨테이너를 실행하여 드라이버 설치와 Docker 컨테이너 간의 종속 항목을 지정할 수 있습니다. 자세한 내용은 엔드 투 엔드: Container-Optimized OS에서 GPU 애플리케이션 실행 섹션을 참조하세요.

엔드 투 엔드: Container-Optimized OS에서 GPU 애플리케이션 실행

다음 엔드 투 엔드 예시에서는 GPU 드라이버가 설치된 후 GPU 애플리케이션 컨테이너 myapp:latest를 프로비저닝하는 Container-Optimized OS VM 인스턴스를 cloud-init를 사용하여 구성하는 방법을 보여줍니다.

#cloud-config

users:
- name: myuser
  uid: 2000

write_files:
  - path: /etc/systemd/system/install-gpu.service
    permissions: 0644
    owner: root
    content: |
      [Unit]
      Description=Install GPU drivers
      Wants=gcr-online.target docker.socket
      After=gcr-online.target docker.socket

      [Service]
      User=root
      Type=oneshot
      ExecStart=cos-extensions install gpu
      StandardOutput=journal+console
      StandardError=journal+console
  - path: /etc/systemd/system/myapp.service
    permissions: 0644
    owner: root
    content: |
      [Unit]
      Description=Run a myapp GPU application container
      Requires=install-gpu.service
      After=install-gpu.service

      [Service]
      User=root
      Type=oneshot
      RemainAfterExit=true
      ExecStart=/usr/bin/docker run --rm -u 2000 --name=myapp --device /dev/nvidia0:/dev/nvidia0 myapp:latest
      StandardOutput=journal+console
      StandardError=journal+console

runcmd:
  - systemctl daemon-reload
  - systemctl start install-gpu.service
  - systemctl start myapp.service

CUDA 라이브러리 정보

Container-Optimized OS VM 인스턴스에 설치하는 NVIDIA 기기 드라이버에는 CUDA 라이브러리가 포함됩니다.

또한 앞의 예시에서 /usr/local/nvidia/lib64/usr/local/nvidia/bin에서 각각CUDA 라이브러리와 디버그 유틸리티를 Docker 컨테이너에 마운트하는 방법도 보여줍니다.

NVIDIA GPU를 사용하는 Docker 컨테이너에서 실행되는 CUDA 애플리케이션은 CUDA 라이브러리를 동적으로 검색해야 합니다. 이를 위해서는 /usr/local/nvidia/lib64LD_LIBRARY_PATH 환경 변수에 포함해야 합니다.

Container-Optimized OS에서 CUDA 애플리케이션에 LD_LIBRARY_PATH가 이미 적절하게 설정된 Ubuntu 기반 CUDA Docker 기본 이미지를 사용합니다.

보안

Container-Optimized OS의 다른 커널 모듈과 마찬가지로 GPU 드라이버는 Container-Optimized OS 커널에 내장된 키로 암호화 서명 및 확인됩니다. 다른 배포판과 달리 Container-Optimized OS는 사용자가 머신 소유자 키(MOK)를 등록하고 키를 사용하여 커스텀 커널 모듈에 서명할 수 없도록 합니다. 이는 Container-Optimized OS 커널의 무결성을 보장하고 공격에 취약한 부분을 줄이는 것입니다.

제한사항

COS 버전 제한사항

COS LTS 출시 버전 마일스톤 85 이상은 NVIDIA GPU 기기 드라이버 설치 섹션에 언급된 cos-extensions 유틸리티를 지원합니다. 이전 COS 출시 버전 마일스톤에는 cos-gpu-installer 오픈소스 도구를 사용하여 GPU 드라이버를 수동으로 설치합니다.

VM 인스턴스 제한사항

GPU가 포함된 VM 인스턴스에는 다른 인스턴스 유형과 다르게 동작하게 만드는 특정 제한사항이 있습니다. 자세한 내용은 Compute Engine GPU 제한사항 페이지를 참조하세요.

할당량 및 가용성

GPU는 특정 리전 및 영역에서 제공됩니다. GPU 할당량을 요청할 때는 Container-Optimized OS VM 인스턴스를 실행할 리전을 고려합니다.

적용 가능한 리전 및 영역의 전체 목록은 Compute Engine의 GPU를 참조하세요. 또한 gcloud 명령줄 도구를 사용하여 영역에서 사용할 수 있는 GPU를 확인할 수 있습니다.

gcloud compute accelerator-types list

가격

GPU 가격 책정 정보는 Google Cloud GPU 페이지의 가격표를 참조하세요.

지원 용이성

각 Container-Optimized OS 출시 버전에는 지원되는 NVIDIA GPU 드라이버 버전이 하나 이상 있습니다. Container-Optimized OS팀은 출시 전에 Container-Optimized OS 버전에 대해 지원되는 GPU 드라이버가 호환될 수 있는지 확인합니다. 새로운 버전의 NVIDIA GPU 드라이버는 수시로 제공될 수 있습니다. 일부 GPU 드라이버 버전은 COS를 사용할 수 없으며 자격 타임라인이 보장되지 않습니다.

Container-Optimized OS팀이 출시 버전 마일스톤에 새 버전을 출시하면 Google은 해당 드라이버 브랜치에 최신 GPU 드라이버 버전을 지원하려고 노력합니다. 이는 가능한 한 빨리 GPU 드라이버에서 발견된 CVE를 수정하기 위해서입니다.

Container-Optimized OS 고객이 NVIDIA GPU 드라이버와 관련된 문제를 파악한 경우 고객은 NVIDIA와 직접 협력하여 지원을 받아야 합니다. 드라이버와 관련된 문제가 아니면 사용자는 Cloud 지원에 요청을 보낼 수 있습니다.

다음 단계