GPU 추가 또는 삭제

Compute Engine은 가상 머신 인스턴스에 추가할 수 있는 GPU(그래픽 처리 장치)를 제공합니다. 이 GPU를 사용하면 인스턴스에서 머신러닝 및 데이터 처리와 같은 특정 워크로드를 가속화할 수 있습니다.

GPU로 수행할 수 있는 작업과 사용 가능한 GPU 하드웨어 유형에 대한 자세한 내용은 Compute Engine의 GPU를 참조하세요.

시작하기 전에

GPU를 사용하는 인스턴스 만들기

GPU를 사용하는 인스턴스를 만들기 전에 먼저 인스턴스에 사용할 부팅 디스크 이미지를 선택하고 적절한 GPU 드라이버가 설치되어 있는지 확인합니다.

머신러닝에 GPU를 사용하는 경우에는 인스턴스에 딥 러닝 VM 이미지를 사용할 수 있습니다. 딥 러닝 VM 이미지에는 GPU 드라이버가 사전 설치되어 있으며 TensorFlow 및 PyTorch와 같은 패키지가 포함됩니다. 일반적인 GPU 워크로드에도 딥 러닝 VM 이미지를 사용할 수 있습니다. 사용 가능한 이미지와 이미지에 설치된 패키지에 대한 자세한 내용은 딥 러닝 VM 문서를 참조하세요.

공개 이미지커스텀 이미지를 사용할 수도 있지만 일부 이미지에서는 고유 드라이버 또는 이 가이드에서 설명하지 않는 설치 프로세스가 필요할 수 있습니다. 사용할 이미지에 적합한 드라이버를 확인해야 합니다.

드라이버를 설치하는 단계는 GPU 드라이버 설치를 참조하세요.

GPU가 한 개 이상 포함된 인스턴스를 만들 경우에는 호스트 유지보수 시 인스턴스가 종료되도록 설정해야 합니다. GPU를 사용하는 인스턴스는 특정 하드웨어 기기에 할당되기 때문에 실시간 이전할 수 없습니다. 자세한 내용은 GPU 제한사항을 참조하세요.

Google Cloud Platform Console, gcloud 명령줄 도구 또는 API로 GPU가 한 개 이상 포함된 인스턴스를 만듭니다.

Console

  1. VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스 페이지로 이동

  2. 인스턴스 만들기를 클릭합니다.
  3. GPU를 사용할 수 있는 영역을 선택합니다. 사용할 수 있는 영역 목록은 GPU 가용 영역을 참조하세요.
  4. 머신 구성 섹션에서 이 인스턴스에 사용할 머신 유형을 선택합니다. 필요할 경우 커스텀 머신 유형 설정을 지정할 수도 있습니다.
  5. 머신 구성 섹션에서 CPU 플랫폼 및 GPU를 클릭하여 고급 머신 유형 옵션과 사용 가능한 GPU를 확인합니다.
  6. GPU를 클릭하여 사용 가능한 GPU의 목록을 표시합니다.
  7. GPU 유형과 필요한 GPU 수를 지정합니다.
  8. 필요한 경우 원하는 GPU 설정을 수용할 수 있도록 머신 유형을 조정합니다. 이 설정을 그대로 두면 머신 유형 맞춤설정 화면을 열기 전에 지정해 둔 사전 정의된 머신 유형이 인스턴스에 사용됩니다.
  9. 부팅 디스크를 구성하려면 부팅 디스크 섹션에서 변경을 클릭합니다.
  10. OS 이미지 탭에서 이미지를 선택합니다.
  11. 선택을 클릭하여 부팅 디스크 옵션을 확인합니다.
  12. 필요에 따라 다른 인스턴스 설정을 구성합니다. 예를 들어 선점 가능성 설정을 변경하여 인스턴스를 선점형 인스턴스로 구성할 수 있습니다. 이를 사용하면 인스턴스 및 연결된 GPU의 비용이 절감됩니다. 자세한 내용은 선점형 인스턴스의 GPU를 참조하세요.
  13. 페이지 하단에 있는 만들기를 클릭하여 인스턴스를 만듭니다.

gcloud

regions describe 명령어를 사용하여 GPU가 포함된 인스턴스를 만들 리전에 GPU 할당량이 충분한지 확인합니다.

gcloud compute regions describe [REGION]

여기서 [REGION]은 GPU 할당량을 확인할 리전입니다.

인스턴스를 만들고 시작하려면 gcloud compute instances create 명령어를 다음 플래그와 함께 사용합니다.

gcloud compute instances create [INSTANCE_NAME] \
    --machine-type [MACHINE_TYPE] --zone [ZONE] \
    --accelerator type=[ACCELERATOR_TYPE],count=[ACCELERATOR_COUNT] \
    --image-family [IMAGE_FAMILY] --image-project [IMAGE_PROJECT] \
    --maintenance-policy TERMINATE --restart-on-failure \
    [--preemptible]

