# Inferencia distribuida

La inferencia distribuida divide la carga de trabajo entre varias GPU. Es útil para ajustar modelos más grandes en la memoria y para procesar más prompts a la vez.

Diffusers admite cuatro estrategias. Cada una tiene su propia guía y esta página te ayuda a elegir una.

## Elegir una estrategia

Cada estrategia resuelve un problema diferente, por lo que elige una en función del recurso que te limite.

| Estrategia | Divisiones | Reduce | Latencia para un solo prompt | Mejor cuando |
|---|---|---|---|---|
| [Paralelismo de datos](../optimization/data_parallelism) | prompts entre réplicas | nada, ya que cada GPU mantiene una copia completa | sin cambios | el modelo ya cabe y tienes muchos prompts |
| [device_map](../optimization/device_map) | componentes entre dispositivos | memoria de pesos | ligeramente peor | el modelo no cabe y el interconector es lento |
| [Paralelismo de contexto](../optimization/context_parallelism) | la secuencia de entrada | memoria de activación | lower | las secuencias son largas, como imágenes de alta resolución o video |
| [Paralelismo de tensores](../optimization/tensor_parallelism) | matrices de pesos | memoria de pesos | lower | los pesos de un componente no caben y el interconector es rápido |

Algunas orientaciones prácticas:

- Si el modelo ya cabe y tienes muchos prompts, usa paralelismo de datos. Escala el throughput con el número de GPUs sin tocar el modelo y deja la latencia de un solo prompt intacta. Configúralo con [Accelerate](../optimization/data_parallelism#accelerate) o [PyTorch Distributed](../optimization/data_parallelism#pytorch-distributed).
- Si los pesos de un solo componente no caben, prueba primero con la paralelización de tensores, ya que reduce tanto la memoria como la latencia. La paralelización de tensores comunica en cada límite de bloque, por lo que necesita un interconexión rápida como NVLink. En PCIe, el tráfico por capa puede superar el cómputo que ahorra, y `device_map` se convierte en la mejor opción. `device_map` también maneja el caso en que los componentes son individualmente adecuados pero colectivamente demasiado grandes.
- Si el problema son las activaciones y no los pesos, usa el paralelismo de contexto. Esto ayuda con secuencias largas, como imágenes grandes y videos con muchos fotogramas. Elige un backend a partir de los benchmarks de la guía de [Context parallelism](../optimization/context_parallelism).
- Si tanto los pesos como la secuencia son demasiado grandes, Diffusers no puede aplicar la paralelización de tensores y de contexto al mismo modelo. `ParallelConfig` genera un error si se pasan ambas configuraciones, y `enable_parallelism` no se puede llamar una segunda vez en un modelo que ya esté paralelizado.

Las integraciones de la comunidad [xDiT](../optimization/xdit) y [ParaAttention](../optimization/para_attn) ofrecen sus propias implementaciones de paralelismo de contexto.

