Praktik terbaik untuk menggunakan GPU Dataflow

Halaman ini menjelaskan praktik terbaik untuk membangun pipeline dengan menggunakan GPU.

Untuk mengetahui informasi dan contoh 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 Runner v2.
  • Dataflow menjalankan kode pengguna dalam VM pekerja di dalam container Docker. VM pekerja ini menjalankan Container-Optimized OS. Agar tugas Dataflow dapat menggunakan GPU, Anda memerlukan prasyarat berikut:
  • Karena container GPU biasanya berukuran besar, agar tidak kehabisan kapasitas disk, tingkatkan ukuran boot disk default menjadi 50 gigabyte atau lebih.

Pertimbangan

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

Pengembangan lokal

Penggunaan Apache Beam dengan GPU NVIDIA memungkinkan Anda membuat pipeline pemrosesan data berskala besar 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 perlu Anda instal di lingkungan peluncuran dan di lingkungan eksekusi pada pekerja Dataflow. Konfigurasi ini menambahkan langkah-langkah ke alur kerja pengembangan untuk mengonfigurasi persyaratan pipeline atau untuk menggunakan container kustom di Dataflow. Akan sangat bermanfaat jika Anda memiliki lingkungan pengembangan lokal yang meniru lingkungan produksi semirip mungkin.

  • Jika alur kerja Anda memenuhi kedua kriteria berikut, Anda tidak perlu mem-build container 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 yang dijalankan kode untuk skenario ini, diperlukan langkah tambahan.

  • Saat menjalankan eksperimen lokal, buat replikasi lingkungan pekerja Dataflow sedekat mungkin. Bergantung pada library, Anda mungkin memerlukan mesin dengan GPU dan library GPU yang diperlukan terinstal. Jenis mesin ini mungkin tidak tersedia di lingkungan lokal Anda. Anda dapat mengemulasikan lingkungan runner 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 batasan batas atas terkait jumlah vCPU dan memori 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 dimasukkan ke dalam transformasi GPU.

Penyesuaian yang tepat menggunakan petunjuk resource Apache Beam untuk menyesuaikan resource pekerja untuk pipeline batch Anda. Saat penyesuaian yang tepat diaktifkan, Dataflow hanya akan menggunakan GPU untuk tahap pipeline yang membutuhkannya. Akibatnya, fitur ini meningkatkan fleksibilitas dan kemampuan pipeline sekaligus berpotensi mengurangi biaya.

Untuk informasi selengkapnya, lihat Pengepasan yang tepat.

GPU dan paralelisme pekerja

Untuk pipeline Python yang menggunakan arsitektur Dataflow Runner v2, Dataflow meluncurkan satu proses Apache Beam SDK per inti VM. Setiap proses SDK berjalan di container Docker-nya sendiri dan pada akhirnya menghasilkan 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 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 di GPU bersama 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 kelebihan langganan memori GPU:

  • Konfigurasi pekerja Dataflow untuk memulai hanya satu proses Python dalam container, berapa pun jumlah vCPU pekerja. Untuk membuat konfigurasi ini, saat meluncurkan tugas Anda, 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.

  • Aktifkan MPS.

Beban kerja 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 membangun pipeline menggunakan GPU. Alur ini menangani masalah terkait GPU dan non-GPU secara terpisah serta mempersingkat feedback loop.

  1. Membuat pipeline

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

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

    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. Untuk mengesampingkan inkompatibilitas library, jalankan kode GPU dalam proses Python lokal secara terpisah dari pipeline Apache Beam. Kemudian, jalankan seluruh pipeline pada runner langsung, atau luncurkan 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 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 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-gcr sebagai pembantu kredensial untuk kumpulan default Google Container Registries (GCR), gunakan:

    sudo docker-credential-gcr configure-docker
    

    Untuk mengetahui informasi lebih lanjut 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 Secara 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