Buckets:

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

Song song

Các chiến lược song song giúp tăng tốc diffusion transformers bằng cách phân phối các phép tính trên nhiều thiết bị, cho phép thời gian suy luận/đào tạo nhanh hơn. Tham khảo hướng dẫn Suy luận phân tán để tìm hiểu thêm.

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)

Nguồn

Tham số:

context_parallel_config (ContextParallelConfig, tùy chọn) : Cấu hình cho song song ngữ cảnh.

tensor_parallel_config (TensorParallelConfig, tùy chọn) : Cấu hình cho song song tensor.

Cấu hình để áp dụng các kiểu song song khác nhau.

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)

Nguồn

Tham số:

ring_degree (int, optional, mặc định là 1) : Số lượng thiết bị để sử dụng cho Ring Attention. Chuỗi được chia đều giữa các thiết bị. Mỗi thiết bị tính toán attention giữa Q cục bộ của nó và các khối KV được truyền tuần tự quanh vòng. Bộ nhớ thấp hơn (chỉ giữ 1/N KV tại một thời điểm), chồng lấp tính toán với truyền thông, nhưng yêu cầu N lần lặp để xem tất cả các token. Tốt nhất cho các chuỗi dài với bộ nhớ/băng thông hạn chế. Số lượng thiết bị để sử dụng cho ring attention trong một vùng context parallel. Phải là ước số của tổng số thiết bị trong lưới context parallel.

ulysses_degree (int, optional, mặc định là 1) : Số lượng thiết bị được sử dụng cho Ulysses Attention. Việc chia chuỗi (sequence split) được thực hiện trên các thiết bị. Mỗi thiết bị tính toán QKV cục bộ, sau đó all-gather tất cả các khối KV để tính toán attention đầy đủ trong một lượt. Tốn nhiều bộ nhớ hơn (lưu trữ tất cả KV), yêu cầu giao tiếp all-to-all băng thông cao, nhưng có độ trễ thấp hơn. Phù hợp nhất cho các chuỗi có độ dài vừa phải với băng thông kết nối tốt.

convert_to_fp32 (bool, tùy chọn, mặc định là True) : Có chuyển đổi đầu ra và LSE sang float32 để đảm bảo ổn định số học cho ring attention hay không.

rotate_method (str, tùy chọn, mặc định là "allgather") : Phương pháp sử dụng để xoay vòng trạng thái key/value giữa các thiết bị trong ring attention. Hiện tại, chỉ hỗ trợ "allgather".

ulysses_anything (bool, tuỳ chọn, mặc định là False) : Có bật chế độ "Ulysses Anything" hay không, chế độ này hỗ trợ độ dài chuỗi và số lượng đầu bất kỳ mà không chia hết cho ulysses_degree. Khi được bật, ulysses_degree phải lớn hơn 1 và ring_degree phải bằng 1.

ring_anything (bool, tùy chọn, mặc định là False) : Có bật chế độ "Ring Anything" hay không, chế độ này hỗ trợ độ dài chuỗi tùy ý. Khi được bật, ring_degree phải lớn hơn 1 và ulysses_degree phải bằng 1.

mesh (torch.distributed.device_mesh.DeviceMesh, tuỳ chọn) : Một device mesh tùy chỉnh để sử dụng cho context parallelism. Nếu được cung cấp, mesh này sẽ được sử dụng thay vì tạo một mesh mới. Điều này hữu ích khi kết hợp context parallelism với các chiến lược song song khác (ví dụ: FSDP, tensor parallelism) cùng chia sẻ một device mesh. Mesh phải có cả hai chiều "ring" và "ulysses". Sử dụng kích thước 1 cho các chiều không được sử dụng (ví dụ: mesh_shape=(2, 1, 4) với mesh_dim_names=("ring", "ulysses", "fsdp") cho ring attention chỉ với FSDP).

Cấu hình cho song song ngữ cảnh.

diffusers.hooks.apply_context_parallel[[diffusers.hooks.apply_context_parallel]]

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

Nguồn

Áp dụng song song ngữ cảnh lên một mô hình.

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)

Nguồn

Tham số:

tp_degree (int, mặc định là 1) : Số lượng thiết bị để chia nhỏ (shard). Phải là ước số của số đầu chú ý (attention heads) (và chiều ẩn FFN) của mô hình được song song hóa.

mesh (torch.distributed.device_mesh.DeviceMesh, tuỳ chọn) : Một device mesh tùy chỉnh để sử dụng. Nếu được cung cấp, tp_degree sẽ được suy ra từ mesh.size() và tham số này sẽ bị bỏ qua. Hữu ích khi kết hợp TP với các chiến lược song song khác (ví dụ: CP) cùng chia sẻ một mesh.

Cấu hình cho song song tensor.

Tensor parallelism chia nhỏ các ma trận trọng số (theo cột và theo hàng) trên các thiết bị. Mỗi thiết bị tính toán một kết quả một phần; một AllReduce/AllGather tại ranh giới giữa các lớp tái tạo đầu ra đầy đủ. Sử dụng torch.distributed.tensor.parallelize_module với các kiểu chia nhỏ ColwiseParallel / RowwiseParallel. Các loại thiết bị được hỗ trợ là "cuda", "neuron" và "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)

Nguồn

Tham số:

model (torch.nn.Module) : Mô hình cần chia nhỏ tại chỗ.

config (TensorParallelConfig) : Cấu hình song song tensor. Lưới thiết bị của nó phải đã được thiết lập bằng config.setup(...).

tp_plan (dict) : Một ánh xạ phẳng từ các glob tên module sang kiểu "colwise"/"rowwise" (hoặc một biến thể đã đóng gói), thường là _tp_plan của mô hình.

weights_already_sharded (bool, mặc định là False) : Xác định xem các tham số đã lập kế hoạch có phải là các shard DTensor hay không, như sau khi tải from_pretrained theo kiểu streaming. Nếu True, chỉ các forward hooks được đăng ký. Tham số này được truyền một cách tường minh thay vì được phát hiện, bởi vì một tham số đã lập kế hoạch nhưng thiếu trong checkpoint vẫn sẽ là một meta tensor và sẽ khiến quá trình phát hiện cho kết quả là “chưa được chia shard” đối với một mô hình thực tế đã được chia shard một phần.

Áp dụng song song tensor lên một mô hình từ _tp_plan phẳng của nó.

Xet Storage Details

Size:
9.14 kB
·
Xet hash:
51e43199ef4b0d239b2a1ab825613cdd736faaa8b448a42332afda4ac92dbb61

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