Diffusers documentation
Inferência distribuída
Comece agora
Inferência
Usando pipelines de difusão
Adaptadores e personalização
Otimizar e escalar
Desempenho básico
Velocidade e memória
Inferência distribuída
Visão geralParalelismo de dadosSharding de modelos com device_mapParalelismo de contextoParalelismo de tensor
Quantização
Aceleração específica de hardware
Métodos da comunidade
Diffusers modulares
Treinar e ajustar finamente
Recursos
Contribuir
API
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égia | Divisões | Reduz | Latência para um prompt | Melhor quando |
|---|---|---|---|---|
| Paralelismo de dados | prompts entre réplicas | nada, já que cada GPU mantém uma cópia completa | invariável | o modelo já cabe e você tem muitos prompts |
| device_map | componentes entre dispositivos | memória de pesos | um pouco pior | o modelo não cabe e o interconector é lento |
| Paralelismo de contexto | a sequência de entrada | memória de ativação | lower | as sequências são longas, como imagens de alta resolução ou vídeos |
| Paralelismo de tensor | matrizes de pesos | memória de pesos | lower | os 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_mapse torna a melhor escolha.device_maptambé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.
ParallelConfiggera um erro se você passar ambas as configurações, eenable_parallelismnã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