각 항목의 의미는 다음과 같습니다.

  • [INSTANCE_NAME]은 새 인스턴스의 이름입니다.
  • [MACHINE_TYPE]은 인스턴스에 선택한 머신 유형입니다. 원하는 GPU 수를 기준으로 사용 가능한 머신 유형을 확인하려면 Compute Engine의 GPU을 참조하세요.
  • [ZONE]은 이 인스턴스의 영역입니다.
  • [IMAGE_FAMILY]사용 가능한 이미지 계열 중 하나입니다.
  • [ACCELERATOR_COUNT]는 인스턴스에 추가할 GPU 수입니다. 인스턴스의 머신 유형별 GPU 한도 목록은 Compute Engine의 GPU를 참조하세요.
  • [ACCELERATOR_TYPE]은 사용할 GPU 모델입니다. 다음 중 한 가지 값을 사용합니다.

    • NVIDIA® Tesla® T4: nvidia-tesla-t4
    • NVIDIA® Tesla® T4 Virtual Workstation 및 NVIDIA® GRID®: nvidia-tesla-t4-vws
    • NVIDIA® Tesla® P4: nvidia-tesla-p4
    • NVIDIA® Tesla® P4 Virtual Workstation 및 NVIDIA® GRID®: nvidia-tesla-p4-vws
    • NVIDIA® Tesla® P100: nvidia-tesla-p100
    • NVIDIA® Tesla® P100 Virtual Workstation 및 NVIDIA® GRID®: nvidia-tesla-p100-vws
    • NVIDIA® Tesla® V100: nvidia-tesla-v100
    • NVIDIA® Tesla® K80: nvidia-tesla-k80

    사용할 수 있는 GPU 모델 목록은 Compute Engine의 GPU를 참조하세요.

  • [IMAGE_PROJECT]는 이미지 계열이 속한 이미지 프로젝트입니다.

  • --preemptible은 인스턴스를 선점형 인스턴스로 구성하는 선택적 플래그입니다. 이를 사용하면 인스턴스 및 연결된 GPU의 비용이 절감됩니다. 자세한 내용은 선점형 인스턴스의 GPU를 참조하세요.

예를 들어 다음의 gcloud 명령어를 사용하면 NVIDIA Tesla K80 GPU 1개와 vCPU 2개를 사용하는 Ubuntu 16.04 인스턴스를 us-east1-d 영역에서 시작할 수 있습니다.

gcloud compute instances create gpu-instance-1 \
    --machine-type n1-standard-2 --zone us-east1-d \
    --accelerator type=nvidia-tesla-k80,count=1 \
    --image-family ubuntu-1604-lts --image-project ubuntu-os-cloud \
    --maintenance-policy TERMINATE --restart-on-failure

이 예시 명령어는 인스턴스를 시작하지만 CUDA 및 드라이버가 미리 인스턴스에 설치되어 있어야 합니다.

API

인스턴스에 추가할 GPU 유형을 확인합니다. GET 요청을 제출하여 특정 영역에서 프로젝트에 사용할 수 있는 GPU 유형을 나열합니다.

GET https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/acceleratorTypes

각 항목의 의미는 다음과 같습니다.

  • [PROJECT_ID]는 프로젝트 ID입니다.
  • [ZONE]은 사용할 수 있는 GPU 유형을 표시할 영역입니다.

API에서 새 인스턴스를 만드는 POST 요청을 작성합니다. 사용할 GPU 유형을 지정하는 acceleratorType 매개변수와 추가할 GPU 수를 지정하는 acceleratorCount 매개변수를 포함합니다. 또한 onHostMaintenance 매개변수를 TERMINATE로 설정합니다.

POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances?key={YOUR_API_KEY}
{
  "machineType": "https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/machineTypes/n1-highmem-2",
  "disks":
  [
    {
      "type": "PERSISTENT",
      "initializeParams":
      {
        "diskSizeGb": "[DISK_SIZE]",
        "sourceImage": "https://compute.googleapis.com/compute/v1/projects/[IMAGE_PROJECT]/global/images/family/[IMAGE_FAMILY]"
      },
      "boot": true
    }
  ],
  "name": "[INSTANCE_NAME]",
  "networkInterfaces":
  [
    {
      "network": "https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/networks/[NETWORK]"
    }
  ],
  "guestAccelerators":
  [
    {
      "acceleratorCount": [ACCELERATOR_COUNT],
      "acceleratorType": "https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/acceleratorTypes/[ACCELERATOR_TYPE]"
    }
  ],
  "scheduling":
  {
    "onHostMaintenance": "terminate",
    "automaticRestart": true,
    ["preemptible": true]
  },
}

