Diffusers documentation

Suy luận phân tán

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.43.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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ượcCác phần chiaGiảmĐộ trễ cho một promptPhù hợp nhất khi
Song song dữ liệuprompts giữa các bản saokhông có gì, vì mỗi GPU giữ một bản sao đầy đủkhông thay đổimô hình đã vừa vặn và bạn có nhiều prompt
device_mapcác thành phần trên các thiết bịbộ nhớ trọng sốkém hơn một chútmô 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ảnhchuỗi đầu vàobộ nhớ kích hoạtthấp hơncác chuỗi là dài, chẳng hạn như hình ảnh độ phân giải cao hoặc video
Song song tensorcác ma trận trọng sốbộ nhớ trọng sốthấp hơntrọ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 hoặc 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.
  • 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 và ParaAttention cung cấp các triển khai song song ngữ cảnh riêng của chúng.

Update on GitHub