클라우드의 학습 모델에 GPU 사용

그래픽 처리 장치(GPU)는 많은 딥 러닝 모델의 학습 프로세스 속도를 크게 높일 수 있습니다. 이미지 분류, 동영상 분석, 자연어 처리와 같은 작업용 학습 모델에는 컴퓨팅 집약적인 행렬 곱셈 등 GPU의 대규모 병렬 아키텍처의 이점을 누릴 수 있는 작업이 포함되어 있습니다.

대규모 데이터세트의 컴퓨팅 집약적인 작업을 포함하는 딥 러닝 모델 학습을 단일 프로세서에서 실행하면 며칠이 걸릴 수 있습니다. 그러나 이러한 작업을 GPU 하나 이상에 오프로드하도록 프로그램을 설계하면 학습 시간을 며칠이 아닌 몇 시간으로 줄일 수 있습니다.

시작하기 전에

AI Platform Training을 사용하면 GPU 지원 머신에서 TensorFlow 학습 애플리케이션을 실행할 수 있습니다. GPU 사용에 관한 TensorFlow 가이드학습 코드를 조정하여 GPU 활용에 대한 이 문서의 섹션을 읽고 애플리케이션에서 가용 GPU를 사용하도록 합니다.

학습용 커스텀 컨테이너를 사용하는 경우 TensorFlow 이외의 머신러닝 프레임워크에서 GPU를 사용할 수도 있습니다.

일부 모델은 GPU를 실행하여 얻는 이점이 없습니다. GPU는 많은 수학 연산이 있는 크고 복잡한 모델에 사용하는 것이 좋습니다. 그래도 학습을 통해 소규모 데이터 샘플을 실행하여 GPU 지원의 이점을 테스트해야 합니다.

GPU 지원 머신 요청

클라우드에서 GPU를 사용하려면 다음 방법 중 하나로 학습 작업을 구성하여 GPU 지원 머신에 액세스합니다.

  • BASIC_GPU 확장 등급을 사용합니다.
  • Compute Engine 머신 유형을 사용하고 GPU를 연결합니다.
  • GPU를 지원하는 기존 머신 유형을 사용합니다.

기본 GPU 지원 머신

AI Platform Training의 사용 방법을 알아보거나 GPU 지원 머신을 실험하는 경우 확장 등급을 BASIC_GPU로 설정하여 하나의 GPU가 포함된 단일 작업자 인스턴스를 가져올 수 있습니다.

GPU가 연결된 Compute Engine 머신 유형

Compute Engine 머신 유형으로 학습 작업을 구성하는 경우, 커스텀 GPU 수를 연결하여 작업 속도를 향상시킬 수 있습니다.

  • 확장 등급을 CUSTOM으로 설정합니다.
  • 유효한 Compute Engine 머신 유형을 사용할 작업의 일부인 마스터 작업자 및 기타 태스크 유형(작업자, 매개변수 서버, 평가자)을 구성합니다.
  • 가속하려는 가상 머신(VM) 인스턴스에 따라 원하는 GPU 유형 및 개수로 acceleratorConfig 필드masterConfig, workerConfig, parameterServerConfig 또는 evaluatorConfig에 추가합니다. 사용 가능한 GPU 유형은 다음과 같습니다.
    • NVIDIA_TESLA_A100
    • NVIDIA_TESLA_P4
    • NVIDIA_TESLA_P100
    • NVIDIA_TESLA_T4
    • NVIDIA_TESLA_V100

유효한 acceleratorConfig를 만들려면 다음과 같은 몇 가지 제한사항을 고려해야 합니다.

  1. 특정 개수의 GPU만 구성에서 사용할 수 있습니다. 예를 들어 NVIDIA Tesla T4s 2개 또는 4개를 연결할 수 있지만 3개는 연결할 수 없습니다. 각 유형의 GPU별로 유효한 개수를 확인하려면 아래 호환성 표를 참조하세요.

  2. 각각의 GPU 구성이 GPU를 연결하는 머신 유형에 충분한 가상 CPU와 메모리를 제공하는지 확인해야 합니다. 예를 들어 작업자에 n1-standard-32를 사용하면 각 작업자는 가상 CPU 32개와 메모리 120GB를 갖게 됩니다. 각 NVIDIA Tesla V100은 최대 12개의 가상 CPU와 76GB의 메모리를 제공할 수 있으므로, 요구사항을 지원하려면 각 n1-standard-32 작업자에 최소 4개를 연결해야 합니다. (2개의 GPU는 부족한 리소스를 제공하며 3개의 GPU를 지정할 수 없습니다.)

    이러한 호환성을 확인하려면 AI Platform Training의 머신 유형 목록컴퓨팅 워크로드 관련 GPU 비교를 검토하거나 아래 호환성 표를 참조하세요.

    특정 경우에는 AI Platform Training의 GPU 리소스에 다음 제한사항이 추가되니 유의하세요.

    • 4개의 NVIDIA Tesla P100 GPU가 있는 구성은 모든 리전 및 영역에 가상 CPU 최대 64개와 메모리 최대 208GB까지만 지원합니다.
  3. GPU 구성을 지원하는 리전에 학습 작업을 제출해야 합니다. 아래에서 리전 지원에 대해 알아보세요.

