Diffusers documentation
GGUF
GGUF
Định dạng tệp GGUF thường được sử dụng để lưu trữ các mô hình cho suy luận với GGML và hỗ trợ nhiều tùy chọn lượng tử hóa theo khối. Diffusers hỗ trợ nạp các checkpoint đã được lượng tử hóa trước và lưu ở định dạng GGUF thông qua việc nạp from_single_file với các lớp Model. Việc nạp checkpoint GGUF thông qua Pipelines hiện chưa được hỗ trợ.
Ví dụ sau sẽ tải mô hình transformer FLUX.1 DEV bằng cách sử dụng biến thể lượng tử hóa GGUF Q2_K.
Trước khi bắt đầu, vui lòng cài đặt gguf trong môi trường của bạn
pip install -U gguf
Vì GGUF là định dạng tệp đơn, hãy sử dụng ~FromSingleFileMixin.from_single_file để tải mô hình và truyền vào GGUFQuantizationConfig.
Khi sử dụng checkpoint GGUF, trọng lượng đã lượng tử hóa vẫn được giữ ở dtype bộ nhớ thấp (thường là torch.uint8) và được khử lượng tử hóa động rồi chuyển đổi sang compute_dtype đã cấu hình trong mỗi bước truyền tiến (forward pass) của từng module qua mô hình. GGUFQuantizationConfig cho phép bạn thiết lập compute_dtype.
Các hàm được sử dụng cho quá trình khử lượng tử hóa động dựa trên công trình xuất sắc của city96, người đã tạo ra các phiên bản Pytorch của bản triển khai numpy gốc do compilade thực hiện.
import torch
from diffusers import FluxPipeline, FluxTransformer2DModel, GGUFQuantizationConfig
ckpt_path = (
"https://huggingface.co/city96/FLUX.1-dev-gguf/blob/main/flux1-dev-Q2_K.gguf"
)
transformer = FluxTransformer2DModel.from_single_file(
ckpt_path,
quantization_config=GGUFQuantizationConfig(compute_dtype=torch.bfloat16),
dtype=torch.bfloat16,
)
pipe = FluxPipeline.from_pretrained(
"black-forest-labs/FLUX.1-dev",
transformer=transformer,
dtype=torch.bfloat16,
)
pipe.enable_model_cpu_offload()
prompt = "A cat holding a sign that says hello world"
image = pipe(prompt, generator=torch.manual_seed(0)).images[0]
image.save("flux-gguf.png")Sử dụng các nhân CUDA được tối ưu hóa với GGUF
Các kernel CUDA được tối ưu hóa có thể tăng tốc suy luận mô hình lượng tử hóa GGUF lên khoảng 10%. Tính năng này yêu cầu GPU tương thích có torch.cuda.get_device_capability lớn hơn 7 và thư viện kernels:
pip install -U kernels
Sau khi cài đặt, đặt DIFFUSERS_GGUF_CUDA_KERNELS=true để sử dụng các kernel tối ưu khi có sẵn. Lưu ý rằng các kernel CUDA có thể gây ra một số khác biệt nhỏ về mặt số học so với bản triển khai GGUF gốc, có thể dẫn đến những thay đổi tinh tế về mặt hình ảnh trong các hình ảnh được tạo ra. Để tắt việc sử dụng kernel CUDA, đặt biến môi trường DIFFUSERS_GGUF_CUDA_KERNELS=false.
Các kernel GGUF được tải xuống từ kho Isotr0py/ggml, nơi nhà phát hành không phải là nhà phát hành kernel đáng tin cậy trên Hub. Việc tải nó sẽ tải xuống và thực thi mã từ Hub, do đó Diffusers yêu cầu bạn phải xác nhận rõ ràng bằng cách đặt DIFFUSERS_TRUST_REMOTE_KERNELS=true. Xem Trusting remote kernels để biết thêm chi tiết.
Các loại lượng hóa được hỗ trợ
- BF16
- Q4_0
- Q4_1
- Q5_0
- Q5_1
- Q8_0
- Q2_K
- Q3_K
- Q4_K
- Q5_K
- Q6_K
Chuyển đổi sang GGUF
Sử dụng Space bên dưới để chuyển đổi checkpoint Diffusers sang định dạng GGUF để suy luận. chạy chuyển đổi:
import torch
from diffusers import FluxPipeline, FluxTransformer2DModel, GGUFQuantizationConfig
ckpt_path = (
"https://huggingface.co/sayakpaul/different-lora-from-civitai/blob/main/flux_dev_diffusers-q4_0.gguf"
)
transformer = FluxTransformer2DModel.from_single_file(
ckpt_path,
quantization_config=GGUFQuantizationConfig(compute_dtype=torch.bfloat16),
config="black-forest-labs/FLUX.1-dev",
subfolder="transformer",
dtype=torch.bfloat16,
)
pipe = FluxPipeline.from_pretrained(
"black-forest-labs/FLUX.1-dev",
transformer=transformer,
dtype=torch.bfloat16,
)
pipe.enable_model_cpu_offload()
prompt = "A cat holding a sign that says hello world"
image = pipe(prompt, generator=torch.manual_seed(0)).images[0]
image.save("flux-gguf.png")Khi sử dụng checkpoint GGUF ở định dạng Diffusers, bạn bắt buộc phải cung cấp đường dẫn config của model. Nếu config của model nằm trong một subfolder, bạn cũng cần chỉ định đường dẫn đó.