Dataflow GPU 작업 권장사항

이 페이지에서는 GPU를 사용하여 파이프라인을 빌드하기 위한 권장사항을 설명합니다.

Dataflow 작업에서 GPU를 사용 설정하는 방법에 대한 정보 및 예시는 GPU를 사용하여 파이프라인 실행GPU로 Landsat 위성 이미지 처리를 참조하세요.

Dataflow에서 GPU를 사용하기 위한 기본 요건

  • Dataflow 작업에 GPU를 사용하려면 Runner v2를 사용해야 합니다.
  • Dataflow는 Docker 컨테이너 내부의 작업자 VM에서 사용자 코드를 실행합니다. 이러한 작업자 VM은 Container-Optimized OS를 실행합니다. Dataflow 작업에 GPU를 사용하려면 다음 기본 요건이 필요합니다.
  • GPU 컨테이너가 일반적으로 크기 때문에 디스크 공간 부족을 방지하기 위해 기본 부팅 디스크 크기를 50GB 이상으로 늘립니다.

고려사항

테스트 및 프로덕션 환경을 모두 설계할 때는 다음 요소를 고려하세요.

로컬 개발

NVIDIA GPU와 함께 Apache Beam을 사용하면 전처리 및 추론을 처리하는 대규모 데이터 처리 파이프라인을 만들 수 있습니다. 로컬 개발에 GPU를 사용하는 경우 다음 사항을 고려하세요.

  • 데이터 처리 워크플로에 사용되는 추가 라이브러리를 Dataflow 작업자의 시작 환경 및 실행 환경에 설치해야 하는 경우가 많습니다. 이 구성은 개발 워크플로에 파이프라인 요구사항을 구성하거나 Dataflow에서 커스텀 컨테이너를 사용하는 단계를 추가합니다. 프로덕션 환경을 최대한 비슷하게 모방하는 로컬 개발 환경을 마련하는 것이 좋습니다.

  • 워크플로가 다음 두 기준을 모두 충족하면 파이프라인 요구사항을 구성하기 위해 커스텀 컨테이너를 빌드하거나 개발 워크플로를 변경할 필요가 없습니다.

    • NVIDIA GPU를 암시적으로 사용하는 라이브러리를 사용하고 있습니다.
    • GPU를 지원하는 데 코드를 변경할 필요가 없습니다.
  • 일부 라이브러리는 CPU 사용과 GPU 사용 간에 투명하게 전환되지 않으므로 특정 빌드 및 다른 코드 경로가 필요합니다. 이 시나리오의 코드-실행-코드 개발 수명 주기를 복제하려면 추가 단계가 필요합니다.

  • 로컬 실험을 실행할 때는 Dataflow 작업자 환경을 최대한 비슷하게 복제합니다. 라이브러리에 따라서는 GPU 및 필수 GPU 라이브러리가 설치된 머신이 필요할 수 있습니다. 로컬 환경에서는 이러한 머신 유형을 사용하지 못할 수 있습니다. GPU가 장착된 Google Cloud 가상 머신에서 실행되는 컨테이너를 사용하면 Dataflow Runner 환경을 에뮬레이션할 수 있습니다.

머신 유형 사양

각 GPU 모델의 머신 유형 지원에 대한 자세한 내용은 GPU 플랫폼을 참조하세요. N1 머신 유형에서 지원되는 GPU도 커스텀 N1 머신 유형을 지원합니다.

GPU의 유형과 개수는 작업자에서 사용할 수 있는 vCPU 및 메모리의 양에 대한 상한값 제한을 정의합니다. 해당 제한사항을 찾으려면 가용성을 참조하세요.

더 많은 수의 CPU 또는 메모리를 지정하려면 더 많은 수의 GPU를 지정해야 할 수 있습니다.

자세한 내용은 Compute Engine의 GPU를 참조하세요.

리소스 사용량 최적화

대부분의 파이프라인이 GPU가 필요한 변환으로만 구성되지는 않습니다. 일반적인 파이프라인에는 Apache Beam에서 제공하는 여러 소스 중 하나를 사용하는 수집 단계가 있습니다. 이 단계에 이어 데이터 조작 또는 변환 구성이 실행된 후 GPU 변환으로 피드됩니다.

적합 맞춤 기능은 Apache Beam 리소스 힌트를 사용하여 일괄 파이프라인의 작업자 리소스를 맞춤설정합니다. 적합 맞춤이 사용 설정된 경우 Dataflow는 GPU를 필요로 하는 파이프라인 단계에만 GPU를 사용합니다. 결과적으로 이 기능은 파이프라인 유연성과 기능을 향상시키는 동시에 비용을 절감할 수 있습니다.

자세한 내용은 적합 맞춤을 참조하세요.

GPU 및 작업자 동시 로드

Dataflow Runner v2 아키텍처를 사용하는 Python 파이프라인의 경우 Dataflow는 VM 코어당 하나의 Apache Beam SDK 프로세스를 시작합니다. 각 SDK 프로세스는 자체 Docker 컨테이너에서 실행되며 여러 스레드를 생성한 다음 각 스레드가 수신 데이터를 처리합니다.

GPU는 다중 프로세스 아키텍처를 사용하며 Dataflow 작업자의 GPU는 모든 프로세스와 스레드에 표시됩니다.

