Buckets:

hf-doc-build/doc / diffusers /main /ko /api /parallel.md
mishig's picture
|
download
raw
8.1 kB

병렬성

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

ParallelConfig[[diffusers.ParallelConfig]]

diffusers.ParallelConfig[[diffusers.ParallelConfig]]

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)

소스

매개변수:

context_parallel_config (ContextParallelConfig, 선택 사항) : 컨텍스트 병렬성을 위한 설정입니다.

tensor_parallel_config (TensorParallelConfig, 선택 사항) : 텐서 병렬성 설정입니다.

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

ContextParallelConfig[[diffusers.ContextParallelConfig]]

diffusers.ContextParallelConfig[[diffusers.ContextParallelConfig]]

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)

소스

매개변수:

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]]

diffusers.hooks.apply_context_parallel(module: Module, parallel_config: ContextParallelConfig, plan: dict)

소스

Apply context parallel on a model.

TensorParallelConfig[[diffusers.TensorParallelConfig]]

diffusers.TensorParallelConfig[[diffusers.TensorParallelConfig]]

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)

소스

매개변수:

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]]

diffusers.hooks.apply_tensor_parallel(model: Module, config: TensorParallelConfig, tp_plan: dict, weights_already_sharded: bool = False)

소스

매개변수:

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.