Jika Anda mengalami masalah saat menjalankan tugas Dataflow dengan TPU, gunakan langkah-langkah pemecahan masalah berikut untuk menyelesaikan masalah Anda.
Memecahkan masalah image container Anda
Anda dapat men-debug software container dan TPU di VM mandiri. Anda dapat melakukan proses debug dengan VM yang dibuat oleh kumpulan node GKE, atau Anda dapat melakukan proses debug di VM pekerja Dataflow yang sedang berjalan.
Melakukan debug dengan VM mandiri
Untuk men-debug penampung di VM mandiri, Anda dapat membuat node pool GKE yang menggunakan TPU VM yang sama untuk eksperimen lokal.
Misalnya, membuat node pool GKE dengan satu perangkat TPU V5 Lite di us-west1-c
akan terlihat seperti berikut:
Membuat cluster GKE.
gcloud container clusters create TPU_CLUSTER_NAME \ --project PROJECT_ID \ --release-channel=stable \ --scopes=cloud-platform \ --enable-ip-alias \ --location us-west1-c
Buat node pool 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 ]
Temukan nama VM node TPU di node pool di UI GKE atau dengan perintah berikut.
gcloud compute instances list --filter='metadata.kube-labels:"cloud.google.com/gke-nodepool=TPU_NODEPOOL_NAME"'
Hubungkan ke VM yang dibuat oleh node pool GKE menggunakan SSH:
gcloud compute ssh --zone "us-west1-c" "VM_NAME" --project PROJECT_ID
Setelah terhubung ke VM menggunakan SSH, konfigurasi Docker untuk Artifact Registry yang Anda gunakan.
docker-credential-gcr configure-docker --registries=us-west1-docker.pkg.dev
Kemudian, mulai container dari image yang Anda gunakan.
docker run --privileged --network=host -it --rm --entrypoint=/bin/bash IMAGE_NAME
Di dalam penampung, uji apakah TPU dapat diakses.
Misalnya, jika Anda memiliki image yang menggunakan PyTorch untuk memanfaatkan TPU, buka interpreter Python:
python3
Kemudian, lakukan komputasi pada perangkat 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)
Contoh output:
>>> tensor([[ 0.3355, -1.4628, -3.2610], >>> [-1.4656, 0.3196, -2.8766], >>> [ 0.8667, -1.5060, 0.7125]], device='xla:0')
Jika komputasi gagal, gambar Anda mungkin tidak dikonfigurasi dengan benar.
Misalnya, Anda mungkin perlu menyetel variabel lingkungan yang diperlukan di Dockerfile image. Untuk mengonfirmasi, coba lagi komputasi setelah menetapkan variabel lingkungan secara manual sebagai berikut:
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.
Jika dependensi PyTorch atau LibTPU tidak ada, Anda dapat mencoba ulang komputasi setelah menginstalnya menggunakan perintah berikut:
# Install PyTorch with TPU support pip install torch torch_xla[tpu] torchvision -f https://storage.googleapis.com/libtpu-releases/index.html
Men-debug menggunakan VM Dataflow
Sebagai alternatif, Anda dapat terhubung ke instance VM pekerja Dataflow menggunakan SSH saat tugas sedang berjalan. Karena VM worker Dataflow dimatikan setelah pipeline selesai, Anda mungkin perlu meningkatkan runtime secara buatan dengan melakukan komputasi yang menunggu dalam jangka waktu yang lama.
Karena perangkat TPU tidak dapat dibagikan di antara beberapa proses, Anda mungkin perlu menjalankan pipeline yang tidak melakukan komputasi apa pun di TPU.
Temukan VM untuk tugas TPU yang sedang berjalan dengan menelusuri ID tugas Dataflow di kolom penelusuran konsol Google Cloud atau dengan menggunakan perintah
gcloud
berikut:gcloud compute instances list --project PROJECT_ID --filter "STATUS='RUNNING' AND description ~ 'Created for Dataflow job: JOB_ID'"
Setelah terhubung ke VM dengan TPU menggunakan SSH, mulai container dari image yang Anda gunakan. Untuk contoh, lihat Men-debug dengan VM mandiri.
Di dalam penampung, konfigurasi ulang setelan TPU dan instal library yang diperlukan untuk menguji penyiapan Anda. Sebagai contoh, lihat Men-debug dengan VM mandiri.
Pekerja tidak memulai
Sebelum memecahkan masalah, pastikan opsi pipeline berikut disetel dengan benar:
- opsi
--dataflow_service_option=worker_accelerator
- opsi
--worker_zone
- opsi
--machine_type
Periksa apakah log konsol menunjukkan bahwa pekerja sedang memulai, tetapi tugas gagal dengan pesan yang mirip dengan berikut ini:
Workflow failed. Causes: The Dataflow job appears to be stuck because no worker
activity has been seen in the last 25m.
Penyebab masalah ini mungkin terkait dengan masalah kapasitas atau masalah startup pekerja.
Kapasitas: Jika Anda menggunakan kapasitas TPU sesuai permintaan, atau reservasi yang sudah habis, pipeline baru mungkin tidak dimulai hingga kapasitas tersedia. Jika Anda menggunakan reservasi, periksa kapasitas yang tersisa di halaman Compute Reservations di konsolGoogle Cloud atau dengan perintah berikut:
gcloud compute reservations describe RESERVATION_NAME --zone ZONE
Periksa apakah tugas Anda telah memulai VM pekerja. Saat tugas Anda memulai pekerja, logger seperti
worker
,worker_startup
,kubelet
, dan lainnya umumnya memberikan output. Selain itu, di halaman Job metrics di konsol Google Cloud , jumlah pekerja saat ini harus lebih besar dari nol.Startup worker: Periksa log
job-message
danlauncher
. Jika pipeline Anda memulai pekerja, tetapi mereka tidak dapat melakukan booting, Anda mungkin mengalami error dalam container kustom.Ruang disk: Pastikan ruang disk yang tersedia cukup untuk tugas Anda. Untuk menambah ruang disk, gunakan opsi
--disk_size_gb
.
Tugas gagal dengan error
Gunakan saran pemecahan masalah berikut jika tugas Anda gagal karena error.
Startup kumpulan pekerja gagal
Jika Anda melihat error berikut, pastikan pipeline Anda menentukan
--worker_zone
dan zona cocok dengan zona untuk reservasi Anda.
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.
Grup instance terkelola tidak mendukung Cloud TPU
Jika Anda melihat error berikut, hubungi tim akun Anda untuk memverifikasi apakah project Anda telah didaftarkan untuk menggunakan TPU, atau laporkan bug menggunakan Issue Tracker 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. '.
Nilai tidak valid untuk kolom
Jika Anda melihat error berikut, pastikan pemanggilan pipeline Anda menetapkan opsi layanan Dataflow worker_accelerator
.
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.'
Perangkat atau resource sibuk
Jika Anda melihat error berikut, berarti worker Dataflow yang memproses pipeline Anda kemungkinan menjalankan lebih dari satu proses yang mengakses TPU secara bersamaan. Fitur ini tidak didukung. Untuk mengetahui informasi selengkapnya, lihat TPU dan paralelisme pekerja.
RuntimeError: TPU initialization failed: open(/dev/vfio/0): Device or resource busy: Device or resource busy; Couldn't open iommu group /dev/vfio/0
Jika Anda melihat error di atas saat men-debug pipeline di VM, Anda dapat memeriksa dan menghentikan proses yang menahan TPU dengan menggunakan perintah berikut:
apt update ; apt install lsof
lsof -w /dev/vfio/0
kill -9 PROCESS_ID # to terminate the process.
Instance dengan akselerator tamu tidak mendukung migrasi langsung
Jika Anda melihat error berikut, kemungkinan pipeline diluncurkan dengan jenis mesin yang ditetapkan secara eksplisit yang memiliki akselerator, tetapi tidak menentukan konfigurasi akselerator dengan benar. Pastikan pemanggilan pipeline Anda menetapkan opsi layanan Dataflow worker_accelerator
, dan pastikan nama opsi tidak berisi salah ketik.
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.
Alur kerja otomatis ditolak oleh layanan
Error berikut juga dapat muncul jika beberapa opsi pipeline yang diperlukan tidak ada atau salah:
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
Batas waktu menunggu update dari pekerja habis
Jika Anda meluncurkan pipeline di VM TPU dengan banyak vCPU dan tidak mengurangi jumlah thread pekerja default, tugas mungkin mengalami error seperti berikut:
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.
Untuk menghindari error ini, kurangi jumlah thread. Misalnya, Anda dapat menetapkan:
--number_of_worker_harness_threads=50
.
Tidak ada penggunaan TPU
Jika pipeline Anda berhasil berjalan, tetapi perangkat TPU tidak digunakan atau tidak dapat diakses, verifikasi bahwa framework yang Anda gunakan, seperti JAX atau PyTorch, dapat mengakses perangkat yang terpasang. Untuk memecahkan masalah image container Anda di VM tunggal, lihat Men-debug dengan VM mandiri.