Diffusers documentation

Inferência distribuída

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Inferência distribuída

A inferência distribuída divide a carga de trabalho entre várias GPUs. É útil para caber modelos maiores na memória e para processar mais prompts de uma vez.

Diffusers suporta quatro estratégias. Cada uma possui seu próprio guia, e esta página ajuda você a escolher uma.

Escolhendo uma estratégia

Cada estratégia resolve um problema diferente, portanto, escolha uma com base no recurso que limita você.

EstratégiaDivisõesReduzLatência para um promptMelhor quando
Paralelismo de dadosprompts entre réplicasnada, já que cada GPU mantém uma cópia completainvariávelo modelo já cabe e você tem muitos prompts
device_mapcomponentes entre dispositivosmemória de pesosum pouco pioro modelo não cabe e o interconector é lento
Paralelismo de contextoa sequência de entradamemória de ativaçãoloweras sequências são longas, como imagens de alta resolução ou vídeos
Paralelismo de tensormatrizes de pesosmemória de pesosloweros pesos de um componente não cabem e o interconector é rápido

Algumas orientações práticas:

  • Se o modelo já couber e você tiver muitos prompts, use paralelismo de dados. Ele escala o throughput com o número de GPUs sem alterar o modelo e mantém a latência de prompt único inalterada. Configure-o com Accelerate ou PyTorch Distributed.
  • Se os pesos de um único componente não couberem, tente primeiro o paralelismo de tensor, pois ele reduz tanto a memória quanto a latência. O paralelismo de tensor se comunica em cada fronteira de bloco, portanto requer um interconector rápido, como NVLink. Em PCIe, o tráfego por camada pode superar o cálculo que ele economiza, e device_map se torna a melhor escolha. device_map também lida com o caso em que os componentes são individualmente adequados, mas coletivamente grandes demais.
  • Se o problema são as ativações, e não os pesos, use paralelismo de contexto. Isso ajuda com sequências longas, como imagens grandes e vídeos com muitos quadros. Escolha um backend a partir dos benchmarks no guia de Context parallelism.
  • Se tanto os pesos quanto a sequência forem grandes demais, o Diffusers não consegue aplicar paralelismo de tensor e de contexto ao mesmo modelo. ParallelConfig gera um erro se você passar ambas as configurações, e enable_parallelism não pode ser chamado uma segunda vez em um modelo que já está paralelizado.

As integrações da comunidade xDiT e ParaAttention oferecem suas próprias implementações de paralelismo de contexto.

Update on GitHub