Memecahkan masalah tugas TPU Dataflow

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:

  1. 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
    
  2. 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 ]
    
  3. 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"'
    
  4. Hubungkan ke VM yang dibuat oleh node pool GKE menggunakan SSH:

    gcloud compute ssh --zone "us-west1-c" "VM_NAME" --project PROJECT_ID
    
  5. 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
    
  6. Kemudian, mulai container dari image yang Anda gunakan.

    docker run --privileged --network=host -it --rm --entrypoint=/bin/bash IMAGE_NAME
    
  7. 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')
    
  8. 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.

  1. 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'"
    
  2. Setelah terhubung ke VM dengan TPU menggunakan SSH, mulai container dari image yang Anda gunakan. Untuk contoh, lihat Men-debug dengan VM mandiri.

  3. 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 dan launcher. 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.