Praktik terbaik untuk menggunakan GPU Dataflow

Halaman ini menjelaskan praktik terbaik untuk membangun pipeline menggunakan GPU.

Untuk informasi dan contoh tentang cara mengaktifkan GPU dalam tugas Dataflow Anda, 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 Runner v2.
  • Dataflow menjalankan kode pengguna di VM worker di dalam container Docker. VM pekerja ini menjalankan OS yang Dioptimalkan untuk Container. Agar tugas Dataflow dapat menggunakan GPU, Anda memerlukan prasyarat berikut:
  • Karena kontainer GPU biasanya berukuran besar, untuk menghindari kehabisan ruang disk, tingkatkan default ukuran boot disk hingga 50 gigabita atau lebih.

Pertimbangan

Saat mendesain lingkungan pengujian dan produksi, pertimbangkan faktor-faktor berikut.

Pengembangan lokal

Menggunakan Apache Beam dengan GPU NVIDIA memungkinkan Anda membuat pipeline pemrosesan data yang menangani pra-pemrosesan dan inferensi. Saat Anda menggunakan GPU untuk pengembangan lokal, pertimbangkan informasi berikut:

  • Sering kali, alur kerja pemrosesan data menggunakan library tambahan yang diinstal di lingkungan peluncuran dan di lingkungan eksekusi Pekerja Dataflow. Konfigurasi ini menambahkan langkah-langkah ke proses alur kerja untuk mengonfigurasi persyaratan pipeline atau untuk menggunakan container kustom di Dataflow. Sangat bermanfaat untuk memiliki lingkungan pengembangan lokal yang meniru model sedekat mungkin dengan lingkungan tersebut.

  • Jika alur kerja Anda memenuhi kedua kriteria berikut, Anda tidak perlu membangun container kustom atau ubah alur kerja pengembangan Anda untuk mengonfigurasi pipeline persyaratan:

    • 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, dan sehingga membutuhkan build khusus dan jalur kode yang berbeda. Untuk mereplikasi kode untuk skenario ini, diperlukan langkah tambahan.

  • Saat menjalankan eksperimen lokal, replikasikan lingkungan dari pekerja Dataflow semirip mungkin. Tergantung pada library, Anda mungkin memerlukan komputer dengan GPU dan pustaka GPU yang diperlukan yang terinstal. Jenis komputer ini mungkin tidak tersedia di lingkungan lokal Anda. Anda dapat mengemulasikan Dataflow menggunakan container 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 pembatasan batas atas pada GPU jumlah vCPU dan memori yang dapat dimiliki pekerja. Untuk menemukan model batasan, lihat Ketersediaan.

Menentukan jumlah CPU atau memori yang lebih tinggi mungkin mengharuskan Anda menentukan jumlah GPU yang lebih tinggi.

Untuk detail lebih lanjut, 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 sekian banyak yang disediakan oleh Apache Beam. Tahap itu diikuti dengan manipulasi data atau membentuk transformasi, yang kemudian dimasukkan ke dalam transformasi GPU.

Penggunaan penyesuaian yang tepat Petunjuk resource Apache Beam untuk menyesuaikan resource pekerja untuk pipeline batch Anda. Ketika penyesuaian yang tepat adalah Jika diaktifkan, Dataflow hanya menggunakan GPU untuk tahapan pipeline yang membutuhkannya. Karenanya, fitur ini meningkatkan fleksibilitas dan kemampuan pipeline sekaligus yang berpotensi mengurangi biaya.

Untuk informasi selengkapnya, lihat Penyesuaian yang tepat.

GPU dan paralelisme pekerja

Untuk pipeline Python yang menggunakan Dataflow Runner v2 Dataflow, Dataflow meluncurkan satu proses Apache Beam SDK per inti VM. Setiap proses SDK berjalan di container Docker-nya sendiri, lalu menghasilkan banyak {i>thread<i}, yang masing-masing memproses data yang masuk.