각 항목의 의미는 다음과 같습니다.

  • [INSTANCE_NAME]은 인스턴스 이름입니다.
  • [PROJECT_ID]는 프로젝트 ID입니다.
  • [ZONE]은 이 인스턴스의 영역입니다.
  • [MACHINE_TYPE]은 인스턴스에 선택한 머신 유형입니다. 원하는 GPU 수를 기준으로 사용 가능한 머신 유형을 확인하려면 Compute Engine의 GPU을 참조하세요.
  • [IMAGE_PROJECT]는 이미지가 속한 이미지 프로젝트입니다.
  • [IMAGE_FAMILY]는 인스턴스의 부팅 디스크 이미지입니다. 사용 가능한 공개 이미지 목록에서 이미지 계열을 지정합니다.
  • [DISK_SIZE]는 부팅 디스크의 크기(GB)입니다.
  • [NETWORK]는 이 인스턴스에 사용할 VPC 네트워크입니다. 기본 네트워크를 사용하려면 default를 지정합니다.
  • [ACCELERATOR_COUNT]는 인스턴스에 추가할 GPU 수입니다. 인스턴스의 머신 유형별 GPU 한도 목록은 Compute Engine의 GPU를 참조하세요.
  • [ACCELERATOR_TYPE]은 사용할 GPU 모델입니다. 사용할 수 있는 GPU 모델 목록은 Compute Engine의 GPU를 참조하세요.
  • "preemptible": true는 인스턴스를 선점형 인스턴스로 구성하는 선택적 매개변수입니다. 이를 사용하면 인스턴스 및 연결된 GPU의 비용이 절감됩니다. 자세한 내용은 선점형 인스턴스의 GPU를 참조하세요.

시스템이 기기를 사용할 수 있도록 인스턴스에 GPU 드라이버를 설치합니다.

기존 인스턴스에서 GPU 추가 또는 제거

기존 인스턴스에서 GPU를 추가하거나 분리할 수 있습니다. 하지만 먼저 인스턴스를 중지하고 인스턴스가 라이브 마이그레이션이 아닌 종료되도록 호스트 유지보수 설정을 변경해야 합니다. GPU를 사용하는 인스턴스는 특정 하드웨어 기기에 할당되기 때문에 실시간 이전할 수 없습니다. 자세한 내용은 GPU 제한사항을 참조하세요.

또한 GPU를 추가한 후에는 이 인스턴스에 GPU 드라이버를 설치해야 합니다. 이 인스턴스를 만드는 데 사용한 부팅 디스크 이미지에 따라 필요한 드라이버가 결정됩니다. 인스턴스 영구 부팅 디스크 이미지의 운영체제에 어떤 드라이버가 적합한지 확인해야 합니다. 자세한 내용은 GPU 드라이버 설치를 참조하세요.

Google Cloud Platform Console 또는 API를 사용하여 인스턴스에서 GPU를 추가하거나 삭제할 수 있습니다.

Console

인스턴스를 중지하고 인스턴스 구성을 수정하여 인스턴스에서 GPU를 추가 또는 제거할 수 있습니다.

  1. 인스턴스에서 중요 애플리케이션이 모두 중지됐는지 확인합니다. GPU를 추가하기 전에 반드시 인스턴스를 중지해야 합니다.

  2. VM 인스턴스 페이지로 이동하여 인스턴스 목록을 표시합니다.

    VM 인스턴스 페이지로 이동

  3. 인스턴스 목록에서 GPU를 추가할 인스턴스의 이름을 클릭합니다. 인스턴스 세부정보 페이지가 열립니다.

  4. 인스턴스 세부정보 페이지 상단의 중지를 클릭하여 인스턴스를 중지합니다.

  5. 인스턴스 실행이 중지되면 수정을 클릭하여 인스턴스 속성을 변경합니다.

  6. 인스턴스에 공유 코어 머신 유형이 있으면 vCPU가 한 개 이상 포함되도록 머신 유형을 변경해야 합니다. 공유 코어 머신 유형이 있는 인스턴스에는 가속기를 추가할 수 없습니다.

  7. 머신 구성 섹션에서 CPU 플랫폼 및 GPU를 클릭하여 고급 머신 유형 옵션과 사용 가능한 GPU를 확인합니다.

  8. GPU를 클릭하여 사용 가능한 GPU의 목록을 표시합니다.

  9. 인스턴스에 추가할 GPU 수와 GPU 모델을 선택합니다. GPU 수를 없음으로 설정하면 인스턴스에서 기존 GPU가 제거됩니다.

  10. 인스턴스에 GPU를 추가했으면 호스트 유지보수 설정을 종료로 설정합니다. 인스턴스에서 GPU를 제거한 경우 호스트 유지보수 설정을 VM 인스턴스 마이그레이션으로 되돌릴 수도 있습니다.

  11. 인스턴스 세부정보 페이지 하단의 저장을 클릭하여 변경사항을 적용합니다.

  12. 인스턴스 설정을 저장한 후 인스턴스 세부정보 페이지 상단에 있는 시작을 클릭하여 인스턴스를 다시 시작합니다.

