Diffusers documentation

Inferensi terdistribusi

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Inferensi terdistribusi

Inferensi terdistribusi membagi beban kerja di antara beberapa GPU. Hal ini berguna untuk memuat model yang lebih besar ke dalam memori dan untuk memproses lebih banyak prompt sekaligus.

Diffusers mendukung empat strategi. Masing-masing memiliki panduannya sendiri, dan halaman ini membantu Anda memilih salah satunya.

Memilih strategi

Setiap strategi menyelesaikan masalah yang berbeda, jadi pilih salah satu berdasarkan sumber daya yang menjadi batasan Anda.

StrategiPembagianMengurangiLatensi untuk satu promptPaling baik saat
Paralelisme dataprompts di antara replikatidak ada, karena setiap GPU menyimpan salinan lengkapunchangedmodel sudah muat dan Anda memiliki banyak prompt
device_mapkomponen di antara perangkatmemori bobotsedikit lebih burukmodel tidak muat dan interkoneksi lambat
Paralelisme konteksurutan inputmemori aktivasilowerurutan panjang, seperti gambar resolusi tinggi atau video
Paralelisme tensormatriks bobotmemori bobotlowersatu komponen bobot tidak muat dan interkoneksi cepat

Beberapa panduan praktis:

  • Jika model sudah muat dan Anda memiliki banyak prompt, gunakan data parallelism. Metode ini meningkatkan throughput seiring bertambahnya jumlah GPU tanpa mengubah model, dan tidak memengaruhi latensi untuk prompt tunggal. Atur dengan Accelerate atau PyTorch Distributed.
  • Jika bobot satu komponen tidak muat, coba tensor parallelism terlebih dahulu, karena metode ini menurunkan baik memori maupun latensi. Tensor parallelism berkomunikasi di setiap batas blok, sehingga membutuhkan interkoneksi cepat seperti NVLink. Di PCIe, lalu lintas per lapisan dapat melebihi komputasi yang dihemat, dan device_map menjadi pilihan yang lebih baik. device_map juga menangani kasus di mana komponen-komponen secara individual tidak masalah tetapi secara kolektif terlalu besar.
  • Jika aktivasi, bukan bobot, yang menjadi masalah, gunakan paralelisme konteks. Ini membantu untuk urutan panjang, seperti gambar besar dan video dengan banyak frame. Pilih backend dari benchmark di panduan Paralelisme konteks.
  • Jika bobot dan urutan sama-sama terlalu besar, Diffusers tidak dapat menerapkan paralelisme tensor dan paralelisme konteks pada model yang sama. ParallelConfig akan memicu error jika Anda meneruskan kedua konfigurasi tersebut, dan enable_parallelism tidak dapat dipanggil untuk kedua kalinya pada model yang sudah diparalelkan.

Integrasi komunitas xDiT dan ParaAttention menawarkan implementasi parallelism konteks mereka sendiri.

Update on GitHub