Memecahkan masalah tugas Dataflow GPU

Jika Anda mengalami masalah saat menjalankan tugas Dataflow dengan GPU, ikuti langkah-langkah berikut:

  1. Ikuti alur kerja di bagian Praktik terbaik untuk menggunakan GPU Dataflow untuk memastikan bahwa pipeline Anda dikonfigurasi dengan benar.
  2. Pastikan tugas Dataflow Anda menggunakan GPU. Lihat Memverifikasi tugas Dataflow di "Menjalankan pipeline dengan GPU".
  3. Lakukan debug dengan VM mandiri.
  4. Jika masalah masih berlanjut, ikuti langkah-langkah pemecahan masalah selanjutnya di halaman ini.

Men-debug dengan VM mandiri

Saat Anda mendesain dan melakukan iterasi pada image container yang sesuai untuk Anda, akan lebih cepat untuk mengurangi feedback loop dengan mencoba image container di VM mandiri.

Anda dapat men-debug container kustom pada VM mandiri menggunakan GPU dengan membuat VM Compute Engine yang menjalankan GPU pada Container-Optimized OS, menginstal driver, dan memulai container Anda sebagai berikut.

  1. Membuat instance 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. Gunakan ssh untuk terhubung ke VM.

    gcloud compute ssh INSTANCE_NAME --project "PROJECT"
    
  3. Instal driver GPU. Setelah terhubung ke VM menggunakan ssh, jalankan perintah berikut di 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. Luncurkan penampung kustom Anda.

    Penampung Apache Beam SDK menggunakan titik entri /opt/apache/beam/boot. Untuk tujuan proses debug, Anda dapat meluncurkan penampung secara manual dengan titik entri yang berbeda:

    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
    

    Ganti IMAGE dengan jalur Artifact Registry untuk image Docker.

  5. Pastikan library GPU yang diinstal di penampung Anda dapat mengakses perangkat GPU.

    Jika menggunakan TensorFlow, Anda dapat mencetak perangkat yang tersedia di penafsir Python dengan hal berikut:

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

    Jika menggunakan PyTorch, Anda dapat memeriksa perangkat yang tersedia di penafsir Python dengan hal berikut:

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

Untuk melakukan iterasi pada pipeline, Anda dapat meluncurkan pipeline di Direct Runner. Anda juga dapat meluncurkan pipeline di Dataflow Runner dari lingkungan ini.

Pekerja tidak memulai

Jika tugas Anda macet dan pekerja Dataflow tidak pernah mulai memproses data, mungkin Anda memiliki masalah terkait penggunaan penampung kustom dengan Dataflow. Untuk mengetahui detail selengkapnya, baca panduan pemecahan masalah penampung kustom.

Jika Anda pengguna Python, pastikan ketentuan berikut terpenuhi:

  • Versi minor penafsir Python di image container Anda sama dengan versi yang digunakan saat meluncurkan pipeline. Jika ada ketidakcocokan, Anda mungkin melihat error seperti SystemError: unknown opcode dengan pelacakan tumpukan yang melibatkan apache_beam/internal/pickler.py.
  • Jika Anda menggunakan Apache Beam SDK 2.29.0 atau versi yang lebih lama, pip harus dapat diakses pada gambar di /usr/local/bin/pip.

Sebaiknya kurangi penyesuaian ke konfigurasi kerja minimal saat pertama kali Anda menggunakan gambar kustom. Gunakan contoh image container kustom yang disediakan dalam contoh di halaman ini. Pastikan Anda dapat menjalankan pipeline Dataflow langsung dengan image container ini tanpa meminta GPU. Kemudian, lakukan iterasi solusi.

Pastikan pekerja memiliki kapasitas disk yang cukup untuk mendownload image container Anda. Sesuaikan ukuran disk jika perlu. Gambar berukuran besar memerlukan waktu lebih lama untuk didownload, sehingga meningkatkan waktu startup pekerja.

Tugas langsung gagal saat startup

Jika mengalami error ZONE_RESOURCE_POOL_EXHAUSTED atau ZONE_RESOURCE_POOL_EXHAUSTED_WITH_DETAILS, Anda dapat melakukan langkah-langkah berikut:

  • Jangan menentukan zona pekerja sehingga Dataflow memilih zona optimal untuk Anda.

  • Luncurkan pipeline di zona berbeda atau dengan jenis akselerator yang berbeda.

Tugas gagal saat runtime

Jika tugas gagal saat runtime, periksa error kehabisan memori (OOM) di mesin pekerja dan GPU. Error OOM GPU dapat muncul sebagai error cudaErrorMemoryAllocation out of memory dalam log pekerja. Jika menggunakan TensorFlow, pastikan Anda hanya menggunakan satu proses TensorFlow untuk mengakses satu perangkat GPU. Untuk informasi selengkapnya, baca GPU dan paralelisme pekerja.

Tidak ada penggunaan GPU

Jika pipeline Anda berhasil berjalan, tetapi GPU tidak digunakan, periksa hal-hal berikut:

  • Library NVIDIA yang diinstal di image container sesuai dengan persyaratan kode pengguna dan library pipeline yang digunakannya.
  • Library NVIDIA yang diinstal dalam image container dapat diakses sebagai library bersama.

Jika perangkat tidak tersedia, Anda mungkin menggunakan konfigurasi software yang tidak kompatibel. Misalnya, jika menggunakan TensorFlow, pastikan Anda memiliki kombinasi yang kompatibel dari TensorFlow, versi cuDNN, dan versi CUDA Toolkit.

Untuk memverifikasi konfigurasi image, pertimbangkan untuk menjalankan pipeline sederhana yang hanya memeriksa apakah GPU tersedia dan dapat diakses oleh pekerja.

Langkah selanjutnya