API

API를 통해 인스턴스를 중지하고 인스턴스 구성을 변경하여 인스턴스에서 GPU를 추가하거나 제거할 수 있습니다.

  1. 인스턴스에서 중요 애플리케이션을 모두 중지했는지 확인한 후 이 인스턴스를 GPU 사용이 가능한 호스트 시스템으로 이전할 수 있도록 인스턴스를 중지하는 POST 명령어를 만듭니다.

    POST https://compute.googleapis.com/compute/v1/projects/compute/zones/[ZONE]/instances/[INSTANCE_NAME]/stop
    

    각 항목의 의미는 다음과 같습니다.

    • [INSTANCE_NAME]은 GPU를 추가할 인스턴스의 이름입니다.
    • [ZONE]은 인스턴스가 있는 영역입니다.
  2. 인스턴스에 추가할 GPU 유형을 확인합니다. GET 요청을 제출하여 특정 영역에서 프로젝트에 사용할 수 있는 GPU 유형을 나열합니다.

    GET https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/acceleratorTypes
    

    각 항목의 의미는 다음과 같습니다.

    • [PROJECT_ID]는 프로젝트 ID입니다.
    • [ZONE]은 사용할 수 있는 GPU 유형을 표시할 영역입니다.
  3. 인스턴스에 공유 코어 머신 유형이 있으면 vCPU가 한 개 이상 포함되도록 머신 유형을 변경해야 합니다. 공유 코어 머신 유형이 있는 인스턴스에는 가속기를 추가할 수 없습니다.

  4. 인스턴스가 중지되면 인스턴스에 GPU를 1개 이상 추가하거나 제거하는 POST 요청을 작성합니다.

    POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]/setMachineResources
    
    {
     "guestAccelerators": [
      {
        "acceleratorCount": [ACCELERATOR_COUNT],
        "acceleratorType": "https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/acceleratorTypes/[ACCELERATOR_TYPE]"
      }
     ]
    }
    

    각 항목의 의미는 다음과 같습니다.

    • [INSTANCE_NAME]은 인스턴스 이름입니다.
    • [PROJECT_ID]는 프로젝트 ID입니다.
    • [ZONE]은 이 인스턴스의 영역입니다.
    • [ACCELERATOR_COUNT]는 인스턴스에 배치할 GPU 수입니다. 인스턴스의 머신 유형별 GPU 한도 목록은 Compute Engine의 GPU를 참조하세요.
    • [ACCELERATOR_TYPE]은 사용할 GPU 모델입니다. 사용할 수 있는 GPU 모델 목록은 Compute Engine의 GPU를 참조하세요.
  5. 인스턴스의 예약 옵션을 설정하는 POST 명령어를 만듭니다. 인스턴스에 GPU를 추가하려면 "onHostMaintenance": "TERMINATE"를 지정해야 합니다. 필요에 따라 인스턴스에서 GPU를 삭제하는 경우에는 "onHostMaintenance": "MIGRATE"를 지정하면 됩니다.

    POST https://compute.googleapis.com/compute/v1/projects/compute/zones/[ZONE]/instances/[INSTANCE_NAME]/setScheduling
    
    {
     "onHostMaintenance": "[MAINTENANCE_TYPE]",
     "automaticRestart": true
    }
    

    각 항목의 의미는 다음과 같습니다.

    • [INSTANCE_NAME]은 GPU를 추가할 인스턴스의 이름입니다.
    • [ZONE]은 인스턴스가 있는 영역입니다.
    • [MAINTENANCE_TYPE]은 호스트 유지보수가 필요할 때 인스턴스에서 실행되도록 설정할 작업입니다. 인스턴스에 GPU를 추가하려면 TERMINATE를 지정합니다. 또는 인스턴스에서 GPU를 모두 삭제한 후 호스트 유지보수 이벤트 시 인스턴스에서 마이그레이션이 다시 시작되도록 하려면 "onHostMaintenance": "MIGRATE"를 지정하면 됩니다.
  6. 인스턴스를 시작합니다.

    POST https://compute.googleapis.com/compute/v1/projects/compute/zones/[ZONE]/instances/[INSTANCE_NAME]/start
    

    각 항목의 의미는 다음과 같습니다.

    • [INSTANCE_NAME]은 GPU를 추가할 인스턴스의 이름입니다.
    • [ZONE]은 인스턴스가 있는 영역입니다.

다음으로 시스템이 기기를 사용할 수 있도록 인스턴스에 GPU 드라이버를 설치합니다.

인스턴스 템플릿을 사용하여 GPU 인스턴스 그룹 만들기

인스턴스 템플릿을 사용하여 인스턴스별로 GPU를 추가한 관리형 인스턴스 그룹을 만들 수 있습니다. 관리 인스턴스 그룹은 이 템플릿을 사용하여 동일한 인스턴스를 여러 개 만듭니다. 워크로드에 맞도록 그룹 내 인스턴스 수를 늘릴 수 있습니다.

