Diffusers documentation

병렬성

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

병렬성

병렬화 전략은 계산을 여러 장치에 분산시켜 추론/학습 시간을 단축함으로써 diffusion transformer의 속도를 높이는 데 도움이 됩니다. 자세한 내용은 Distributed inferece 가이드를 참고하세요.

ParallelConfig

클래스 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 )

매개변수

  • context_parallel_config (ContextParallelConfig, 선택 사항) — 컨텍스트 병렬성을 위한 설정입니다.
  • tensor_parallel_config (TensorParallelConfig, 선택 사항) — 텐서 병렬화를 위한 설정입니다.

서로 다른 병렬성을 적용하기 위한 구성

ContextParallelConfig

class 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 )

매개변수

  • 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) — 링 어텐션의 수치적 안정성을 위해 출력과 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

< >

( module: Moduleparallel_config: ContextParallelConfigplan: dict )

Apply context parallel on a model.

TensorParallelConfig

클래스 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 )

매개변수

  • tp_degree (int, 기본값 1) — 분할할 장치의 수입니다. 병렬화되는 모델의 어텐션 헤드(및 FFN 숨겨진 차원) 수의 약수여야 합니다.
  • mesh (torch.distributed.device_mesh.DeviceMesh, 선택 사항) — 사용할 커스텀 디바이스 메시입니다. 제공된 경우 tp_degree는 mesh.size()에서 추론되며 해당 인수는 무시됩니다. 동일한 메시를 공유하는 다른 병렬화 전략(예: CP)과 TP를 결합할 때 유용합니다.

tensor parallelism에 대한 구성입니다.

Tensor parallelism은 가중치 행렬을 장치 간에(열 방향 및 행 방향) 분할합니다. 각 장치는 부분 결과를 계산하고, 레이어 경계에서의 AllReduce/AllGather가 전체 출력을 재구성합니다. torch.distributed.tensor.parallelize_module을 ColwiseParallel / RowwiseParallel 분할 스타일과 함께 사용합니다. 지원되는 장치 유형은 "cuda", "neuron" 및 "tpu"입니다.

diffusers.hooks.apply_tensor_parallel

< >

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

매개변수

  • model (torch.nn.Module) — 인플레이스로 샤딩할 모델.
  • config (TensorParallelConfig) — Tensor-parallel 설정입니다. 해당 device mesh는 이미 config.setup(...)로 설정되어 있어야 합니다.
  • tp_plan (dict) — 모듈 이름 글롭을 "colwise"/"rowwise" 스타일(또는 패킹된 변형)로 매핑하는 평탄한 매핑으로, 일반적으로 모델의 _tp_plan입니다.
  • weights_already_sharded (bool, 기본값 False) — 계획된 파라미터가 스트리밍 from_pretrained 로드 후와 같이 이미 DTensor 샤드인지 여부입니다. True인 경우, 포워드 훅만 등록됩니다. 체크포인트에서 누락된 계획된 파라미터는 여전히 메타 텐서이므로, 실제로는 절반만 샤딩된 모델에 대해 “샤딩되지 않음”으로 감지될 수 있기 때문에, 이 값은 감지하는 대신 명시적으로 전달됩니다.

_tp_plan가 평탄화된 모델에 텐서 병렬을 적용합니다.

Update on GitHub