Halaman ini menjelaskan praktik terbaik untuk mem-build pipeline menggunakan GPU.
Untuk informasi dan contoh tentang cara mengaktifkan GPU dalam tugas Dataflow, lihat Menjalankan pipeline dengan GPU dan Memproses gambar satelit Landsat dengan GPU.
Prasyarat penggunaan GPU di Dataflow
- Untuk menggunakan GPU dengan tugas Dataflow, Anda harus menggunakan Runner v2.
- Dataflow menjalankan kode pengguna di VM pekerja di dalam penampung Docker.
VM pekerja ini menjalankan Container-Optimized OS.
Agar tugas Dataflow dapat menggunakan GPU, Anda memerlukan prasyarat berikut:
- Driver GPU diinstal di VM pekerja dan dapat diakses oleh penampung Docker. Untuk informasi selengkapnya, lihat Menginstal driver GPU.
- Library GPU yang diperlukan oleh pipeline Anda, seperti library NVIDIA CUDA-X atau NVIDIA CUDA Toolkit, diinstal di image container kustom. Untuk informasi selengkapnya, lihat Mengonfigurasi image penampung.
- Karena penampung GPU biasanya berukuran besar, untuk menghindari kehabisan kapasitas 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 pekerja Dataflow. Konfigurasi ini menambahkan langkah ke alur kerja pengembangan untuk mengonfigurasi persyaratan pipeline atau untuk menggunakan penampung kustom di Dataflow. Sebaiknya Anda memiliki lingkungan pengembangan lokal yang meniru lingkungan produksi seserupa mungkin.
Jika alur kerja Anda memenuhi kedua kriteria berikut, Anda tidak perlu mem-build 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 sebisa mungkin. Bergantung pada library, Anda mungkin memerlukan komputer dengan GPU dan library GPU yang diperlukan terinstal. Jenis mesin ini mungkin tidak tersedia di lingkungan lokal Anda. Anda dapat mengemulasi lingkungan runner Dataflow menggunakan penampung yang berjalan di virtual machine Google Cloud yang dilengkapi GPU.
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 standar memiliki tahap penyerapan yang menggunakan salah satu dari banyak sumber yang disediakan oleh Apache Beam. Tahap tersebut diikuti dengan transformasi pembentukan atau manipulasi data, yang kemudian dimasukkan ke dalam transformasi GPU.
Penyesuaian yang tepat menggunakan petunjuk resource Apache Beam untuk menyesuaikan resource pekerja untuk pipeline batch Anda. Jika penyesuaian tepat diaktifkan, Dataflow hanya menggunakan GPU untuk tahap pipeline yang memerlukannya. Akibatnya, fitur ini meningkatkan fleksibilitas dan kemampuan pipeline sekaligus berpotensi mengurangi biaya.
Untuk informasi selengkapnya, lihat Penyesuaian yang tepat.
GPU dan paralelisme pekerja
Untuk pipeline Python yang menggunakan arsitektur Dataflow Runner v2, Dataflow meluncurkan satu proses Apache Beam SDK per core VM. Setiap proses SDK berjalan dalam penampung Docker-nya sendiri dan pada gilirannya memunculkan banyak thread, yang masing-masing memproses data yang masuk.
GPU menggunakan beberapa arsitektur proses, dan GPU di pekerja Dataflow terlihat oleh semua proses dan thread.
Jika menjalankan beberapa proses SDK di GPU bersama, Anda dapat meningkatkan efisiensi dan penggunaan GPU dengan mengaktifkan NVIDIA Multi-Process Service (MPS). MPS meningkatkan paralelisme pekerja dan throughput secara keseluruhan untuk pipeline GPU, terutama untuk workload dengan penggunaan resource GPU yang rendah. Untuk mengetahui informasi selengkapnya, lihat Meningkatkan performa pada GPU bersama menggunakan NVIDIA MPS.
Untuk menghindari kelebihan langganan memori GPU, Anda mungkin perlu mengelola akses GPU. Jika Anda menggunakan TensorFlow, salah satu sugesti berikut dapat membantu Anda menghindari kelebihan langganan memori GPU:
Konfigurasikan pekerja Dataflow untuk hanya memulai satu proses Python dalam penampung, 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 Beam bawaan.
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 membuat pipeline menggunakan GPU. Alur ini menangani masalah terkait GPU dan non-GPU secara terpisah dan mempersingkat loop 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 mengelilingi 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 library yang diperlukan.
Mulai pengembangan kode GPU.
Mulai siklus code-run-code menggunakan virtual machine Google Cloud dengan image Docker. Untuk mengesampingkan inkompatibilitas 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/nvidia
Pastikan GPU tersedia:
./nvidia-smi
Mulai container Docker dengan driver GPU dari VM yang dipasang 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 Mem-build image container kustom. Tambahkan semua dependensi yang diperlukan 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 menggunakan sistem yang dioptimalkan untuk container
Untuk mengonfigurasi Docker CLI agar menggunakan
docker-credential-gcr
sebagai helper kredensial untuk kumpulan default Google Container Registry (GCR), gunakan:sudo docker-credential-gcr configure-docker
Untuk 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 informasi selengkapnya, lihat Men-debug masalah node menggunakan toolbox.
Langkah selanjutnya
- Pelajari lebih lanjut dukungan Dataflow untuk GPU.
- Pelajari lebih lanjut cara menjalankan pipeline menggunakan GPU.
- Pelajari artikel Memproses gambar satelit Landsat dengan GPU.