# Suy luận phân tán

Suy luận phân tán chia nhỏ khối lượng công việc trên nhiều GPU. Nó hữu ích để nạp các mô hình lớn hơn vào bộ nhớ và để xử lý nhiều prompt cùng lúc.

Diffusers hỗ trợ bốn chiến lược. Mỗi chiến lược có hướng dẫn riêng, và trang này giúp bạn chọn một chiến lược.

## Chọn một chiến lược

Mỗi chiến lược giải quyết một vấn đề khác nhau, vì vậy hãy chọn một chiến lược dựa trên tài nguyên đang giới hạn bạn.

| Chiến lược | Các phần chia | Giảm | Độ trễ cho một prompt | Phù hợp nhất khi |
|---|---|---|---|---|
| [Song song dữ liệu](../optimization/data_parallelism) | prompts giữa các bản sao | không có gì, vì mỗi GPU giữ một bản sao đầy đủ | không thay đổi | mô hình đã vừa vặn và bạn có nhiều prompt |
| [device_map](../optimization/device_map) | các thành phần trên các thiết bị | bộ nhớ trọng số | kém hơn một chút | mô hình không vừa và kết nối giữa các thành phần chậm |
| [Song song ngữ cảnh](../optimization/context_parallelism) | chuỗi đầu vào | bộ nhớ kích hoạt | thấp hơn | các chuỗi là dài, chẳng hạn như hình ảnh độ phân giải cao hoặc video |
| [Song song tensor](../optimization/tensor_parallelism) | các ma trận trọng số | bộ nhớ trọng số | thấp hơn | trọng số của một thành phần không vừa và kết nối giữa các thành phần rất nhanh |

Một số hướng dẫn thực tế:

- Nếu model đã vừa vặn và bạn có nhiều prompts, hãy dùng data parallelism. Nó tăng throughput theo số lượng GPU mà không cần đụng vào model, và giữ nguyên latency của single-prompt. Hãy thiết lập nó bằng [Accelerate](../optimization/data_parallelism#accelerate) hoặc [PyTorch Distributed](../optimization/data_parallelism#pytorch-distributed).
- Nếu trọng số của một thành phần đơn lẻ không vừa, hãy thử tensor parallelism trước, vì nó giảm cả bộ nhớ lẫn độ trễ. Tensor parallelism trao đổi thông tin tại mọi ranh giới khối, do đó cần một liên kết nhanh như NVLink. Trên PCIe, lưu lượng truyền dữ liệu cho mỗi lớp có thể lớn hơn lượng tính toán mà nó tiết kiệm được, và `device_map` sẽ là lựa chọn tốt hơn. `device_map` cũng xử lý được trường hợp các thành phần riêng lẻ đều ổn nhưng tổng thể lại quá lớn.
- Nếu vấn đề nằm ở activations chứ không phải weights, hãy dùng context parallelism. Cách này hữu ích cho các chuỗi dài, chẳng hạn như ảnh lớn và video có nhiều khung hình. Hãy chọn một backend từ các benchmark trong hướng dẫn [Context parallelism](../optimization/context_parallelism).
- Nếu cả trọng số lẫn chuỗi đều quá lớn, Diffusers không thể áp dụng song song hóa tensor và song song hóa ngữ cảnh cho cùng một mô hình. `ParallelConfig` sẽ gây ra lỗi nếu bạn truyền cả hai cấu hình, và `enable_parallelism` không thể được gọi lần thứ hai trên một mô hình đã được song song hóa.

Các tích hợp cộng đồng [xDiT](../optimization/xdit) và [ParaAttention](../optimization/para_attn) cung cấp các triển khai song song ngữ cảnh riêng của chúng.