공유 GPU에서 다중 SDK 프로세스를 실행하는 경우 NVIDIA Multi-Process Service(MPS)를 사용 설정하여 GPU 효율성 및 사용률을 개선할 수 있습니다. MPS는 특히 GPU 리소스 사용량이 낮은 워크로드에 대해 GPU 파이프라인에 대한 작업자 병렬 처리 및 전반적인 처리량을 향상시켜 줍니다. 자세한 내용은 NVIDIA MPS를 사용하여 공유 GPU 성능 개선을 참조하세요.

GPU 메모리 초과 구독을 방지하기 위해서는 GPU 액세스를 관리해야 할 수 있습니다. TensorFlow를 사용하는 경우 다음과 같은 권장 방법에 따라 GPU 메모리 초과 구독을 방지할 수 있습니다.

  • 작업자 vCPU 수에 관계없이 컨테이너화된 Python 프로세스 하나만 시작하도록 Dataflow 작업자를 구성합니다. 이렇게 구성하려면 작업을 시작할 때 다음 파이프라인 옵션을 사용합니다.

    • --experiments=no_use_multiple_sdk_containers
    • --number_of_worker_harness_threads

    사용할 스레드 수에 대한 자세한 내용은 스레드 수 줄이기를 참조하세요.

  • MPS를 사용 설정합니다.

추론 워크로드

머신러닝(ML) 모델을 사용하여 로컬 및 원격 추론을 수행하는 경우 기본 제공되는 Apache Beam RunInference 변환을 사용합니다. RunInference API는 머신러닝 추론에 최적화된 PTransform입니다. RunInference 변환을 사용하면 파이프라인에서 ML 모델을 사용할 때 효율성이 향상될 수 있습니다.

워크플로

다음 2단계 워크플로는 GPU를 사용하여 파이프라인을 빌드하는 방법을 보여줍니다. 이 흐름은 GPU 및 비GPU 관련 문제를 개별적으로 처리하고 피드백 루프를 단축합니다.

  1. 파이프라인 만들기

    Dataflow에서 실행될 수 있는 파이프라인을 만듭니다. GPU가 필요한 변환을 GPU를 사용하지 않지만 기능적으로 동일한 변환으로 바꿉니다.

    1. 데이터 수집 및 조작과 같이 GPU 사용량을 둘러싼 모든 변환을 만듭니다.

    2. 패스 스루 또는 스키마 변경을 사용하여 GPU 변환을 위한 스텁을 만듭니다.

  2. 로컬에서 테스트

    Dataflow 작업자 실행 환경을 모방한 환경에서 파이프라인 코드의 GPU 일부를 테스트합니다. 다음 단계에서는 이 테스트를 실행하기 위한 방법 중 하나에 대해 설명합니다.

    1. 필요한 모든 라이브러리에서 Docker 이미지를 만듭니다.

    2. GPU 코드 개발을 시작합니다.

    3. Docker 이미지와 함께 Google Cloud 가상 머신을 사용하여 코드 실행 코드 주기를 시작합니다. 라이브러리 비호환성을 방지하려면 Apache Beam 파이프라인과 별도로 로컬 Python 프로세스에서 GPU 코드를 실행합니다. 그런 후 직접 러너에서 전체 파이프라인을 실행하거나 Dataflow에서 파이프라인을 실행합니다.

컨테이너 최적화 운영체제를 실행하는 VM 사용

최소 환경에서는 컨테이너 최적화 가상 머신(VM)을 사용합니다. 자세한 내용은 연결된 GPU가 있는 VM 만들기를 참조하세요.

일반적인 흐름은 다음과 같습니다.

  1. VM을 만듭니다.

  2. VM에 연결하고 다음 명령어를 실행합니다.

    sudo cos-extensions install gpu -- -version latest
    sudo mount --bind /var/lib/nvidia /var/lib/nvidia
    sudo mount -o remount,exec /var/lib/nvidia
    
  3. GPU를 사용할 수 있는지 확인합니다.

    ./nvidia-smi
    
  4. 볼륨으로 마운트된 VM에서 GPU 드라이버로 Docker 컨테이너를 시작합니다. 예를 들면 다음과 같습니다.

    sudo docker run --rm -it --entrypoint /bin/bash
    --volume /var/lib/nvidia/lib64:/usr/local/nvidia/lib64
    --volume /var/lib/nvidia/bin:/usr/local/nvidia/bin
    --privileged gcr.io/bigdatapivot/image_process_example:latest
    

샘플 Dockerfile은 커스텀 컨테이너 이미지 빌드를 참조하세요. 파이프라인에 필요한 모든 종속 항목을 Dockerfile에 추가합니다.

GPU 사용을 위해 사전 구성된 Docker 이미지를 사용하는 방법에 대한 자세한 내용은 GPU 사용을 위해 구성된 기존 이미지 사용을 참조하세요.

컨테이너 최적화 시스템 작업 도구

  • docker-credential-gcr을 기본 Google Container Registry(GCR) 집합의 사용자 인증 정보 도우미로 사용하도록 Docker CLI를 구성하려면 다음을 사용합니다.

    sudo docker-credential-gcr configure-docker
    

    Docker 사용자 인증 정보 설정에 대한 자세한 내용은 docker-credential-gcr을 참조하세요.

  • 파이프라인 코드 등의 파일을 VM에서 또는 VM으로 복사하려면 toolbox를 사용합니다. 이 기법은 커스텀 최적화 이미지를 사용할 때 유용합니다. 예를 들면 다음과 같습니다.

    toolbox /google-cloud-sdk/bin/gsutil cp gs://bucket/gpu/image_process/* /media/root/home/<userid>/opencv/
    

    자세한 내용은 도구 상자를 사용하여 노드 문제 디버깅을 참조하세요.

다음 단계