TPU로 Dataflow 작업을 실행하는 데 문제가 발생하면 다음 문제 해결 단계에 따라 문제를 해결하세요.
컨테이너 이미지 문제 해결
독립형 VM에서 컨테이너 및 TPU 소프트웨어를 디버그하는 것이 유용할 수 있습니다. GKE 노드 풀에서 만든 VM으로 디버깅하거나 실행 중인 Dataflow 작업자 VM에서 디버깅할 수 있습니다.
독립형 VM으로 디버깅
독립형 VM에서 컨테이너를 디버그하려면 로컬 실험에 동일한 TPU VM을 사용하는 GKE 노드 풀을 만들면 됩니다.
예를 들어 us-west1-c
에서 TPU V5 Lite 기기 하나로 GKE 노드 풀을 만드는 방법은 다음과 같습니다.
GKE 클러스터 만들기
gcloud container clusters create TPU_CLUSTER_NAME \ --project PROJECT_ID \ --release-channel=stable \ --scopes=cloud-platform \ --enable-ip-alias \ --location us-west1-c
GKE 노드 풀을 만듭니다.
gcloud container node-pools create TPU_NODE_POOL_NAME \ --project PROJECT_ID \ --location=us-west1-c \ --cluster=TPU_CLUSTER_NAME \ --node-locations=us-west1-c \ --machine-type=ct5lp-hightpu-1t \ --num-nodes=1 \ [ --reservation RESERVATION_NAME \ --reservation-affinity=specific ]
GKE UI 또는 다음 명령어를 사용하여 노드 풀에서 TPU 노드의 VM 이름을 찾습니다.
gcloud compute instances list --filter='metadata.kube-labels:"cloud.google.com/gke-nodepool=TPU_NODEPOOL_NAME"'
SSH를 사용하여 GKE 노드 풀에서 만든 VM에 연결합니다.
gcloud compute ssh --zone "us-west1-c" "VM_NAME" --project PROJECT_ID
SSH를 사용하여 VM에 연결한 후 사용 중인 Artifact Registry에 맞게 Docker를 구성합니다.
docker-credential-gcr configure-docker --registries=us-west1-docker.pkg.dev
그런 다음 사용하는 이미지에서 컨테이너를 시작합니다.
docker run --privileged --network=host -it --rm --entrypoint=/bin/bash IMAGE_NAME
컨테이너 내부에서 TPU에 액세스할 수 있는지 테스트합니다.
예를 들어 PyTorch를 사용하여 TPU를 활용하는 이미지가 있는 경우 Python 인터프리터를 엽니다.
python3
그런 다음 TPU 기기에서 계산을 실행합니다.
import torch import torch_xla.core.xla_model as xm dev = xm.xla_device() t1 = torch.randn(3,3,device=dev) t2 = torch.randn(3,3,device=dev) print(t1 + t2)
샘플 출력:
>>> tensor([[ 0.3355, -1.4628, -3.2610], >>> [-1.4656, 0.3196, -2.8766], >>> [ 0.8667, -1.5060, 0.7125]], device='xla:0')
계산이 실패하면 이미지가 올바르게 구성되지 않았을 수 있습니다.
예를 들어 이미지 Dockerfile에서 필수 환경 변수를 설정해야 할 수 있습니다. 확인하려면 다음과 같이 환경 변수를 수동으로 설정한 후 계산을 다시 시도하세요.
export TPU_SKIP_MDS_QUERY=1 # Don't query metadata export TPU_HOST_BOUNDS=1,1,1 # There's only one host export TPU_CHIPS_PER_HOST_BOUNDS=1,1,1 # 1 chips per host export TPU_WORKER_HOSTNAMES=localhost export TPU_WORKER_ID=0 # Always 0 for single-host TPUs export TPU_ACCELERATOR_TYPE=v5litepod-1 # Since we use v5e 1x1 accelerator.
PyTorch 또는 LibTPU 종속 항목이 누락된 경우 다음 명령어를 사용하여 설치한 후 계산을 다시 시도할 수 있습니다.
# Install PyTorch with TPU support pip install torch torch_xla[tpu] torchvision -f https://storage.googleapis.com/libtpu-releases/index.html
Dataflow VM을 사용하여 디버그
또는 작업이 실행되는 동안 SSH를 사용하여 Dataflow 작업자 VM 인스턴스에 연결할 수 있습니다. 파이프라인이 완료되면 Dataflow 작업자 VM이 종료되므로 장시간 대기하는 계산을 실행하여 런타임을 인위적으로 늘려야 할 수 있습니다.
TPU 기기는 여러 프로세스 간에 공유할 수 없으므로 TPU에서 계산을 실행하지 않는 파이프라인을 실행해야 할 수 있습니다.
Google Cloud 콘솔 검색창에서 Dataflow 작업 ID를 검색하거나 다음
gcloud
명령어를 사용하여 실행 중인 TPU 작업의 VM을 찾습니다.gcloud compute instances list --project PROJECT_ID --filter "STATUS='RUNNING' AND description ~ 'Created for Dataflow job: JOB_ID'"
SSH를 사용하여 TPU가 있는 VM에 연결한 후 사용하는 이미지에서 컨테이너를 시작합니다. 예를 보려면 독립형 VM으로 디버깅을 참고하세요.
컨테이너 내에서 TPU 설정을 재구성하고 설정을 테스트하는 데 필요한 라이브러리를 설치합니다. 예를 보려면 독립형 VM으로 디버깅을 참고하세요.
작업자가 시작되지 않음
문제 해결을 시작하기 전에 다음 파이프라인 옵션이 올바르게 설정되어 있는지 확인하세요.
--dataflow_service_option=worker_accelerator
옵션--worker_zone
옵션--machine_type
옵션
콘솔 로그에 작업자가 시작되는 것으로 표시되지만 다음과 유사한 메시지와 함께 작업이 실패하는지 확인합니다.
Workflow failed. Causes: The Dataflow job appears to be stuck because no worker
activity has been seen in the last 25m.
이러한 문제의 원인은 용량 또는 작업자 시작 문제와 관련이 있을 수 있습니다.
용량: 주문형 TPU 용량 또는 소진된 예약을 사용하는 경우 용량이 확보될 때까지 새 파이프라인이 시작되지 않을 수 있습니다. 예약을 사용하는 경우Google Cloud 콘솔의 컴퓨팅 예약 페이지 또는 다음 명령어를 사용하여 남은 용량을 확인합니다.
gcloud compute reservations describe RESERVATION_NAME --zone ZONE
작업에서 작업자 VM을 시작했는지 확인합니다. 작업에서 작업자를 시작하면 일반적으로
worker
,worker_startup
,kubelet
등의 로거가 출력을 제공합니다. 또한 Google Cloud 콘솔의 작업 측정항목 페이지에서 현재 작업자 수가 0보다 커야 합니다.작업자 시작:
job-message
및launcher
로그를 확인합니다. 파이프라인에서 작업자를 시작하지만 부팅할 수 없는 경우 커스텀 컨테이너에 오류가 있을 수 있습니다.디스크 공간: 작업에 사용할 수 있는 디스크 공간이 충분한지 확인합니다. 디스크 공간을 늘리려면
--disk_size_gb
옵션을 사용합니다.
오류와 함께 작업이 실패함
작업이 오류와 함께 실패하는 경우 다음 문제 해결 조언을 따르세요.
작업자 풀 시작 실패
다음 오류가 표시되면 파이프라인에 --worker_zone
가 지정되어 있고 영역이 예약 영역과 일치하는지 확인합니다.
JOB_MESSAGE_ERROR: Startup of the worker pool in zone ZONE failed to bring up any of the desired 1 workers. [...] INVALID_FIELD_VALUE: Instance 'INSTANCE_NAME' creation failed: Invalid value for field 'resource.reservationAffinity': '{ "consumeReservationType": "SPECIFIC_ALLOCATION", "key": "compute.googleapis.com/RESERVATION_NAME...'. Specified reservations [RESERVATION_NAME] do not exist.
관리형 인스턴스 그룹은 Cloud TPU를 지원하지 않습니다.
다음 오류가 표시되면 계정팀에 문의하여 프로젝트가 TPU를 사용하도록 등록되었는지 확인하거나 Google 문제 추적기를 사용하여 버그를 신고하세요.
apache_beam.runners.dataflow.dataflow_runner.DataflowRuntimeException: Dataflow pipeline failed. State: FAILED, Error: Workflow failed. Causes: One or more operations had an error [...]: [INVALID_FIELD_VALUE] 'Invalid value for field 'resource.instanceTemplate': Managed Instance Groups do not support Cloud TPUs. '.
필드 값이 잘못됨
다음 오류가 표시되면 파이프라인 호출이 worker_accelerator
Dataflow 서비스 옵션을 설정하는지 확인합니다.
JOB_MESSAGE_ERROR: Workflow failed. Causes: One or more operations had an error: 'operation-[...]': [INVALID_FIELD_VALUE] 'Invalid value for field 'resource.instanceTemplate': 'projects/[...]-harness'. Regional Managed Instance Groups do not support Cloud TPUs.'
기기 또는 리소스 사용 중
다음 오류가 표시되면 파이프라인을 처리하는 Dataflow 작업자가 동시에 TPU에 액세스하는 프로세스를 두 개 이상 실행하고 있는 것일 수 있습니다. 이 기능은 지원되지 않습니다. 자세한 내용은 TPU 및 작업자 동시 로드를 참고하세요.
RuntimeError: TPU initialization failed: open(/dev/vfio/0): Device or resource busy: Device or resource busy; Couldn't open iommu group /dev/vfio/0
VM에서 파이프라인을 디버깅하는 동안 위의 오류가 표시되면 다음 명령어를 사용하여 TPU를 차단하는 프로세스를 검사하고 종료할 수 있습니다.
apt update ; apt install lsof
lsof -w /dev/vfio/0
kill -9 PROCESS_ID # to terminate the process.
게스트 가속기가 있는 인스턴스는 라이브 마이그레이션을 지원하지 않습니다.
다음 오류가 표시되면 파이프라인이 가속기가 있는 명시적으로 설정된 머신 유형으로 실행되었지만 가속기 구성을 올바르게 지정하지 않은 것일 수 있습니다. 파이프라인 호출이 worker_accelerator
Dataflow 서비스 옵션을 설정하는지 확인하고 옵션 이름에 오타가 없는지 확인합니다.
JOB_MESSAGE_ERROR: Startup of the worker pool in zone ZONE failed to bring up any of the desired 1 workers. [...] UNSUPPORTED_OPERATION: Instance INSTANCE_ID creation failed: Instances with guest accelerators do not support live migration.
워크플로가 서비스에 의해 자동으로 거부됨
필수 파이프라인 옵션 중 일부가 누락되었거나 잘못된 경우 다음 오류가 표시될 수도 있습니다.
The workflow was automatically rejected by the service. The requested accelerator type tpu-v5-lite-podslice;topology:1x1 requires setting the worker machine type to ct5lp-hightpu-1t. Learn more at: https://cloud.google.com/dataflow/docs/guides/configure-worker-vm
작업자의 업데이트를 기다리는 동안 타임아웃됨
vCPU가 많은 TPU VM에서 파이프라인을 실행하고 기본 작업자 스레드 수를 줄이지 않으면 작업에 다음과 같은 오류가 발생할 수 있습니다.
Workflow failed. Causes WORK_ITEM failed. The job failed because a work item has failed 4 times. Root cause: Timed out waiting for an update from the worker.
이 오류를 방지하려면 스레드 수를 줄이세요. 예를 들어 다음과 같이 설정할 수 있습니다.
--number_of_worker_harness_threads=50
TPU 사용량 없음
파이프라인이 성공적으로 실행되지만 TPU 기기가 사용되지 않거나 액세스할 수 없는 경우 JAX 또는 PyTorch와 같은 사용 중인 프레임워크가 연결된 기기에 액세스할 수 있는지 확인합니다. 단일 VM에서 컨테이너 이미지를 문제 해결하려면 독립형 VM으로 디버깅을 참고하세요.