Jika Anda mengalami masalah saat menjalankan tugas Dataflow dengan GPU, ikuti langkah-langkah berikut:
- Ikuti alur kerja di Praktik terbaik untuk menggunakan GPU Dataflow guna memastikan pipeline Anda dikonfigurasi dengan benar.
- Pastikan tugas Dataflow Anda menggunakan GPU. Lihat Memverifikasi tugas Dataflow Anda di "Menjalankan pipeline dengan GPU."
- Debug tugas Anda, baik dengan VM mandiri maupun menggunakan Dataflow.
- Jika masalah berlanjut, ikuti langkah-langkah pemecahan masalah lainnya di halaman ini.
Men-debug tugas Anda
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.
Melakukan proses debug dengan VM mandiri
Saat Anda mendesain dan melakukan iterasi pada image container yang sesuai untuk Anda, memperpendek loop umpan balik dengan mencoba image container di VM mandiri dapat mempercepat proses.
Anda dapat melakukan proses debug pada container kustom di VM mandiri dengan GPU dengan membuat VM Compute Engine yang menjalankan GPU di Container-Optimized OS, menginstal driver, dan memulai container Anda 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-platformGunakan
sshuntuk 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-smiLuncurkan container kustom Anda.
Container Apache Beam SDK menggunakan titik entri
/opt/apache/beam/boot. Untuk tujuan proses debug, Anda dapat meluncurkan container secara manual dengan titik entri yang berbeda:docker-credential-gcr configure-docker -include-artifact-registry 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 \ IMAGEGanti IMAGE dengan jalur Artifact Registry untuk image Docker Anda.
Pastikan library GPU yang diinstal di container Anda dapat mengakses perangkat GPU.
Jika Anda menggunakan TensorFlow, Anda dapat mencetak perangkat yang tersedia di interpreter Python dengan perintah berikut:
>>> import tensorflow as tf >>> print(tf.config.list_physical_devices("GPU"))Jika Anda menggunakan PyTorch, Anda dapat memeriksa perangkat yang tersedia di interpreter Python dengan perintah 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.
Melakukan proses 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 hanya mendeteksi apakah GPU ada atau tidak, lalu jalankan pipeline di Dataflow. Contoh berikut menunjukkan tampilan 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 Anda berhasil, kode Anda dapat mengakses GPU. Untuk mengidentifikasi kode masalah, masukkan contoh yang semakin besar secara bertahap ke dalam kode pipeline Anda, dan jalankan pipeline setelah setiap perubahan.
Jika pipeline Anda gagal mendeteksi GPU, ikuti langkah-langkah di bagian Tidak ada penggunaan GPU dalam dokumen ini.
Worker tidak dimulai
Jika tugas Anda macet dan worker Dataflow tidak pernah mulai memproses data, kemungkinan Anda mengalami masalah terkait penggunaan container kustom dengan Dataflow. Untuk mengetahui detail selengkapnya, baca panduan pemecahan masalah container kustom.
Jika Anda adalah pengguna Python, pastikan kondisi berikut terpenuhi:
- Versi minor interpreter Python di image container Anda sama dengan versi yang Anda gunakan saat meluncurkan pipeline. Jika ada ketidakcocokan, Anda mungkin melihat error seperti
SystemError: unknown opcodedengan pelacakan tumpukan yang melibatkanapache_beam/internal/pickler.py. - Jika Anda menggunakan Apache Beam SDK 2.29.0 atau yang lebih lama,
pipharus dapat diakses di image di/usr/local/bin/pip.
Sebaiknya kurangi penyesuaian ke konfigurasi kerja minimal saat pertama kali Anda menggunakan image kustom. Gunakan contoh image container kustom yang disediakan dalam contoh di halaman ini. Pastikan Anda dapat menjalankan pipeline Dataflow sederhana dengan image container ini tanpa meminta GPU. Kemudian, lakukan iterasi pada solusi.
Pastikan worker memiliki ruang disk yang cukup untuk mendownload image container Anda. Sesuaikan ukuran disk jika diperlukan. Image besar memerlukan waktu lebih lama untuk didownload, yang akan meningkatkan waktu startup worker.
Tugas langsung gagal saat startup
Jika Anda mengalami error
ZONE_RESOURCE_POOL_EXHAUSTED
atau ZONE_RESOURCE_POOL_EXHAUSTED_WITH_DETAILS, Anda dapat melakukan langkah-langkah berikut:
Jangan tentukan zona worker agar Dataflow memilih zona yang optimal untuk Anda.
Luncurkan pipeline di zona yang berbeda atau dengan jenis akselerator yang berbeda.
Konfigurasi model penyediaan, seperti Flex-start. Untuk mengetahui informasi selengkapnya, baca Mengonfigurasi model penyediaan.
Tugas gagal saat runtime
Jika tugas gagal saat runtime, periksa error kehabisan memori (OOM) di mesin worker dan di GPU. Error OOM GPU dapat muncul sebagai error cudaErrorMemoryAllocation out of memory dalam log worker. Jika Anda menggunakan TensorFlow, pastikan Anda hanya menggunakan satu proses TensorFlow untuk mengakses satu perangkat GPU.
Untuk mengetahui informasi selengkapnya, baca GPU dan paralelisme worker.
Tidak ada penggunaan GPU
Jika tugas Anda tampaknya tidak menggunakan GPU, ikuti langkah-langkah di bagian Men-debug tugas Anda dalam dokumen ini untuk memverifikasi apakah GPU tersedia dengan image Docker Anda.
Jika GPU tersedia tetapi tidak digunakan, kemungkinan masalahnya ada pada kode pipeline. Untuk men-debug kode pipeline, mulai dengan pipeline sederhana yang berhasil menggunakan GPU, lalu tambahkan kode secara bertahap ke pipeline, dan uji pipeline dengan setiap penambahan baru. Untuk mengetahui informasi selengkapnya, lihat bagian Melakukan proses debug di Dataflow dalam dokumen ini.
Jika pipeline Anda gagal mendeteksi GPU, verifikasi hal berikut:
- Library NVIDIA yang diinstal di image container sesuai dengan persyaratan kode dan library pengguna pipeline yang digunakannya.
- Library NVIDIA yang diinstal di 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 worker.
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, lakukan upgrade ke versi TensorFlow dan CUDA yang kompatibel terbaru.
- Tinjau masalah umum untuk TensorFlow dan CUDA guna memverifikasi apakah masalah umum menyebabkan masalah di pipeline Anda. Misalnya, masalah umum berikut dapat mencegah TensorFlow mendeteksi GPU: TF 2.17.0 RC0 Gagal berfungsi dengan GPU.
Langkah berikutnya
- Memulai: Menjalankan GPU di Container-Optimized OS.
- Toolbox Container-Optimized OS.
- Cakupan akses akun layanan.