Memecahkan masalah tugas GPU Dataflow

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

  1. Ikuti alur kerja di Praktik terbaik untuk menggunakan GPU Dataflow untuk memastikan pipeline Anda dikonfigurasi dengan benar.
  2. Pastikan tugas Dataflow Anda menggunakan GPU. Lihat Memverifikasi tugas Dataflow di "Menjalankan pipeline dengan GPU".
  3. Debug tugas Anda, baik dengan VM mandiri maupun menggunakan Dataflow.
  4. Jika masalah berlanjut, ikuti langkah pemecahan masalah lainnya di halaman ini.

Men-debug tugas

Jika memungkinkan, debug tugas Anda dengan VM mandiri, karena proses debug dengan VM mandiri biasanya lebih cepat. Namun, jika kebijakan organisasi mencegah Anda melakukan proses debug dengan VM mandiri, Anda dapat melakukan proses debug menggunakan Dataflow.

Men-debug dengan VM mandiri

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

Anda dapat men-debug penampung kustom di VM mandiri dengan GPU dengan membuat VM Compute Engine yang menjalankan GPU di OS yang Dioptimalkan untuk Container, menginstal driver, dan memulai penampung sebagai berikut.

  1. Buat 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 Anda.

  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 kode 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.

Men-debug menggunakan Dataflow

Jika batasan organisasi mencegah Anda melakukan proses debug di VM mandiri, Anda dapat melakukan proses debug menggunakan Dataflow.

Sederhanakan pipeline Anda sehingga yang dilakukan hanyalah mendeteksi apakah GPU ada, lalu jalankan pipeline di Dataflow. Contoh berikut menunjukkan seperti apa kode untuk pipeline ini:

def check_if_gpus_present(element):
  import torch
  import tensorflow as tf

  tensorflow_detects_gpus = tf.config.list_physical_devices("GPU")
  torch_detects_gpus = torch.cuda.is_available()
  if tensorflow_detects_gpus and torch_detects_gpus:
    return element

  if tensorflow_detects_gpus:
    raise Exception('PyTorch failed to detect GPUs with your setup')
  if torch_detects_gpus:
    raise Exception('Tensorflow failed to detect GPUs with your setup')
  raise Exception('Both Tensorflow and PyTorch failed to detect GPUs with your setup')

with beam.Pipeline() as p:
  _ = (p | beam.Create([1,2,3]) # Create a PCollection of the prompts.
         | beam.Map(check_if_gpus_present)
  )

Jika pipeline berhasil, kode Anda dapat mengakses GPU. Untuk mengidentifikasi kode masalah, masukkan contoh yang lebih besar secara bertahap ke dalam kode pipeline, dengan menjalankan pipeline setelah setiap perubahan.

Jika pipeline Anda gagal mendeteksi GPU, ikuti langkah-langkah di bagian Tidak ada penggunaan GPU dalam dokumen ini.

Pekerja tidak dimulai

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

Jika Anda adalah pengguna Python, pastikan kondisi berikut terpenuhi:

  • Versi minor penafsir Python dalam image container Anda adalah versi yang sama dengan yang Anda gunakan 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 yang lebih lama, pip harus dapat diakses pada gambar di /usr/local/bin/pip.

Sebaiknya kurangi penyesuaian ke konfigurasi kerja minimum saat pertama kali menggunakan image kustom. Gunakan contoh image penampung kustom yang diberikan dalam contoh di halaman ini. Pastikan Anda dapat menjalankan pipeline Dataflow yang sederhana dengan image penampung ini tanpa meminta GPU. Kemudian, lakukan iterasi pada solusi.

Pastikan pekerja memiliki ruang disk yang memadai untuk mendownload image penampung Anda. Sesuaikan ukuran disk jika perlu. Gambar besar memerlukan waktu lebih lama untuk didownload, sehingga meningkatkan waktu startup pekerja.

Tugas langsung gagal saat dimulai

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

  • Jangan tentukan zona pekerja sehingga Dataflow memilih zona yang optimal untuk Anda.

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

Tugas gagal saat runtime

Jika tugas gagal saat runtime, periksa error kehabisan memori (OOM) di mesin pekerja dan di GPU. Error OOM GPU dapat muncul sebagai error cudaErrorMemoryAllocation out of memory dalam log pekerja. Jika Anda 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 tugas Anda tampaknya tidak menggunakan GPU, ikuti langkah-langkah di bagian Men-debug tugas dalam dokumen ini untuk memverifikasi apakah GPU tersedia dengan image Docker Anda.

Jika GPU tersedia tetapi tidak digunakan, masalahnya kemungkinan ada pada kode pipeline. Untuk men-debug kode pipeline, mulailah dengan pipeline sederhana yang berhasil menggunakan GPU, lalu tambahkan kode secara bertahap ke pipeline, dengan menguji pipeline dengan setiap penambahan baru. Untuk informasi selengkapnya, lihat bagian Men-debug di Dataflow dalam dokumen ini.

Jika pipeline Anda gagal mendeteksi GPU, verifikasi hal berikut:

  • Library NVIDIA yang diinstal dalam image container cocok dengan persyaratan kode pengguna pipeline dan library 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. Untuk memverifikasi konfigurasi image, jalankan pipeline sederhana yang hanya memeriksa apakah GPU tersedia dan dapat diakses oleh pekerja.

Memecahkan masalah TensorFlow

Jika PyTorch mendeteksi GPU di pipeline Anda, tetapi TensorFlow tidak, coba langkah-langkah pemecahan masalah berikut:

  • Pastikan Anda memiliki kombinasi TensorFlow, versi cuDNN, dan versi CUDA Toolkit yang kompatibel. Untuk mengetahui informasi selengkapnya, lihat Konfigurasi build yang diuji dalam dokumentasi TensorFlow.
  • Jika memungkinkan, upgrade ke versi TensorFlow dan CUDA terbaru yang kompatibel.
  • Tinjau masalah umum untuk TensorFlow dan CUDA guna memverifikasi apakah masalah umum menyebabkan masalah dalam pipeline Anda. Misalnya, masalah umum berikut dapat mencegah TensorFlow mendeteksi GPU: TF 2.17.0 RC0 Gagal berfungsi dengan GPU.

Langkah selanjutnya