Buckets:
| # 병렬성 | |
| 병렬화 전략은 계산을 여러 장치에 분산시켜 추론/학습 시간을 단축함으로써 diffusion transformer의 속도를 높이는 데 도움이 됩니다. 자세한 내용은 [Distributed inferece](../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`, *선택 사항*, 기본값 `1`) : Ring Attention에 사용할 장치의 수입니다. 시퀀스는 장치 간에 분할됩니다. 각 장치는 링을 따라 순차적으로 전달되는 로컬 Q와 KV 청크 간의 attention을 계산합니다. 메모리 사용량이 낮아(한 번에 KV의 1/N만 보유), 계산과 통신이 오버랩되지만, 모든 토큰을 확인하려면 N번의 반복이 필요합니다. 메모리/대역폭이 제한된 긴 시퀀스에 가장 적합합니다. 컨텍스트 병렬 영역 내에서 ring attention에 사용할 장치의 수입니다. 컨텍스트 병렬 메시의 총 장치 수의 약수여야 합니다. | |
| ulysses_degree (`int`, *선택 사항*, 기본값 `1`) : Ulysses Attention에 사용할 장치의 수입니다. 시퀀스는 장치 간에 분할됩니다. 각 장치는 로컬 QKV를 계산한 후, 모든 KV 청크를 all-gather하여 한 번의 패스에서 전체 attention을 계산합니다. 메모리 사용량이 높으며(모든 KV를 저장), 높은 대역폭의 all-to-all 통신이 필요하지만 지연 시간은 낮습니다. 중간 수준의 시퀀스와 좋은 인터커넥트 대역폭을 가진 환경에 가장 적합합니다. | |
| convert_to_fp32 (`bool`, *선택 사항*, 기본값 `True`) : ring attention의 수치적 안정성을 위해 출력과 LSE를 float32로 변환할지 여부. | |
| rotate_method (`str`, *선택 사항*, 기본값 `"allgather"`) : ring attention에서 장치를 따라 key/value 상태를 순환시키기 위해 사용할 방법입니다. 현재 `"allgather"`만 지원됩니다. | |
| ulysses_anything (`bool`, *선택 사항*, 기본값 `False`) : `ulysses_degree`로 나누어 떨어지지 않는 임의의 시퀀스 길이와 헤드 수를 지원하는 "Ulysses Anything" 모드를 활성화할지 여부입니다. 활성화하면 `ulysses_degree`는 1보다 커야 하고 `ring_degree`는 1이어야 합니다. | |
| ring_anything (`bool`, *선택 사항*, 기본값 `False`) : 임의의 시퀀스 길이를 지원하는 "Ring Anything" 모드를 활성화할지 여부입니다. 활성화하면 `ring_degree`는 1보다 커야 하고 `ulysses_degree`는 1이어야 합니다. | |
| mesh (`torch.distributed.device_mesh.DeviceMesh`, *선택 사항*) : 컨텍스트 병렬성에 사용할 사용자 정의 디바이스 메시입니다. 제공된 경우, 새 메시를 생성하는 대신 이 메시가 사용됩니다. 이는 컨텍스트 병렬성을 동일한 디바이스 메시를 공유하는 다른 병렬성 전략(예: FSDP, 텐서 병렬성)과 결합할 때 유용합니다. 메시에는 "ring" 및 "ulysses" 차원이 모두 있어야 합니다. 사용하지 않는 차원의 크기는 1로 설정합니다(예: FSDP와 함께 ring attention만 사용할 경우 `mesh_shape=(2, 1, 4)` 및 `mesh_dim_names=("ring", "ulysses", "fsdp")`). | |
| 컨텍스트 병렬성을 위한 구성 | |
| #### diffusers.hooks.apply_context_parallel[[diffusers.hooks.apply_context_parallel]] | |
| ```python | |
| diffusers.hooks.apply_context_parallel(module: Module, parallel_config: ContextParallelConfig, plan: dict) | |
| ``` | |
| [소스](https://github.com/huggingface/diffusers/blob/main/src/diffusers/hooks/context_parallel.py#L80) | |
| Apply context parallel on a model. | |
| ## 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`, *선택 사항*) : 사용할 커스텀 device mesh입니다. 제공된 경우, `tp_degree`는 `mesh.size()`에서 추론되며 해당 인수는 무시됩니다. 동일한 mesh를 공유하는 다른 병렬화 전략(예: CP)과 TP를 결합할 때 유용합니다. | |
| tensor parallelism에 대한 구성입니다. | |
| Tensor parallelism은 가중치 행렬을 장치 간에 분할(열 방향 및 행 방향)합니다. 각 장치는 부분 결과를 계산하고, 레이어 경계에서의 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#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`인 경우, 포워드 훅만 등록됩니다. 체크포인트에서 누락된 계획된 파라미터는 여전히 메타 텐서이므로, 실제로는 절반만 샤딩된 모델에 대해 "샤딩되지 않음"으로 판별될 수 있기 때문에, 감지 대신 명시적으로 전달됩니다. | |
| `_tp_plan`가 평탄화된 모델에 텐서 병렬을 적용합니다. | |
Xet Storage Details
- Size:
- 8.1 kB
- Xet hash:
- caf10ecf8bed7723bb3e34444c2f657bc9bd67a7afec444a32ae6090f2a1e881
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.