Diffusers documentation

Inferencia distribuida

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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.

EstrategiaDivisionesReduceLatencia para un solo promptMejor cuando
Paralelismo de datosprompts entre réplicasnada, ya que cada GPU mantiene una copia completasin cambiosel modelo ya cabe y tienes muchos prompts
device_mapcomponentes entre dispositivosmemoria de pesosligeramente peorel modelo no cabe y el interconector es lento
Paralelismo de contextola secuencia de entradamemoria de activaciónlowerlas secuencias son largas, como imágenes de alta resolución o video
Paralelismo de tensoresmatrices de pesosmemoria de pesoslowerlos 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 o 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.
  • 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 y ParaAttention ofrecen sus propias implementaciones de paralelismo de contexto.

Update on GitHub