다음 표에서는 각 Compute Engine 머신 유형에 연결 가능한 유형별 가속기 수를 빠르게 확인할 수 있습니다.

각 머신 유형에 유효한 GPU 수
머신 유형 NVIDIA A100 NVIDIA Tesla K80 NVIDIA Tesla P4 NVIDIA Tesla P100 NVIDIA Tesla T4 NVIDIA Tesla V100
n1-standard-4 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-standard-8 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-standard-16 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 2, 4, 8
n1-standard-32 4, 8 2, 4 2, 4 2, 4 4, 8
n1-standard-64 4 4 8
n1-standard-96 4 4 8
n1-highmem-2 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-highmem-4 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-highmem-8 1, 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 1, 2, 4, 8
n1-highmem-16 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 2, 4, 8
n1-highmem-32 4, 8 2, 4 2, 4 2, 4 4, 8
n1-highmem-64 4 4 8
n1-highmem-96 4 4 8
n1-highcpu-16 2, 4, 8 1, 2, 4 1, 2, 4 1, 2, 4 2, 4, 8
n1-highcpu-32 4, 8 2, 4 2, 4 2, 4 4, 8
n1-highcpu-64 8 4 4 4 8
n1-highcpu-96 4 4 8
a2-highgpu-1g 1
a2-highgpu-2g 2
a2-highgpu-4g 4
a2-highgpu-8g 8
a2-megagpu-16g 16

다음은 GPU가 연결된 Compute Engine 머신 유형을 사용하여 작업을 제출하는 예시입니다.

GPU가 포함된 머신 유형

또는 acceleratorConfig를 사용하는 대신 GPU가 포함된 기존 머신 유형을 선택할 수 있습니다.

  • 확장 등급을 CUSTOM으로 설정합니다.
  • GPU 수 및 태스크에 필요한 가속기 유형에 따라 아래 GPU 지원 머신 유형 중 하나를 사용하도록 가속화하려는 마스터 작업자 및 기타 태스크 유형(작업자, 매개변수 서버 또는 평가자)을 구성합니다.
    • standard_gpu: 단일 GPU
    • complex_model_m_gpu: GPU 4개
    • complex_model_l_gpu: GPU 8개
    • standard_p100: 단일 NVIDIA Tesla P100 GPU
    • complex_model_m_p100: NVIDIA Tesla P100 GPU 4개
    • standard_v100: 단일 NVIDIA Tesla V100 GPU
    • large_model_v100: 단일 NVIDIA Tesla V100 GPU
    • complex_model_m_v100: NVIDIA Tesla V100 GPU 4개
    • complex_model_l_v100: NVIDIA Tesla V100 GPU 8개

다음gcloud 명령어를 사용하여 GPU 지원 머신 유형으로 작업을 제출하는 예시입니다.

자세한 내용은 AI Platform Training의 머신 유형을 참조하세요.

GPU를 지원하는 리전

GPU를 지원하는 리전에서 작업을 실행해야 합니다. 다음 리전은 현재 GPU에 대한 액세스 권한을 제공합니다.

  • us-west1
  • us-west2
  • us-central1
  • us-east1
  • us-east4
  • northamerica-northeast1
  • southamerica-east1
  • europe-west1
  • europe-west2
  • europe-west4
  • asia-south1
  • asia-southeast1
  • asia-east1
  • asia-northeast1
  • asia-northeast3
  • australia-southeast1

또한 이들 리전 중 일부에서는 특정 유형의 GPU에만 액세스할 수 있습니다. 모델 학습 및 온라인/일괄 예측을 비롯하여 AI Platform Training 서비스에 사용할 수 있는 리전을 충분히 이해하려면 리전 가이드를 참조하세요.

