Buckets:
| # Параллелизм | |
| Стратегии параллелизма помогают ускорить работу диффузионных трансформеров за счёт распределения вычислений по нескольким устройствам, что позволяет сократить время инференса/обучения. Подробнее см. в руководстве [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/v0.43.0/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/v0.43.0/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, ...]]]) | |
| ``` | |
| [Источник](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/hooks/context_parallel.py#L80) | |
| Примените контекстный параллелизм к модели. | |
| ## 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/v0.43.0/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/v0.43.0/src/diffusers/hooks/tensor_parallel.py#L481) | |
| **Параметры:** | |
| 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 kB
- Xet hash:
- 15000f8dee14ff5fe9ac145a870457a5ef05a2b64cc7fc44b65f84399e0697ad
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.