Diffusers documentation

Paralelismo

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Paralelismo

Las estrategias de paralelismo ayudan a acelerar los transformers de difusión distribuyendo los cálculos en varios dispositivos, lo que permite tiempos de inferencia/entrenamiento más rápidos. Consulte la guía de inferencia distribuida para obtener más información.

ParallelConfig

clase diffusers.ParallelConfig

< >

( context_parallel_config: diffusers.models._modeling_parallel.ContextParallelConfig | None = Nonetensor_parallel_config: diffusers.models._modeling_parallel.TensorParallelConfig | None = None_rank: int = None_world_size: int = None_device: device = None_mesh: DeviceMesh = None )

Parámetros

  • context_parallel_config (ContextParallelConfig, opcional) — Configuración para el paralelismo de contexto.
  • tensor_parallel_config (TensorParallelConfig, opcional) — Configuración para la paralelización de tensores.

Configuración para aplicar diferentes paralelismos.

ContextParallelConfig

clase diffusers.ContextParallelConfig

< >

( ring_degree: int | None = Noneulysses_degree: int | None = Noneconvert_to_fp32: bool = Truerotate_method: typing.Literal['allgather', 'alltoall'] = 'allgather'mesh: typing.Optional[torch.distributed.device_mesh.DeviceMesh] = Noneulysses_anything: bool = Falsering_anything: bool = False_rank: int = None_world_size: int = None_device: device = None_mesh: DeviceMesh = None_flattened_mesh: DeviceMesh = None_ring_mesh: DeviceMesh = None_ulysses_mesh: DeviceMesh = None_ring_local_rank: int = None_ulysses_local_rank: int = None )

Parámetros

  • ring_degree (int, opcional, valor predeterminado 1) — Número de dispositivos a utilizar para Ring Attention. La secuencia se divide entre los dispositivos. Cada dispositivo calcula la atención entre su Q local y los fragmentos de KV que se pasan secuencialmente alrededor del anillo. Menor uso de memoria (solo mantiene 1/N de KV a la vez), solapa el cálculo con la comunicación, pero requiere N iteraciones para ver todos los tokens. Ideal para secuencias largas con memoria o ancho de banda limitados. Número de dispositivos a utilizar para ring attention dentro de una región de paralelismo de contexto. Debe ser un divisor del número total de dispositivos en la malla de paralelismo de contexto.
  • ulysses_degree (int, opcional, valor predeterminado 1) — Número de dispositivos a utilizar para Ulysses Attention. La secuencia se divide entre los dispositivos. Cada dispositivo calcula los QKV locales y luego realiza un all-gather de todos los fragmentos KV para calcular la atención completa en una sola pasada. Mayor uso de memoria (almacena todos los KV), requiere comunicación all-to-all de alto ancho de banda, pero con menor latencia. Ideal para secuencias moderadas con buen ancho de banda de interconexión.
  • convert_to_fp32 (bool, opcional, valor predeterminado True) — Si se debe convertir la salida y el LSE a float32 para la estabilidad numérica de ring attention.
  • rotate_method (str, opcional, por defecto "allgather") — Método a utilizar para rotar los estados de clave/valor entre dispositivos en ring attention. Actualmente, solo se admite "allgather".
  • ulysses_anything (bool, opcional, valor predeterminado False) — Si se habilita el modo “Ulysses Anything”, que admite longitudes de secuencia y números de cabeceras arbitrarios que no son divisibles uniformemente por ulysses_degree. Cuando está habilitado, ulysses_degree debe ser mayor que 1 y ring_degree debe ser 1.
  • ring_anything (bool, opcional, valor predeterminado False) — Si se habilita el modo “Ring Anything”, que admite longitudes de secuencia arbitrarias. Cuando está habilitado, ring_degree debe ser mayor que 1 y ulysses_degree debe ser 1.
  • mesh (torch.distributed.device_mesh.DeviceMesh, opcional) — Una malla de dispositivos personalizada para usar en la paralelización de contexto. Si se proporciona, esta malla se usará en lugar de crear una nueva. Esto es útil al combinar la paralelización de contexto con otras estrategias de paralelización (p. ej., FSDP, paralelización de tensores) que comparten la misma malla de dispositivos. La malla debe tener las dimensiones “ring” y “ulysses”. Use tamaño 1 para las dimensiones que no se estén usando (p. ej., mesh_shape=(2, 1, 4) con mesh_dim_names=("ring", "ulysses", "fsdp") para solo ring attention con FSDP).

Configuración para el paralelismo de contexto.

diffusers.hooks.apply_context_parallel

< >

( module: Moduleparallel_config: ContextParallelConfigplan: dict )

Aplicar el paralelismo de contexto en un modelo.

TensorParallelConfig

clase diffusers.TensorParallelConfig

< >

( tp_degree: int = 1mesh: typing.Optional[torch.distributed.device_mesh.DeviceMesh] = None_rank: int = None_world_size: int = None_device: device = None_mesh: DeviceMesh = None_tp_degree: int = None )

Parámetros

  • tp_degree (int, por defecto 1) — Número de dispositivos en los que se dividirá el modelo. Debe ser un divisor del número de cabezas de atención (y de las dimensiones ocultas del FFN) del modelo que se está paralelizando.
  • mesh (torch.distributed.device_mesh.DeviceMesh, opcional) — Una malla de dispositivos personalizada para usar. Si se proporciona, tp_degree se infiere a partir de mesh.size() y el argumento se ignora. Útil al combinar TP con otras estrategias de paralelismo (p. ej. CP) que comparten la misma malla.

Configuración para el paralelismo de tensores.

La paralelización de tensores divide las matrices de pesos (por columnas y por filas) entre dispositivos. Cada dispositivo calcula un resultado parcial; un AllReduce/AllGather en los límites de las capas reconstruye la salida completa. Utiliza torch.distributed.tensor.parallelize_module con los estilos de partición ColwiseParallel / RowwiseParallel. Los tipos de dispositivos admitidos son "cuda", "neuron" y "tpu".

diffusers.hooks.apply_tensor_parallel

< >

( model: Moduleconfig: TensorParallelConfigtp_plan: dictweights_already_sharded: bool = False )

Parámetros

  • model (torch.nn.Module) — El modelo que se va a fragmentar in situ.
  • config (TensorParallelConfig) — The tensor-parallel config. Its device mesh must already be set up with config.setup(...).
  • tp_plan (dict) — Un mapeo plano de glob de nombres de módulos a un estilo "colwise"/"rowwise" (o una variante empaquetada), normalmente el _tp_plan del modelo.
  • weights_already_sharded (bool, por defecto False) — Indica si los parámetros planificados ya son fragmentos de DTensor, como ocurre después de una carga de from_pretrained en streaming. Si es True, solo se registran los hooks de forward. Este valor se pasa de forma explícita en lugar de detectarse, porque un parámetro planificado que falte en el checkpoint seguiría siendo un tensor meta y haría que la detección indicara “no fragmentado” para un modelo que en realidad está medio fragmentado.

Aplicar la paralelización de tensores en un modelo a partir de su _tp_plan plano.

Update on GitHub