Jika Anda mengalami masalah saat menjalankan tugas Dataflow dengan GPU, ikuti langkah-langkah berikut:
- Ikuti alur kerja di Praktik terbaik untuk menggunakan GPU Dataflow untuk memastikan pipeline Anda dikonfigurasi dengan benar.
- Pastikan tugas Dataflow Anda menggunakan GPU. Lihat Memverifikasi tugas Dataflow di "Menjalankan pipeline dengan GPU".
- Debug tugas Anda, baik dengan VM mandiri maupun menggunakan Dataflow.
- 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.
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
Gunakan
ssh
untuk terhubung ke VM.gcloud compute ssh INSTANCE_NAME --project "PROJECT"
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
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.
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 melibatkanapache_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
- Memulai: Menjalankan GPU di Container-Optimized OS.
- Toolbox Container-Optimized OS.
- Cakupan akses akun layanan.