Buckets:

hf-doc-build/doc / diffusers /main /ru /api /parallel.md
mishig's picture
|
download
raw
12.1 kB
# Параллелизм
Стратегии параллелизма помогают ускорить работу диффузионных трансформеров за счёт распределения вычислений по нескольким устройствам, что позволяет сократить время инференса/обучения. Подробнее см. в руководстве [Distributed inference](../training/distributed_inference).
## ParallelConfig[[diffusers.ParallelConfig]]
#### diffusers.ParallelConfig[[diffusers.ParallelConfig]]
```python
diffusers.ParallelConfig(context_parallel_config: diffusers.models._modeling_parallel.ContextParallelConfig | None = None, tensor_parallel_config: diffusers.models._modeling_parallel.TensorParallelConfig | None = None, _rank: int = None, _world_size: int = None, _device: device = None, _mesh: DeviceMesh = None)
```
[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/_modeling_parallel.py#L199)
**Параметры:**
context_parallel_config (`ContextParallelConfig`, *необязательный*) : Конфигурация для параллелизма контекста.
tensor_parallel_config (`TensorParallelConfig`, *необязательный*) : Конфигурация для тензорного параллелизма.
Конфигурация для применения различных видов параллелизма.
## ContextParallelConfig[[diffusers.ContextParallelConfig]]
#### diffusers.ContextParallelConfig[[diffusers.ContextParallelConfig]]
```python
diffusers.ContextParallelConfig(ring_degree: int | None = None, ulysses_degree: int | None = None, convert_to_fp32: bool = True, rotate_method: typing.Literal['allgather', 'alltoall'] = 'allgather', mesh: typing.Optional[torch.distributed.device_mesh.DeviceMesh] = None, ulysses_anything: bool = False, ring_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)
```
[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/_modeling_parallel.py#L41)
**Параметры:**
ring_degree (`int`, *optional*, по умолчанию `1`) : Количество устройств для использования в Ring Attention. Последовательность распределяется по устройствам. Каждое устройство вычисляет внимание между своим локальным Q и KV-фрагментами, которые последовательно передаются по кольцу. Это снижает потребление памяти (одновременно хранится только 1/N KV), позволяет перекрывать вычисления с коммуникацией, но требует N итераций для обработки всех токенов. Лучше всего подходит для длинных последовательностей при ограниченной памяти/пропускной способности. Количество устройств для ring attention внутри области контекстного параллелизма. Должно быть делителем общего числа устройств в сетке контекстного параллелизма.
ulysses_degree (`int`, *optional*, по умолчанию `1`) : Количество устройств для использования в Ulysses Attention. Последовательность распределяется по устройствам. Каждое устройство вычисляет локальные QKV, затем с помощью all-gather собирает все фрагменты KV для вычисления полного внимания за один проход. Требует больше памяти (хранит все KV) и высокоскоростной all-to-all коммуникации, но обеспечивает низкую задержку. Лучше всего подходит для последовательностей средней длины при наличии высокопропускной межпроцессорной связи.
convert_to_fp32 (`bool`, *необязательный*, по умолчанию `True`) : Преобразовывать ли выходные данные и LSE в float32 для численной стабильности ring attention.
rotate_method (`str`, *необязательный*, по умолчанию `"allgather"`) : Метод, используемый для ротации состояний ключей/значений между устройствами в ring attention. В настоящее время поддерживается только `"allgather"`.
ulysses_anything (`bool`, *необязательный*, по умолчанию `False`) : Включает ли режим "Ulysses Anything", который поддерживает произвольные длины последовательностей и количества головок, не делящиеся нацело на `ulysses_degree`. При включении `ulysses_degree` должно быть больше 1, а `ring_degree` — равно 1.
ring_anything (`bool`, *необязательный*, по умолчанию `False`) : Включает ли режим "Ring Anything", который поддерживает произвольные длины последовательностей. При включении `ring_degree` должно быть больше 1, а `ulysses_degree` — равно 1.
mesh (`torch.distributed.device_mesh.DeviceMesh`, *optional*) : Пользовательская сетка устройств для использования в контекстном параллелизме. Если указана, эта сетка будет использоваться вместо создания новой. Это полезно при сочетании контекстного параллелизма с другими стратегиями параллелизма (например, FSDP, тензорным параллелизмом), которые используют одну и ту же сетку устройств. Сетка должна содержать измерения "ring" и "ulysses". Для неиспользуемых измерений используйте размер 1 (например, `mesh_shape=(2, 1, 4)` с `mesh_dim_names=("ring", "ulysses", "fsdp")` для ring attention только с FSDP).
Конфигурация для параллелизма контекста.
#### diffusers.hooks.apply_context_parallel[[diffusers.hooks.apply_context_parallel]]
```python
diffusers.hooks.apply_context_parallel(module: Module, parallel_config: ContextParallelConfig, plan: dict[str, dict[str, dict[str | int, diffusers.models._modeling_parallel.ContextParallelInput | list[diffusers.models._modeling_parallel.ContextParallelInput] | tuple[diffusers.models._modeling_parallel.ContextParallelInput, ...]] | diffusers.models._modeling_parallel.ContextParallelOutput | list[diffusers.models._modeling_parallel.ContextParallelOutput] | tuple[diffusers.models._modeling_parallel.ContextParallelOutput, ...] | diffusers.models._modeling_parallel.Conditional]])
```
[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/hooks/context_parallel.py#L81)
Примените контекстный параллелизм к модели.
## TensorParallelConfig[[diffusers.TensorParallelConfig]]
#### diffusers.TensorParallelConfig[[diffusers.TensorParallelConfig]]
```python
diffusers.TensorParallelConfig(tp_degree: int = 1, mesh: 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)
```
[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/_modeling_parallel.py#L157)
**Параметры:**
tp_degree (`int`, по умолчанию `1`) : Количество устройств, на которые выполняется шардирование. Должно быть делителем количества головок внимания (и скрытых размерностей FFN) модели, для которой настраивается параллелизм.
mesh (`torch.distributed.device_mesh.DeviceMesh`, *необязательный*) : Пользовательская сетка устройств для использования. Если указано, `tp_degree` выводится из `mesh.size()`, а аргумент игнорируется. Полезно при сочетании TP с другими стратегиями параллелизма (например, CP), использующими одну и ту же сетку.
Конфигурация для параллелизма тензоров.
Тензорное параллелизм распределяет матрицы весов (по столбцам и по строкам) между устройствами. Каждое устройство вычисляет частичный результат; AllReduce/AllGather на границах слоёв восстанавливает полный выход. Использует `torch.distributed.tensor.parallelize_module` со стилями шардинга `ColwiseParallel` / `RowwiseParallel`. Поддерживаемые типы устройств: `"cuda"`, `"neuron"` и `"tpu"`.
#### diffusers.hooks.apply_tensor_parallel[[diffusers.hooks.apply_tensor_parallel]]
```python
diffusers.hooks.apply_tensor_parallel(model: Module, config: TensorParallelConfig, tp_plan: dict, weights_already_sharded: bool = False)
```
[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/hooks/tensor_parallel.py#L518)
**Параметры:**
model (`torch.nn.Module`) : модель, которую нужно разбить на части на месте.
config (`TensorParallelConfig`) : конфигурация тензорного параллелизма. Её сетка устройств должна уже быть настроена с помощью `config.setup(...)`.
tp_plan (`dict`) : Плоское сопоставление глоб-имён модулей со стилем `"colwise"`/`"rowwise"` (или упакованным вариантом), как правило, это `_tp_plan` модели.
weights_already_sharded (`bool`, по умолчанию `False`) : Указывает, являются ли запланированные параметры уже фрагментами `DTensor`, как это бывает после потоковой загрузки с помощью `from_pretrained`. Если `True`, регистрируются только forward-хуки. Этот параметр передаётся явно, а не определяется автоматически, потому что запланированный параметр, отсутствующий в контрольной точке, всё равно останется мета-тензором, и автоматическое определение ошибочно сочтёт модель «не разбитой на фрагменты», хотя на самом деле она разбита наполовину.
Примените тензорное параллелизм к модели из её плоского `_tp_plan`.

Xet Storage Details

Size:
12.1 kB
·
Xet hash:
17c7dff6215415197a3194e27319ea0d83a83239e9af4bb0b559a4907ea3f51c

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.