GPU 가속기로 인스턴스 실행

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

개요

Compute Engine을 사용하여 GPU가 연결된 Container-Optimized OS를 실행하는 VM 인스턴스를 만들 수 있습니다. Compute Engine에서 GPU를 실행할 때는 가속기 최적화 및 N1 범용의 두 가지 머신 계열만 사용할 수 있습니다.

  • 가속기 최적화 머신 유형의 경우 각 머신 유형에 특정 NVIDIA GPU 모델이 연결됩니다.

    • A3 가속기 최적화 머신 유형의 경우 NVIDIA H100 80GB GPU가 연결됩니다.
    • A2 가속기 최적화 머신 유형의 경우 NVIDIA A100 GPU가 연결됩니다. A100 40GB 및 A100 80GB 옵션 모두에서 사용 가능합니다.
    • G2 가속기 최적화 머신 유형의 경우 NVIDIA L4 GPU가 연결됩니다.
  • N1 범용 머신 유형의 경우 다음 GPU를 연결할 수 있습니다.

GPU는 이미지 인식 및 자연어 처리와 같은 딥 러닝 작업은 물론 동영상 트랜스코딩 및 이미지 처리와 같은 다른 컴퓨팅 집약적인 작업을 수행할 수 있는 컴퓨팅 성능을 제공합니다.

Google Cloud는 Container-Optimized OS VM 인스턴스의 컨테이너 내에서 GPU 워크로드를 실행할 수 있는 원활한 환경을 제공하므로 보안 및 안정성과 같은 다른 Container-Optimized OS 기능을 활용할 수 있습니다.

GPU 사용 사례에 대한 자세히 알아보려면 Cloud GPU를 참조하세요.

Google Kubernetes Engine(GKE)에서 GPU 사용에 대해 자세히 알아보려면 GKE에서 GPU 실행를 참조하세요.

요구사항

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

  • Container-Optimized OS x86 이미지: x86 기반 Container-Optimized OS 이미지만 GPU 실행을 지원합니다. Arm 기반 Container-Optimized OS 이미지는 이 기능을 지원하지 않습니다.

  • 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 콘솔에서 할당량을 참조하세요.

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

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

VM 만들기

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

먼저 GPU가 포함된 Container-Optimized OS VM 인스턴스가 필요합니다. VM을 만드는 데 사용되는 방법은 선택한 GPU 모델에 따라 달라집니다.

또한 기존 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)"

다음을 바꿉니다.

NVIDIA GPU 기기 드라이버 설치

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

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

GPU 드라이버 버전 식별

Container-Optimized OS 이미지의 각 버전에는 각 유형의 기본 드라이버와 함께 각 GPU 유형에 대해 지원되는 NVIDIA GPU 드라이버 버전 목록이 포함됩니다. 지원되는 버전의 전체 목록은 주요 Container-Optimized OS LTS 마일스톤의 출시 노트를 참조하세요.

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

sudo cos-extensions list

필수 CUDA 툴킷 버전 식별

애플리케이션에 CUDA가 사용되는 경우 컨테이너에 NVIDIA CUDA 툴킷을 설치합니다. CUDA의 각 버전에는 최소 버전 이상의 GPU 드라이버가 필요합니다. CUDA 버전에 필요한 최소 GPU 드라이버 버전을 확인하려면 CUDA Toolkit and Compatible Driver Versions를 참조하세요. 사용 중인 Container-Optimized OS 버전에 사용 중인 CUDA 버전에 올바른 GPU 드라이버 버전이 포함되었는지 확인합니다.

드라이버 설치

셸 명령어, 시작 스크립트 또는 cloud-init를 사용하여 GPU를 설치할 수 있습니다. 세 가지 메서드 모두 sudo cos-extensions install gpu 명령어를 사용하여 Container-Optimized OS LTS 버전용 기본 GPU 드라이버를 설치합니다.

Shell

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

sudo cos-extensions install gpu

시작 스크립트

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

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

#! /bin/bash