GPU를 사용하려면 생성된 인스턴스에 CUDA 툴킷과 NVIDIA 드라이버가 설치되어 있어야 하므로 GPU 드라이버 설치 단계의 안내에 따라 드라이버가 이미 설치되어 있는 이미지를 만들어야 합니다.

인스턴스 템플릿을 만드는 단계는 인스턴스 템플릿 만들기를 참조하세요.

Console에서 인스턴스 템플릿을 만들려면 머신 유형을 맞춤설정하고 인스턴스 템플릿에 추가할 GPU 유형과 GPU 수를 선택합니다.

gcloud 명령줄 도구를 사용하는 경우에는 --accelerators 플래그와 --maintenance-policy TERMINATE 플래그를 포함합니다.

다음 예시에서는 vCPU 2개, 250GB 부팅 디스크(드라이버가 설치된 이미지 기반), NVIDIA Tesla K80 GPU를 사용하는 인스턴스 템플릿을 만듭니다.

gcloud beta compute instance-templates create gpu-template \
    --machine-type n1-standard-2 \
    --boot-disk-size 250GB \
    --accelerator type=nvidia-tesla-k80,count=1 \
    --image-family <MY_IMAGE_WITH_DRIVERS> \
    --maintenance-policy TERMINATE --restart-on-failure

템플릿을 만든 후에는 템플릿을 사용하여 인스턴스 그룹을 만듭니다. 인스턴스를 그룹에 추가할 때마다 인스턴스는 인스턴스 템플릿의 설정을 통해 시작됩니다.

리전 관리형 인스턴스 그룹을 만드는 경우에는 원하는 GPU 모델을 명확하게 지원하는 영역을 선택해야 합니다. GPU 모델과 사용할 수 있는 영역의 목록은 Compute Engine의 GPU를 참조하세요. 다음 예시에서는 nvidia-tesla-k80 모델을 지원하는 영역 두 개에 적용되는 리전 관리형 인스턴스 그룹을 만듭니다.

gcloud beta compute instance-groups managed create example-rmig \
    --template gpu-template --base-instance-name example-instances \
    --size 30 --zones us-east1-c,us-east1-d

참고: 현재 영역 선택 기능은 베타 버전이므로 특정 영역을 선택하려면 gcloud beta 구성요소를 사용하세요.

인스턴스 그룹 관리 및 확장에 대한 자세한 내용은 관리형 인스턴스 그룹 만들기를 참조하세요.

GPU 드라이버 설치

GPU 한 개 이상을 포함하는 인스턴스를 만든 후 애플리케이션이 기기에 액세스할 수 있게 하려면 시스템에 기기 드라이버가 있어야 합니다. 이 가이드에서는 공개 이미지를 사용하여 인스턴스에 NVIDIA 독점 드라이버를 설치하는 방법을 보여줍니다.

CUDA의 각 버전에는 최소 버전 이상의 GPU 드라이버가 필요합니다. CUDA 버전에 필요한 최소 드라이버를 확인하려면 CUDA Toolkit and Compatible Driver Versions를 참조하세요.

Compute Engine에서 실행되는 NVIDIA GPU는 다음 드라이버 버전을 사용해야 합니다.

  • Linux 인스턴스:

    • NVIDIA 410.79 이상 드라이버
  • Windows Server 인스턴스:

    • NVIDIA 426.00 이상 드라이버

드라이버 설치 시 대부분의 경우 NVIDIA CUDA 툴킷을 설치하면 드라이버를 구할 수 있습니다.

다음 단계에서는 CUDA 및 NVIDIA® GPU 관련 드라이버를 설치합니다. 애플리케이션 요구사항을 검토하여 가장 적합한 드라이버 버전을 결정합니다. 사용할 소프트웨어에 특정 버전의 CUDA가 필요한 경우에는 필요한 CUDA 버전을 다운로드하도록 명령어를 수정합니다.

CUDA 지원에 대한 자세한 내용과 CUDA 설치를 수정하는 단계는 CUDA 툴킷 문서를 참조하세요.

대부분의 공개 이미지의 경우 이 프로세스를 사용하여 수동으로 인스턴스에 드라이버를 설치할 수 있습니다. 커스텀 이미지의 경우 고유한 환경에서 작동하도록 프로세스를 수정해야 할 수도 있습니다.

설치를 완료하려면 운영체제에 최신 패키지 업데이트가 있어야 합니다.