학습 작업에서 여러 유형의 GPU를 사용하는 경우, 해당 리전의 단일 영역에서 모든 GPU를 사용할 수 있어야 합니다. 예를 들어 NVIDIA Tesla T4 GPU를 사용하는 마스터 작업자, NVIDIA Tesla K80 GPU를 사용하는 매개변수 서버, NVIDIA Tesla P100 GPU를 사용하는 작업자로 us-central1에서 작업을 실행할 수 없습니다. 이러한 GPU는 모두 us-central1에서 학습 작업에 사용될 수 있지만 세 가지 유형의 GPU를 모두 제공하는 단일 영역이 해당 리전에 없습니다. GPU를 사용할 수 있는 영역에 대한 자세한 내용은 컴퓨팅 워크로드 관련 GPU 비교를 참조하세요.

학습 작업 제출

gcloud ai-platform jobs submit training 명령어를 사용하여 학습 작업을 제출할 수 있습니다.

  1. 원하는 GPU 옵션을 설명하는 config.yaml 파일을 정의합니다. YAML 파일 구조는 작업 리소스를 나타냅니다. 다음은 config.yaml 파일의 두 가지 예시입니다.

    첫 번째 예시에서는 Compute Engine 머신 유형(일부는 GPU 포함)을 사용하는 학습 작업의 구성 파일을 보여줍니다.

    trainingInput:
      scaleTier: CUSTOM
      # Configure a master worker with 4 T4 GPUs
      masterType: n1-highcpu-16
      masterConfig:
        acceleratorConfig:
          count: 4
          type: NVIDIA_TESLA_T4
      # Configure 9 workers, each with 4 T4 GPUs
      workerCount: 9
      workerType: n1-highcpu-16
      workerConfig:
        acceleratorConfig:
          count: 4
          type: NVIDIA_TESLA_T4
      # Configure 3 parameter servers with no GPUs
      parameterServerCount: 3
      parameterServerType: n1-highmem-8
    

    다음 예시에서는 위와 유사한 구성을 갖는 작업의 구성 파일을 보여줍니다. 하지만 이 구성에서는 acceleratorConfig를 사용하여 GPU를 연결하는 대신 GPU가 포함된 기존 머신 유형을 사용합니다.

    trainingInput:
      scaleTier: CUSTOM
      # Configure a master worker with 4 GPUs
      masterType: complex_model_m_gpu
      # Configure 9 workers, each with 4 GPUs
      workerCount: 9
      workerType: complex_model_m_gpu
      # Configure 3 parameter servers with no GPUs
      parameterServerCount: 3
      parameterServerType: large_model
    
  2. gcloud 명령어를 사용하여 config.yaml 파일을 가리키는 --config 인수를 포함하여 작업을 제출합니다. 다음 예시에서는 일부 인수 값에 대해 $ 기호와 대문자로 표시된 환경 변수를 설정했다고 가정합니다.

    gcloud ai-platform jobs submit training $JOB_NAME \
            --package-path $APP_PACKAGE_PATH \
            --module-name $MAIN_APP_MODULE \
            --job-dir $JOB_DIR \
            --region us-central1 \
            --config config.yaml \
            -- \
            --user_arg_1 value_1 \
             ...
            --user_arg_n value_n
    

또는 구성 파일 대신 명령줄 플래그를 사용하여 클러스터 구성 세부정보를 지정할 수 있습니다. 이러한 플래그를 사용하는 방법에 대해 자세히 알아보세요.

다음 예시는 첫 번째 예시와 동일한 구성(GPU가 연결된 Compute Engine 머신 유형 사용)을 사용하지만 config.yaml 파일을 사용하지 않고 작업을 제출하는 방법을 보여줍니다.

gcloud ai-platform jobs submit training $JOB_NAME \
        --package-path $APP_PACKAGE_PATH \
        --module-name $MAIN_APP_MODULE \
        --job-dir $JOB_DIR \
        --region us-central1 \
        --scale-tier custom \
        --master-machine-type n1-highcpu-16 \
        --master-accelerator count=4,type=nvidia-tesla-t4 \
        --worker-count 9 \
        --worker-machine-type n1-highcpu-16 \
        --worker-accelerator count=4,type=nvidia-tesla-t4 \
        --parameter-server-count 3 \
        --parameter-server-machine-type n1-highmem-8 \
        -- \
        --user_arg_1 value_1 \
         ...
        --user_arg_n value_n

