GPU를 사용하여 개발

이 페이지에서는 GPU를 사용하여 파이프라인을 빌드하기 위한 개발자 워크플로의 예시를 설명합니다.

Dataflow에서 GPU를 사용하는 방법에 대한 상세 정보는 GPU에 대한 Dataflow 지원을 참조하세요. Dataflow 작업에서 GPU를 사용 설정하는 방법에 대한 정보 및 예시는 GPU 사용GPU로 Landsat 위성 이미지 처리를 참조하세요.

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

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

  • NVIDIA GPU를 암시적으로 사용하는 라이브러리의 경우 GPU를 지원하기 위해 코드를 변경할 필요가 없으면 파이프라인 요구사항을 구성하거나 커스텀 컨테이너를 빌드하기 위해 개발 워크플로를 변경하지 않아도 됩니다.

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

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

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

다음 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에 연결하고 다음 명령어를 실행합니다.

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

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

    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를 구성하려면 다음을 사용합니다.

    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/
    

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

다음 단계