Dataflow GPU 작업 문제 해결

GPU로 Dataflow 작업을 실행하는 데 문제가 발생하면 다음 단계를 수행합니다.

  1. Dataflow GPU 작업 권장사항의 워크플로를 따라 파이프라인이 올바르게 구성되었는지 확인합니다.
  2. Dataflow 작업에서 GPU를 사용하고 있는지 확인합니다. 'GPU로 파이프라인 실행'의 Dataflow 작업 확인을 참조하세요.
  3. 독립형 VM으로 디버깅
  4. 문제가 지속되면 이 페이지의 나머지 문제 해결 단계를 수행합니다.

독립형 VM으로 디버깅

적합한 컨테이너 이미지를 설계하고 이를 반복하는 동안, 독립형 VM에서 컨테이너 이미지를 시험해 보면 피드백 루프를 더 빠르게 줄일 수 있습니다.

Container-Optimized OS에서 GPU를 실행하는 Compute Engine VM을 만들고, 드라이버를 설치하고, 다음과 같이 컨테이너를 시작하여 독립형 VM에서 GPU로 커스텀 컨테이너를 디버깅할 수 있습니다.

  1. VM 인스턴스 만듭니다.

    gcloud compute instances create INSTANCE_NAME \
      --project "PROJECT" \
      --image-family cos-stable \
      --image-project=cos-cloud  \
      --zone=us-central1-f \
      --accelerator type=nvidia-tesla-t4,count=1 \
      --maintenance-policy TERMINATE \
      --restart-on-failure  \
      --boot-disk-size=200G \
      --scopes=cloud-platform
    
  2. ssh를 사용하여 VM에 연결합니다.

    gcloud compute ssh INSTANCE_NAME --project "PROJECT"
    
  3. GPU 드라이버를 설치합니다. ssh를 사용하여 VM에 연결한 후 VM에서 다음 명령어를 실행합니다.

    # Run these commands on the virtual machine
    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
    
  4. 커스텀 컨테이너를 시작합니다.

    Apache Beam SDK 컨테이너는 /opt/apache/beam/boot 진입점을 사용합니다. 디버깅을 위해 다른 진입점을 사용하여 컨테이너를 수동으로 시작할 수 있습니다.

    docker-credential-gcr configure-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 \
      IMAGE
    

    IMAGE를 Docker 이미지의 Artifact Registry 경로로 바꿉니다.

  5. 컨테이너에 설치된 GPU 라이브러리가 GPU 기기에 액세스할 수 있는지 확인합니다.

    TensorFlow를 사용하는 경우 다음을 사용하여 Python 인터프리터에서 사용 가능한 기기를 출력할 수 있습니다.

    >>> import tensorflow as tf
    >>> print(tf.config.list_physical_devices("GPU"))
    

    PyTorch를 사용하는 경우 다음을 사용하여 Python 인터프리터에 사용 가능한 기기를 조사할 수 있습니다.

    >>> import torch
    >>> print(torch.cuda.is_available())
    >>> print(torch.cuda.device_count())
    >>> print(torch.cuda.get_device_name(0))
    

파이프라인을 반복 실행하려면 Direct Runner에서 파이프라인을 실행합니다. 또한 이 환경으로부터 Dataflow Runner에서 파이프라인을 실행할 수도 있습니다.

작업자가 시작되지 않음

작업이 중단되어 Dataflow 작업자가 데이터 처리를 시작하지 않으면 Dataflow에서 커스텀 컨테이너 사용과 관련된 문제일 수 있습니다. 자세한 내용은 커스텀 컨테이너 문제 해결 가이드를 참조하세요.

Python 사용자는 다음 조건이 충족되는지 확인합니다.

  • 컨테이너 이미지의 Python 인터프리터 부 버전은 파이프라인을 시작할 때 사용하는 것과 동일한 버전이어야 합니다. 불일치가 있으면 apache_beam/internal/pickler.py와 관련된 스택 추적에서 SystemError: unknown opcode와 같은 오류가 표시될 수 있습니다.
  • Apache Beam SDK 2.29.0 이하를 사용하는 경우 /usr/local/bin/pip의 이미지에서 pip에 액세스할 수 있어야 합니다.

커스텀 이미지를 처음 사용하는 경우 맞춤설정을 최소의 작업 구성으로 줄이는 것이 좋습니다. 이 페이지의 예시에 제공된 샘플 커스텀 컨테이너 이미지를 사용합니다. GPU를 요청하지 않고 이 컨테이너 이미지로 간단한 Dataflow 파이프라인을 실행할 수 있는지 확인합니다. 그런 다음 솔루션을 반복합니다.

작업자에 컨테이너 이미지를 다운로드할 디스크 공간이 충분한지 확인합니다. 필요한 경우 디스크 크기를 조정합니다. 대용량 이미지는 다운로드하는 데 시간이 오래 걸리므로 작업자 시작 시간이 늘어납니다.

시작할 때 작업이 즉시 실패함

ZONE_RESOURCE_POOL_EXHAUSTED 또는 ZONE_RESOURCE_POOL_EXHAUSTED_WITH_DETAILS 오류가 발생하면 다음 단계를 수행할 수 있습니다.

  • Dataflow가 최적의 영역을 선택하도록 작업자 영역을 지정하지 않습니다.

  • 다른 영역에서 또는 다른 가속기 유형으로 파이프라인을 시작합니다.

런타임 시 작업 실패

런타임에 작업이 실패하면 작업자 머신 및 GPU에 메모리 부족(OOM) 오류가 있는지 확인합니다. GPU OOM 오류는 작업자 로그에서 cudaErrorMemoryAllocation out of memory 오류로 나타날 수 있습니다. TensorFlow를 사용하는 경우 하나의 GPU 기기에 액세스할 때 하나의 TensorFlow 프로세스만 사용하는지 확인합니다. 자세한 내용은 GPU 및 작업자 동시 로드를 참조하세요.

GPU 사용 없음

파이프라인이 성공적으로 실행되지만 GPU가 사용되지 않는 경우 다음을 확인합니다.

  • 컨테이너 이미지에 설치된 NVIDIA 라이브러리는 파이프라인 사용자 코드 및 여기에 사용되는 라이브러리의 요구사항과 일치해야 합니다.
  • 컨테이너 이미지에 설치된 NVIDIA 라이브러리는 공유 라이브러리로 액세스할 수 있어야 합니다.

기기를 사용할 수 없다면 호환되지 않는 소프트웨어 구성을 사용하고 있는 것일 수 있습니다. 예를 들어 TensorFlow를 사용하는 경우 TensorFlow, cuDNN 버전, CUDA Toolkit 버전의 호환 가능한 조합이 있는지 확인합니다.

이미지 구성을 확인하려면 GPU를 사용할 수 있고 작업자가 액세스할 수 있는지 확인하는 간단한 파이프라인을 실행하는 것이 좋습니다.

다음 단계