Meningkatkan performa pada GPU bersama menggunakan NVIDIA MPS

Jika menjalankan beberapa proses SDK di GPU Dataflow bersama, Anda dapat meningkatkan efisiensi dan pemanfaatan GPU dengan mengaktifkan NVIDIA Multi-Process Service (MPS). MPS mendukung pemrosesan serentak di GPU dengan memungkinkan proses berbagi konteks CUDA dan menjadwalkan resource. MPS dapat mengurangi biaya pengalihan konteks, meningkatkan paralelisme, dan mengurangi persyaratan penyimpanan.

Alur kerja target adalah pipeline Python yang berjalan di worker dengan lebih dari satu vCPU.

MPS adalah teknologi NVIDIA yang mengimplementasikan CUDA API, platform NVIDIA yang mendukung komputasi GPU tujuan umum. Untuk mengetahui informasi selengkapnya, lihat panduan pengguna NVIDIA Multi-Process Service.

Manfaat

  • Meningkatkan pemrosesan paralel dan throughput keseluruhan untuk pipeline GPU, terutama untuk workload dengan penggunaan resource GPU yang rendah.
  • Meningkatkan pemanfaatan GPU, yang dapat mengurangi biaya Anda.

Dukungan dan batasan

  • MPS hanya didukung di worker Dataflow yang menggunakan satu GPU.
  • Pipeline tidak dapat menggunakan opsi pipeline yang membatasi paralelisme.
  • Jangan gunakan opsi pipeline --experiments=no_use_multiple_sdk_containers saat menggunakan NVIDIA MPS. Opsi ini membatasi Dataflow ke satu proses Python per VM. Hal ini mencegah MPS membagi resource GPU secara efektif di seluruh proses. Hal ini juga sangat membatasi paralelisme karena Global Interpreter Lock (GIL) Python dan membuat banyak parameter penyesuaian lainnya tidak efektif.
  • Hindari melampaui memori GPU yang tersedia, terutama untuk kasus penggunaan yang melibatkan pemuatan model machine learning besar. Seimbangkan jumlah vCPU dan proses SDK dengan memori GPU yang tersedia yang dibutuhkan oleh proses ini.
  • MPS tidak memengaruhi konkurensi operasi non-GPU.
  • Dataflow Prime tidak mendukung MPS.

Mengaktifkan MPS

Sebaiknya aktifkan MPS setiap kali Anda memuat lebih dari satu salinan model ke satu GPU (misalnya, dengan menggunakan model_copies > 1 dalam transformasi RunInference). Hal ini memungkinkan beberapa proses mengakses GPU secara bersamaan, sehingga meningkatkan efisiensi dan pemanfaatan.

Saat Anda menjalankan pipeline dengan GPU, aktifkan MPS dengan melakukan hal berikut:

  • Di opsi pipeline --dataflow_service_options, tambahkan use_nvidia_mps ke parameter worker_accelerator.
  • Tetapkan count ke 1.
  • Jangan gunakan opsi pipeline --experiments=no_use_multiple_sdk_containers.

Opsi pipeline --dataflow_service_options akan terlihat seperti berikut:

--dataflow_service_options="worker_accelerator=type:GPU_TYPE;count:1;install-nvidia-driver;use_nvidia_mps"

Jika Anda menggunakan TensorFlow dan mengaktifkan MPS, lakukan hal berikut:

  1. Aktifkan alokasi memori dinamis di GPU. Gunakan salah satu opsi TensorFlow berikut:
    • Aktifkan pertumbuhan memori dengan memanggil tf.config.experimental.set_memory_growth(gpu, True).
    • Tetapkan variabel lingkungan TF_FORCE_GPU_ALLOW_GROWTH ke benar (true).
  2. Gunakan perangkat logis dengan batas memori yang sesuai.
  3. Untuk performa optimal, terapkan penggunaan GPU jika memungkinkan dengan menggunakan penempatan perangkat lunak atau penempatan manual.

Langkah berikutnya