GPU로 Dataflow 작업을 실행하는 데 문제가 발생하면 다음 단계를 수행합니다.
- Dataflow GPU 작업 권장사항의 워크플로를 따라 파이프라인이 올바르게 구성되었는지 확인합니다.
- Dataflow 작업에서 GPU를 사용하고 있는지 확인합니다. 'GPU로 파이프라인 실행'의 Dataflow 작업 확인을 참조하세요.
- 독립형 VM으로 디버깅
- 문제가 지속되면 이 페이지의 나머지 문제 해결 단계를 수행합니다.
독립형 VM으로 디버깅
적합한 컨테이너 이미지를 설계하고 이를 반복하는 동안, 독립형 VM에서 컨테이너 이미지를 시험해 보면 피드백 루프를 더 빠르게 줄일 수 있습니다.
Container-Optimized OS에서 GPU를 실행하는 Compute Engine VM을 만들고, 드라이버를 설치하고, 다음과 같이 컨테이너를 시작하여 독립형 VM에서 GPU로 커스텀 컨테이너를 디버깅할 수 있습니다.
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
ssh
를 사용하여 VM에 연결합니다.gcloud compute ssh INSTANCE_NAME --project "PROJECT"
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
커스텀 컨테이너를 시작합니다.
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 경로로 바꿉니다.
컨테이너에 설치된 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를 사용할 수 있고 작업자가 액세스할 수 있는지 확인하는 간단한 파이프라인을 실행하는 것이 좋습니다.