Halaman ini menjelaskan praktik terbaik untuk membangun pipeline menggunakan GPU.
Untuk mengetahui informasi dan contoh tentang cara mengaktifkan GPU di tugas Dataflow, lihat Menjalankan pipeline dengan GPU dan Memproses gambar satelit Landsat dengan GPU.
Prasyarat untuk menggunakan GPU di Dataflow
- Untuk menggunakan GPU dengan tugas Dataflow, Anda harus menggunakan Portable Runner (sebelumnya disebut Runner v2).
- Dataflow menjalankan kode pengguna di VM pekerja di dalam container Docker.
VM pekerja ini menjalankan Container-Optimized OS.
Agar tugas Dataflow dapat menggunakan GPU, Anda memerlukan prasyarat berikut:
- Driver GPU diinstal pada VM pekerja dan dapat diakses oleh container Docker. Untuk mengetahui informasi selengkapnya, lihat Menginstal driver GPU.
- Library GPU yang diperlukan oleh pipeline Anda, seperti library NVIDIA CUDA-X atau NVIDIA CUDA Toolkit, diinstal dalam image container kustom. Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi image container Anda.
- Karena biasanya ukuran container GPU besar, untuk menghindari kehabisan ruang disk, tingkatkan ukuran boot disk default menjadi 50 gigabyte atau lebih.
Pertimbangan
Saat mendesain lingkungan pengujian dan produksi, pertimbangkan faktor-faktor berikut.
Pengembangan lokal
Dengan menggunakan Apache Beam dengan GPU NVIDIA, Anda dapat membuat pipeline pemrosesan data skala besar yang menangani prapemrosesan dan inferensi. Saat Anda menggunakan GPU untuk pengembangan lokal, pertimbangkan informasi berikut:
Sering kali, alur kerja pemrosesan data menggunakan library tambahan yang perlu Anda instal di lingkungan peluncuran dan di lingkungan eksekusi pada worker Dataflow. Konfigurasi ini menambahkan langkah-langkah ke alur kerja pengembangan untuk mengonfigurasi persyaratan pipeline atau untuk menggunakan container kustom di Dataflow. Sebaiknya miliki lingkungan pengembangan lokal yang meniru lingkungan produksi sedekat mungkin.
Jika alur kerja Anda memenuhi kedua kriteria berikut, Anda tidak perlu membuat penampung kustom atau mengubah alur kerja pengembangan untuk mengonfigurasi persyaratan pipeline:
- Anda menggunakan library yang secara implisit menggunakan GPU NVIDIA.
- Kode Anda tidak memerlukan perubahan apa pun untuk mendukung GPU.
Beberapa library tidak beralih secara transparan antara penggunaan CPU dan GPU, sehingga memerlukan build tertentu dan jalur kode yang berbeda. Untuk mereplikasi siklus proses pengembangan kode-jalankan-kode untuk skenario ini, langkah-langkah tambahan diperlukan.
Saat menjalankan eksperimen lokal, replikasi lingkungan pekerja Dataflow sedekat mungkin. Bergantung pada library, Anda mungkin memerlukan komputer dengan GPU dan library GPU yang diperlukan telah diinstal. Jenis mesin ini mungkin tidak tersedia di lingkungan lokal Anda. Anda dapat mengemulasi lingkungan runner Dataflow menggunakan container yang berjalan di virtual machine yang dilengkapi GPU. Google Cloud
Spesifikasi jenis mesin
Untuk mengetahui detail tentang dukungan jenis mesin untuk setiap model GPU, lihat platform GPU. GPU yang didukung dengan jenis mesin N1 juga mendukung jenis mesin N1 kustom.
Jenis dan jumlah GPU menentukan batasan batas atas pada jumlah vCPU dan memori yang tersedia yang dapat dimiliki pekerja. Untuk menemukan batasan yang sesuai, lihat Ketersediaan.
Menentukan jumlah CPU atau memori yang lebih tinggi mungkin mengharuskan Anda menentukan jumlah GPU yang lebih tinggi.
Untuk mengetahui detail selengkapnya, baca GPU di Compute Engine.
Mengoptimalkan penggunaan resource
Sebagian besar pipeline tidak sepenuhnya terdiri dari transformasi yang memerlukan GPU. Pipeline umum memiliki tahap penyerapan yang menggunakan salah satu dari banyak sumber yang disediakan oleh Apache Beam. Tahap tersebut diikuti dengan manipulasi data atau transformasi pembentukan, yang kemudian diumpankan ke transformasi GPU.
Penyesuaian yang tepat menggunakan petunjuk resource Apache Beam untuk menyesuaikan resource worker untuk pipeline batch Anda. Jika penyesuaian yang tepat diaktifkan, Dataflow hanya menggunakan GPU untuk tahap pipeline yang memerlukannya. Oleh karena itu, fitur ini meningkatkan fleksibilitas dan kemampuan pipeline sekaligus berpotensi mengurangi biaya.
Untuk mengetahui informasi selengkapnya, lihat Pemasangan yang tepat.
GPU dan paralelisme pekerja
Untuk pipeline Python yang menggunakan arsitektur Dataflow Portable Runner, Dataflow meluncurkan satu proses Apache Beam SDK per core VM. Setiap proses SDK berjalan di container Docker-nya sendiri dan pada gilirannya memunculkan banyak thread, yang masing-masing memproses data yang masuk.
GPU menggunakan arsitektur multi-proses, dan GPU di worker Dataflow dapat dilihat oleh semua proses dan thread.
Jika menjalankan beberapa proses SDK di GPU bersama, Anda dapat meningkatkan efisiensi dan pemanfaatan GPU dengan mengaktifkan NVIDIA Multi-Process Service (MPS). MPS meningkatkan paralelisme pekerja dan throughput keseluruhan untuk pipeline GPU, terutama untuk workload dengan penggunaan resource GPU yang rendah. Untuk mengetahui informasi selengkapnya, lihat Meningkatkan performa pada GPU bersama dengan menggunakan NVIDIA MPS.
Untuk menghindari kelebihan langganan memori GPU, Anda mungkin perlu mengelola akses GPU. Jika Anda menggunakan TensorFlow, salah satu saran berikut dapat membantu Anda menghindari oversubscription memori GPU:
Konfigurasi pekerja Dataflow untuk memulai hanya satu proses Python yang di-container, terlepas dari jumlah vCPU pekerja. Untuk membuat konfigurasi ini, saat meluncurkan tugas, gunakan opsi pipeline berikut:
--experiments=no_use_multiple_sdk_containers--number_of_worker_harness_threads
Untuk mengetahui informasi selengkapnya tentang jumlah thread yang akan digunakan, lihat Mengurangi jumlah thread.
Workload inferensi
Saat Anda menggunakan model machine learning (ML) untuk melakukan inferensi lokal dan jarak jauh, gunakan transformasi RunInference Apache Beambawaan.
RunInference API adalah PTransform yang dioptimalkan untuk inferensi machine learning. Menggunakan transformasi RunInference dapat meningkatkan efisiensi saat Anda menggunakan model ML di pipeline.
Alur kerja
Alur kerja dua tahap berikut menunjukkan cara membangun pipeline menggunakan GPU. Alur ini menangani masalah terkait GPU dan non-GPU secara terpisah dan memperpendek siklus masukan.
Membuat pipeline
Buat pipeline yang dapat berjalan di Dataflow. Ganti transformasi yang memerlukan GPU dengan transformasi yang tidak menggunakan GPU, tetapi secara fungsional sama:
Buat semua transformasi yang terkait dengan penggunaan GPU, seperti penyerapan dan manipulasi data.
Buat stub untuk transformasi GPU dengan perubahan skema atau pass-through.
Menguji secara lokal
Uji bagian GPU dari kode pipeline di lingkungan yang meniru lingkungan eksekusi pekerja Dataflow. Langkah-langkah berikut menjelaskan salah satu metode untuk menjalankan pengujian ini:
Buat image Docker dengan semua pustaka yang diperlukan.
Mulai pengembangan kode GPU.
Mulai siklus code-run-code menggunakan Google Cloud virtual machine dengan image Docker. Untuk mengesampingkan ketidakcocokan library, jalankan kode GPU dalam proses Python lokal secara terpisah dari pipeline Apache Beam. Kemudian, jalankan seluruh pipeline di runner langsung, atau luncurkan pipeline di Dataflow.
Menggunakan VM yang menjalankan sistem operasi yang dioptimalkan untuk container
Untuk lingkungan minimum, gunakan virtual machine (VM) yang dioptimalkan untuk container. Untuk mengetahui informasi selengkapnya, lihat Membuat VM dengan GPU yang terpasang.
Alur umumnya adalah:
Buat VM.
Hubungkan ke VM dan jalankan perintah berikut:
sudo cos-extensions install gpu -- -version latest sudo mount --bind /var/lib/nvidia /var/lib/nvidia sudo mount -o remount,exec /var/lib/nvidiaKonfirmasi bahwa GPU tersedia:
./nvidia-smiMulai container Docker dengan driver GPU dari VM yang di-mount sebagai volume. Contoh:
sudo 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 gcr.io/bigdatapivot/image_process_example:latest
Untuk contoh Dockerfile, lihat Membangun image container kustom. Tambahkan semua dependensi yang Anda butuhkan untuk pipeline ke Dockerfile.
Untuk mengetahui informasi selengkapnya tentang penggunaan image Docker yang telah dikonfigurasi sebelumnya untuk penggunaan GPU, lihat Menggunakan image yang ada yang dikonfigurasi untuk penggunaan GPU.
Alat untuk bekerja dengan sistem yang dioptimalkan untuk container
Untuk mengonfigurasi Docker CLI agar menggunakan
docker-credential-gcrsebagai pembantu kredensial untuk set default Google Container Registry (GCR), gunakan:sudo docker-credential-gcr configure-dockerUntuk mengetahui informasi selengkapnya tentang cara menyiapkan kredensial Docker, lihat docker-credential-gcr.
Untuk menyalin file, seperti kode pipeline, ke atau dari VM, gunakan
toolbox. Teknik ini berguna saat menggunakan gambar yang Dioptimalkan Kustom. Contoh:toolbox /google-cloud-sdk/bin/gsutil cp gs://bucket/gpu/image_process/* /media/root/home/<userid>/opencv/Untuk mengetahui informasi selengkapnya, lihat Proses debug masalah node menggunakan toolbox.
Langkah berikutnya
- Pelajari lebih lanjut Dukungan Dataflow untuk GPU.
- Pelajari lebih lanjut cara menjalankan pipeline menggunakan GPU.
- Pelajari Memproses gambar satelit Landsat dengan GPU.