sudo 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에 포함된 기본 드라이버가 CUDA 툴킷 또는 GPU 모델의 최소 드라이버 요구사항을 충족하지 않습니다. 특정 유형의 GPU에 대한 버전 요구 사항은 필수 NVIDIA 드라이버 버전을 참조하세요.

특정 GPU 드라이버 버전을 설치하려면 다음 명령어를 실행합니다.

sudo cos-extensions install gpu -- -version=DRIVER_VERSION

DRIVER_VERSION을 다음 옵션 중 하나로 바꿉니다.

  • default: Container-Optimized OS 출시 버전으로 지정된 기본 드라이버를 설치합니다. 이 버전은 버그 수정 및 보안 업데이트를 받습니다.
  • latest: Container-Optimized OS 출시 버전에서 사용 가능한 최신 드라이버를 설치합니다. 이로 인해 COS 출시 버전 전반에서의 잠재적인 주 버전 업데이트로 인해 호환성이 변경될 수 있습니다.
  • 정식 버전: 드라이버 변경에 민감한 워크로드의 특정 버전으로 고정하기 위해 사용합니다. 예를 들어 버전 535.183.01을 지정합니다.
  • NVIDIA 드라이버 브랜치: 특정 NVIDIA 브랜치 내에 안정적인 최신 드라이버를 설치하여 해당 브랜치 내의 보안 업데이트 및 버그 수정을 최신 상태로 유지합니다. 예를 들어 브랜치 R535를 지정합니다. 이 옵션은 cos-gpu-installer:v2.2.1부터 사용할 수 있습니다.

이러한 각 옵션에 사용 가능한 버전을 보려면 GPU 드라이버 버전 식별 명령어를 실행합니다.

설치 확인

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

# Make the driver installation path executable by re-mounting 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를 사용하도록 컨테이너 구성

GPU 드라이버가 설치된 후 GPU를 사용하도록 컨테이너를 구성할 수 있습니다. 다음 예시에서는 /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를 통해 컨테이너를 실행하여 드라이버 설치와 컨테이너 간의 종속 항목을 지정할 수 있습니다. 자세한 내용은 엔드 투 엔드: 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

NVIDIA CUDA-X 라이브러리 정보

CUDA®는 GPU를 위한 NVIDIA의 병렬 컴퓨팅 플랫폼이자 프로그래밍 모델입니다. CUDA 애플리케이션을 사용하려면 사용 중인 이미지에 라이브러리가 있어야 합니다. 다음 중 하나를 수행하여 NVIDIA CUDA-X 라이브러리를 추가할 수 있습니다.

  • NVIDIA CUDA-X 라이브러리가 사전 설치된 이미지를 사용합니다. 예를 들어 Google의 Deep Learning Containers를 사용할 수 있습니다. 이 컨테이너는 주요 데이터 과학 프레임워크, NVIDIA CUDA-X 라이브러리, 도구를 사전 설치합니다. 또는 NVIDIA의 CUDA 이미지를 사용할 수 있으며 여기에는 NVIDIA CUDA-X 라이브러리만 포함됩니다.

  • 자체 이미지를 빌드하고 사용합니다. 이 경우에는 NVIDIA CUDA-X 라이브러리가 포함된 /usr/local/cuda-XX.X/lib64와 NVIDIA 기기 드라이버가 포함된 /usr/local/nvidia/lib64LD_LIBRARY_PATH 환경 변수에 포함합니다. /usr/local/cuda-XX.X/lib64의 경우 디렉터리 이름은 사용한 이미지 버전에 따라 다릅니다. 예를 들어 Docker 컨테이너의 NVIDIA CUDA-X 라이브러리와 디버그 유틸리티는 각각 /usr/local/cuda-11.0/lib64/usr/local/nvidia/bin에 있을 수 있습니다.

보안

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

제한사항

Container-Optimized OS 버전 제한사항

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

VM 인스턴스 제한사항

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

할당량 및 가용성

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

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

gcloud compute accelerator-types list

가격 책정

GPU 가격 책정 정보는 Compute Engine 가격 책정 페이지를 참조하세요.

지원 용이성

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

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

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

다음 단계