CentOS/RHEL

  1. 최신 커널 패키지를 설치합니다. 필요한 경우 이 명령어는 시스템도 재부팅합니다.

    sudo yum clean all
    sudo yum install -y kernel | grep -q 'already installed' || sudo reboot
    
  2. 이전 단계에서 시스템을 재부팅한 경우 인스턴스에 다시 연결합니다.

  3. 커널 헤더 및 개발 패키지를 설치합니다.

    sudo yum install -y kernel-devel-$(uname -r) kernel-headers-$(uname -r)
    
  4. CUDA 툴킷의 드라이버 저장소를 선택하고 인스턴스에 추가합니다.

    • CentOS/RHEL 8

      sudo yum install http://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-repo-rhel8-10.1.243-1.x86_64.rpm
      
    • CentOS/RHEL 7

      sudo yum install http://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/cuda-repo-rhel7-10.0.130-1.x86_64.rpm
      
    • CentOS/RHEL 6

      sudo yum install http://developer.download.nvidia.com/compute/cuda/repos/rhel6/x86_64/cuda-repo-rhel6-10.0.130-1.x86_64.rpm
      
  5. epel-release 저장소를 설치합니다. 이 저장소에는 CentOS에 NVIDIA 드라이버를 설치하는 데 필요한 DKMS 패키지가 있습니다.

    • CentOS 6/7/8 및 RHEL 6/7

      sudo yum install epel-release
      
    • RHEL 8만 해당

      sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
      
  6. Yum 캐시를 삭제합니다.

    sudo yum clean all
    
  7. CUDA를 설치합니다. 이 패키지에는 NVIDIA 드라이버가 포함되어 있습니다.

    sudo yum install cuda
    

SLES

  1. 드라이버를 설치할 인스턴스에 연결합니다.

  2. 최신 커널 패키지를 설치합니다. 필요한 경우 이 명령어는 시스템도 재부팅합니다.

    sudo zypper refresh
    sudo zypper up -y kernel-default | grep -q 'already installed' || sudo reboot
    
  3. 이전 단계에서 시스템을 재부팅한 경우 인스턴스에 다시 연결합니다.

  4. CUDA 툴킷의 드라이버 저장소를 선택하고 인스턴스에 추가합니다.

    • SLES 15

      sudo rpm --import https://developer.download.nvidia.com/compute/cuda/repos/sles15/x86_64/7fa2af80.pub
      sudo yum install https://developer.download.nvidia.com/compute/cuda/repos/sles15/x86_64/cuda-repo-sles15-10.0.130-1.x86_64.rpm
      
    • SLES 12(서비스 팩 4 포함)

      sudo rpm --import https://developer.download.nvidia.com/compute/cuda/repos/sles124/x86_64/7fa2af80.pub
      sudo yum install https://developer.download.nvidia.com/compute/cuda/repos/sles124/x86_64/cuda-repo-sles124-10.1.243-1.x86_64.rpm
      
  5. Zypper를 새로 고칩니다.

    sudo zypper refresh
    
  6. CUDA를 설치합니다. 여기에는 NVIDIA 드라이버가 포함되어 있습니다.

    sudo zypper install cuda
    

Ubuntu

  1. 드라이버를 설치할 인스턴스에 연결합니다.

  2. CUDA 툴킷의 드라이버 저장소를 선택하고 인스턴스에 추가합니다.

    • Ubuntu 18.04 LTS

      curl -O http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-repo-ubuntu1804_10.0.130-1_amd64.deb
      sudo dpkg -i cuda-repo-ubuntu1804_10.0.130-1_amd64.deb
      sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
      
    • Ubuntu 16.04 LTS

      curl -O http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_10.0.130-1_amd64.deb
      sudo dpkg -i cuda-repo-ubuntu1604_10.0.130-1_amd64.deb
      sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
      
  3. 패키지 목록을 업데이트합니다.

    sudo apt-get update
    
  4. CUDA를 설치합니다. 여기에는 NVIDIA 드라이버가 포함되어 있습니다.

    sudo apt-get install cuda
    

Windows Server

  1. 드라이버를 설치할 인스턴스에 연결합니다.

  2. R426 브랜치: NVIDIA 426.00 이상의 드라이버가 포함된 .exe 설치 프로그램 파일을 인스턴스에 다운로드합니다. 대부분의 Windows Server 인스턴스에서는 다음 옵션 중 하나를 사용할 수 있습니다.

    예를 들어 Windows Server 2019에서는 관리자 권한으로 PowerShell 터미널을 열고 wget 명령어를 사용하여 필요한 드라이버 설치 프로그램을 다운로드할 수 있습니다.

    PS C:\> wget https://developer.download.nvidia.com/compute/cuda/10.1/Prod/network_installers/cuda_10.1.243_win10_network.exe -O cuda_10.1.243_win10_network.exe
  3. .exe 설치 프로그램을 실행합니다. 예를 들어 관리자 권한으로 PowerShell 터미널을 열고 다음 명령어를 실행할 수 있습니다.

    PS C:\> .\\cuda_10.1.243_win10_network.exe
    

GPU 드라이버 설치 확인

드라이버 설치 단계를 완료한 후에는 드라이버 설치 및 초기화가 올바른지 확인합니다.

Linux