GPU menggunakan beberapa proses arsitektur, dan GPU dalam worker Dataflow terlihat oleh semua proses dan thread.

Jika menjalankan beberapa proses SDK pada GPU bersama, Anda dapat meningkatkan kualitas GPU dengan memungkinkan 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 informasi selengkapnya, lihat Tingkatkan performa di GPU bersama menggunakan NVIDIA MPS.

Untuk menghindari kelebihan langganan memori GPU, Anda mungkin perlu mengelola akses GPU. Jika Anda menggunakan TensorFlow, salah satu dari dapat membantu Anda menghindari kelebihan langganan memori GPU:

  • Mengonfigurasi worker Dataflow untuk memulai hanya satu proses Python dalam container, terlepas dari jumlah vCPU pekerja. Untuk membuat konfigurasi ini. Saat meluncurkan tugas, gunakan perintah opsi pipeline:

    • --experiments=no_use_multiple_sdk_containers
    • --number_of_worker_harness_threads

    Untuk mengetahui informasi selengkapnya tentang jumlah thread yang akan digunakan, lihat Mengurangi jumlah rangkaian pesan.

  • Aktifkan MPS.

Workload inferensi

Saat Anda menggunakan model machine learning (ML) untuk melakukan inferensi lokal dan jarak jauh, menggunakan Apache Beam bawaan, Transformasi RunInference. RunInference API adalah PTransform yang dioptimalkan untuk machine learning inferensi. Menggunakan transformasi RunInference dapat meningkatkan efisiensi saat Anda menggunakan model ML di pipeline Anda.

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 mempersingkat feedback loop.

  1. Membuat pipeline

    Membuat pipeline yang dapat dijalankan di Dataflow. Ganti transformasi yang memerlukan GPU dengan transformasi yang tidak menggunakan GPU, tetapi secara fungsional sama:

    1. Membuat semua transformasi yang mengelilingi penggunaan GPU, seperti data penyerapan dan manipulasi.

    2. Buat stub untuk transformasi GPU dengan perubahan skema atau pass-through.

  2. 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:

    1. Buat image Docker dengan semua library yang diperlukan.

    2. Mulai pengembangan kode GPU.

    3. Mulai siklus kode jalankan kode menggunakan virtual machine Google Cloud dengan image Docker standar. Untuk mengesampingkan inkompatibilitas library, jalankan kode GPU dalam proses Python lokal secara terpisah dari Apache Beam {i>pipelines<i} yang sama. Lalu, jalankan seluruh pipeline pada runner langsung, atau meluncurkan pipeline di Dataflow.

Gunakan 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 terpasang.

Alur umumnya adalah:

  1. Buat VM.

  2. 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
    
  3. Pastikan GPU tersedia:

    ./nvidia-smi
    
  4. Mulai container Docker dengan driver GPU dari VM yang terpasang 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 sampel Dockerfile, lihat Buat image container kustom. Tambahkan semua dependensi yang Anda perlukan untuk pipeline ke Dockerfile.

Untuk informasi selengkapnya tentang penggunaan image Docker yang sudah dikonfigurasi sebelumnya untuk penggunaan GPU, lihat Gunakan gambar yang ada yang dikonfigurasi untuk penggunaan GPU.

Alat untuk bekerja dengan sistem yang dioptimalkan untuk container

  • Untuk mengonfigurasi Docker CLI agar menggunakan docker-credential-gcr sebagai helper kredensial untuk kumpulan Google Container Registry (GCR) default, gunakan:

    sudo docker-credential-gcr configure-docker
    

    Untuk 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 untuk Kustom. Contoh:

    toolbox /google-cloud-sdk/bin/gsutil cp gs://bucket/gpu/image_process/* /media/root/home/<userid>/opencv/
    

    Untuk mengetahui informasi selengkapnya, lihat Men-debug masalah node menggunakan toolbox.

Langkah selanjutnya