참고:

  • 구성 파일(config.yaml)과 명령줄 플래그 모두에 옵션을 지정하면 명령줄에 있는 값이 구성 파일에 있는 값보다 우선 적용됩니다.
  • -- 플래그는 애플리케이션에 전달하려는 gcloud 관련 플래그의 끝과 USER_ARGS의 시작을 표시합니다.
  • --module-name, --runtime-version, --job-dir 등의 AI Platform Training 관련 플래그는 빈 -- 플래그보다 앞에 와야 합니다. AI Platform Training 서비스가 이러한 플래그를 해석합니다.
  • --job-dir 플래그가 지정된 경우 AI Platform Training이 --job-dir을 사용하여 경로를 검증하므로 이 플래그가 빈 -- 플래그보다 앞에 와야 합니다.
  • --job-dir 플래그가 지정된 경우 애플리케이션에서도 이 플래그를 처리해야 합니다. 또한 플래그가 빈 --보다 앞에 오더라도, --job-dir이 애플리케이션에 명령줄 플래그로 전달됩니다.
  • USER_ARGS는 원하는 만큼 정의할 수 있습니다. AI Platform Training은 --user_first_arg, --user_second_arg 등을 애플리케이션으로 전달합니다.

작업 제출 옵션에 대한 자세한 내용은 학습 작업 시작 가이드를 참조하세요.

GPU 사용을 위한 학습 코드 조정

TensorFlow 학습 작업에 Keras 또는 에스티메이터를 사용하고 GPU가 1개 포함된 단일 VM으로 학습하려는 경우 GPU 코드를 맞춤설정할 필요가 없습니다.

학습 클러스터에 여러 GPU가 포함되어 있으면 학습 코드에서 tf.distribute.Strategy API를 사용합니다.

  • 여러 GPU가 있는 단일 VM에서 학습을 수행하기 위해서는 TensorFlow 2.1 이상에서 Keras에 대해 완전히 지원되는 MirroredStrategy를 사용하는 것이 좋습니다.
  • GPU가 있는 여러 VM에서 학습에 대한 자세한 내용은 배포 학습을 위한 권장사항을 참조하세요.

TensorFlow가 특정 작업을 GPU에 할당하는 방법을 맞춤설정하려면 TensorFlow의 GPU 사용 가이드를 참조하세요. 여기에서는 AI Platform Training이 각 VM에서 TF_CONFIG 환경 변수를 설정하는 방법을 알아보는 것도 도움이 될 수 있습니다.

GPU 기기 문자열

standard_gpu 머신의 단일 GPU는 "/gpu:0"으로 식별됩니다. 다중 GPU가 있는 머신은 "/gpu:0", "/gpu:1" 순의 식별자를 사용합니다. 예를 들어 complex_model_m_gpu 머신은 "/gpu:0"부터 "/gpu:3"으로 식별되는 4개의 GPU가 있습니다.

GPU 지원 머신의 Python 패키지

GPU 지원 머신에는 GPU를 지원하는 TensorFlow Python 패키지인 tensorflow-gpu가 사전 설치됩니다. 사전 설치된 모든 패키지 목록은 런타임 버전 목록을 참조하세요.

유지보수 이벤트

AI Platform Training 작업을 실행하는 GPU 지원 VM은 간혹 Compute Engine 호스트 유지보수 대상이 됩니다. VM은 이러한 유지보수 이벤트 다음에 자동으로 다시 시작되도록 구성되지만, 이러한 종료 후에 작업의 복원력이 우수하도록 하려면 몇 가지 추가 작업을 수행해야 할 수 있습니다. 일반적으로 --job-dir 인수를 통해 gcloud ai-platform jobs submit training에 지정하는 Cloud Storage 경로와 함께 모델 체크포인트를 정기적으로 저장하고 체크포인트가 이미 존재하는 경우 최신 체크포인트를 복원하도록 학습 애플리케이션을 구성합니다.

TensorFlow 에스티메이터model_dir이 지정되어 있는 한 이 기능을 자동으로 구현합니다. 에스티메이터는 일반적으로 체크포인트를 model_dir에 저장하고, 최신 체크포인트로부터 로드를 시도합니다. 따라서 사용자는 GPU 작업자의 유지보수 이벤트에 신경 쓸 필요가 없습니다.

Keras로 학습하는 경우에는 ModelCheckpoint 콜백을 사용하여 학습 진행 상황을 정기적으로 저장합니다. Keras로 tf.distribute.Strategy를 사용 중이면 VM이 체크포인트를 사용해서 다시 시작으로부터 자동으로 복구됩니다. 그렇지 않으면 학습 코드에 `최근 체크포인트가 존재하는지 확인하고 존재할 경우 체크포인트로부터 복원하는 로직을 추가합니다.

이보다 복잡한 고급 사례는 TensorFlow 체크포인트 가이드를 참조하세요.

다음 단계