Linux 인스턴스에 연결하고 nvidia-smi 명령어를 사용하여 드라이버가 올바르게 실행되고 있는지 확인합니다.

nvidia-smi

Wed Jan  2 19:51:51 2019
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 410.79       Driver Version: 410.79       CUDA Version: 10.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla P4            Off  | 00000000:00:04.0 Off |                    0 |
| N/A   42C    P8     7W /  75W |     62MiB /  7611MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

Windows Server

Windows Server 인스턴스에 연결하고 nvidia-smi.exe 도구를 사용하여 드라이버가 올바르게 실행되고 있는지 확인합니다.

PS C:\> & 'C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi.exe'

Mon Aug 26 18:09:03 2019
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 426.00      Driver Version: 426.00       CUDA Version: 10.1      |
|-------------------------------+----------------------+----------------------+
| GPU  Name            TCC/WDDM | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla P4            TCC  | 00000000:00:04.0 Off |                    0 |
| N/A   27C    P8     7W /  75W |      0MiB /  7611MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

가상 워크스테이션용 GRID® 드라이버 설치

Compute Engine에서 사용할 수 있는 NVIDIA 드라이버의 전체 목록은 NVIDIA 드라이버 Cloud Storage 버킷 콘텐츠를 참조하세요.

Linux

  1. 다음 명령어를 실행하여 GRID 드라이버를 다운로드합니다.

    curl -O https://storage.googleapis.com/nvidia-drivers-us-public/GRID/GRID7.1/NVIDIA-Linux-x86_64-410.92-grid.run
    
  2. 다음 명령어를 실행하여 설치 프로그램을 시작합니다.

    sudo bash NVIDIA-Linux-x86_64-410.92-grid.run
    
  3. 설치 중에 다음과 같이 옵션을 선택합니다.

    • 32비트 바이너리를 설치할지 묻는 메시지가 표시되면 를 선택합니다.
    • x.org 파일을 수정할지 묻는 메시지가 표시되면 아니요를 선택합니다.

Windows Server

  1. Windows Server 버전에 따라 다음 NVIDIA GRID 드라이버 중 하나를 다운로드합니다.

  2. 설치 프로그램을 실행하고 빠른 설치를 선택합니다.

  3. 설치가 완료되면 VM을 다시 시작합니다. 다시 시작할 때 세션 연결이 끊어집니다.

  4. RDP 또는 PCoIP 클라이언트를 사용하여 인스턴스에 다시 연결합니다.

GRID 드라이버 설치 여부 확인

Linux

다음 명령어를 실행합니다.

nvidia-smi

명령어 결과는 다음과 비슷하게 표시됩니다.

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 410.92                Driver Version: 410.92                     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla P100-PCIE...  On   | 00000000:00:04.0 Off |                    0 |
| N/A   34C    P0    26W / 250W |      0MiB / 16276MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

Windows Server

  1. RDP 또는 PCoIP 클라이언트를 사용하여 Windows 인스턴스에 연결합니다.

  2. 바탕 화면을 마우스 오른쪽 버튼으로 클릭하고 NVIDIA Control Panel을 선택합니다.

  3. NVIDIA Control Panel의 Help(도움말) 메뉴에서 System Information(시스템 정보)을 선택하면 VM이 사용 중인 GPU와 드라이버 버전 정보가 표시됩니다.

GPU 성능 모니터링 및 최적화

GPU 성능 모니터링

리소스 활용도를 높이도록 인스턴스의 GPU 사용률을 추적할 수 있습니다. GPU 사용률을 알면 필요에 따라 리소스를 자동 확장하는 데 사용할 수 있는 관리형 인스턴스 그룹 설정과 같은 태스크를 수행할 수 있습니다.

Stackdriver를 사용하여 GPU 측정항목을 검토하려면 다음 단계를 완료합니다.

  1. 각 VM 인스턴스에서 GPU 측정항목 보고 스크립트를 설정합니다. 이 스크립트는 다음과 같은 태스크를 수행합니다.

    • GPU 측정항목 보고 에이전트를 설치합니다. 이 에이전트는 인스턴스에서 일정한 간격으로 실행하여 GPU 데이터를 수집하고 이 데이터를 Stackdriver에 전송합니다.
    • Stackdriver에 custom/gpu_utilization 측정항목 필드를 만듭니다. 이 필드는 Stackdriver에서 분석할 수 있는 GPU별 데이터를 저장합니다.
  2. Stackdriver에서 로그를 확인합니다.

GPU 측정항목 보고 스크립트 설정

  1. 각 VM 인스턴스에서 다음 요구 사항이 충족되는지 확인합니다.

    • 각 VM 인스턴스에는 GPU가 연결되어 있어야 합니다.
    • 각 VM 인스턴스에는 GPU 드라이버가 설치되어 있어야 합니다.
    • 각 VM 인스턴스에는 pip 유틸리티가 설치되어 있어야 합니다.
  2. 각 VM 인스턴스에서 GPU 측정항목 에이전트를 설치합니다. 측정항목 에이전트를 설치하려면 다음 단계를 완료합니다.

    1. GPU 측정항목 보고 스크립트를 다운로드합니다.

      git clone https://github.com/GoogleCloudPlatform/tensorflow-inference-tensorrt5-t4-gpu.git
      
    2. metrics_reporting 폴더로 전환합니다.

      cd tensorflow-inference-tensorrt5-t4-gpu/metrics_reporting
      
    3. 측정항목 에이전트의 설치 환경을 설정합니다.

      pip install -r ./requirements.txt
      
    4. 측정항목 보고 스크립트를 루트 디렉터리로 옮깁니다.

      sudo cp report_gpu_metrics.py /root/
      
    5. GPU 측정항목 에이전트를 활성화합니다.

      cat <<-EOH > /lib/systemd/system/gpu_utilization_agent.service
      [Unit]
      Description=GPU Utilization Metric Agent
      [Service]
      Type=simple
      PIDFile=/run/gpu_agent.pid
      ExecStart=/bin/bash --login -c '/usr/bin/python /root/report_gpu_metrics.py'
      User=root
      Group=root
      WorkingDirectory=/
      Restart=always
      [Install]
      WantedBy=multi-user.target
      EOH
      
    6. 시스템 데몬을 다시 로드합니다.

      systemctl daemon-reload
      
    7. GPU 모니터링 서비스를 사용 설정합니다.

      systemctl --no-reload --now enable /lib/systemd/system/gpu_utilization_agent.service
      

Stackdriver에서 측정항목 검토

  1. Stackdriver 측정항목 탐색기 페이지로 이동

  2. gpu_utilization을 검색합니다.

    Stackdriver 시작 스크린샷

  3. 다음 결과와 유사한 GPU 사용률이 표시됩니다.

    Stackdriver 실행 스크린샷

  4. (선택 사항) 관리형 인스턴스 그룹을 사용하여 자동 확장을 설정합니다. 시작하려면 TensorFlow 추론 워크로드 가이드의 다중 영역 클러스터 설정 섹션을 참조하세요.

GPU 성능 최적화

자동 부스트를 사용하지 않도록 설정하여 NVIDIA® Tesla® K80 GPU를 사용하는 인스턴스의 성능을 최적화할 수 있습니다. 자동 부스트를 사용하지 않도록 설정하려면 다음 명령어를 실행합니다.

sudo nvidia-smi --auto-boost-default=DISABLED

All done.

호스트 유지보수 이벤트 처리

GPU 인스턴스를 라이브 마이그레이션할 수 없습니다. GPU 인스턴스는 호스트 유지보수 이벤트 시 종료되어야 하며 자동으로 다시 시작될 수 있습니다. 이러한 유지보수 이벤트는 일반적으로 월별로 한 번 발생하지만 필요한 경우 더 자주 발생할 수 있습니다.

유지보수 이벤트 중 워크로드 중단을 최소화하려면 인스턴스의 유지보수 일정을 모니터링하고 시스템 재시작을 통해 워크로드가 전환되도록 준비하면 됩니다.

호스트 유지보수 이벤트에 대한 사전 알림을 받으려면 /computeMetadata/v1/instance/maintenance-event 메타데이터 값을 모니터링합니다. 메타데이터 서버에 보낸 요청이 NONE을 반환하는 경우 이는 인스턴스 종료가 예약되지 않은 것입니다. 예를 들어 인스턴스 내에서 다음 명령어를 실행합니다.

curl http://metadata.google.internal/computeMetadata/v1/instance/maintenance-event -H "Metadata-Flavor: Google"

NONE

메타데이터 서버가 TERMINATE_ON_HOST_MAINTENANCE를 반환하면 인스턴스가 종료되도록 예약된 것입니다. Compute Engine에서는 GPU 인스턴스 종료 1시간 전에 알림을 전송하지만 일반적인 인스턴스의 경우에는 종료 60초 전에 알림을 전송합니다. 유지보수 이벤트 도중에 전환되도록 애플리케이션을 구성합니다. 예를 들어 다음 방법 중 하나를 사용할 수 있습니다.

  • 진행 중인 작업을 Cloud Storage 버킷으로 임시 이전한 후 인스턴스가 다시 시작된 후에 관련 데이터를 검색하도록 앱을 구성합니다.

  • 보조 영구 디스크에 데이터를 씁니다. 인스턴스가 자동으로 다시 시작되면 영구 디스크를 다시 연결할 수 있고 앱이 작업을 다시 시작할 수 있습니다.

이 메타데이터 값의 변경사항에 대한 알림을 폴링 없이 받을 수도 있습니다. 호스트 유지관리 이벤트에 대해 폴링 없이 사전 고지를 받는 방법의 예를 보려면 실시간 이전 고지 받기를 참조하세요.

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

Compute Engine 문서