Transformers documentation
Bốn trên Sáu
Bốn trên Sáu
Four Over Six là một thư viện để thực hiện lượng tử hóa FP4 nhanh và chính xác, đặc biệt với định dạng NVFP4 trên GPU NVIDIA Blackwell. Phương pháp của chúng tôi tự động điều chỉnh tỷ lệ các khối NVFP4 thành 4 hoặc 6 để giảm sai số lượng tử hóa trên các giá trị gần cực đại trong mỗi khối, như đã mô tả trong bản thảo của chúng tôi.

Cài đặt của chúng tôi chạy hiệu quả nhất trên GPU NVIDIA Blackwell. Tuy nhiên, bạn vẫn có thể chạy Four Over Six trên phần cứng cũ hơn, và thậm chí trên CPU, mà không cần thay đổi bất kỳ dòng mã nào, vì trong các trường hợp này, framework của chúng tôi sẽ tự động chuyển sang một cài đặt thực hiện mô phỏng bằng phép nhân ma trận FP32.
Để lượng tử hóa một mô hình thành NVFP4 với 4/6, bạn có thể tải mô hình của mình như sau:
from transformers import AutoModelForCausalLM, FourOverSixConfig
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen3-8B",
device_map="auto",
quantization_config=FourOverSixConfig(),
)Chúng tôi hỗ trợ nhiều tùy chọn lượng tử hóa khác nhau thường được sử dụng trong quá trình lượng tử hóa NVFP4, bao gồm biến đổi Hadamard ngẫu nhiên, mở rộng khối 2D, đầu vào chuyển vị và làm tròn ngẫu nhiên, như đã mô tả trong bản thảo của chúng tôi.
Các tùy chọn này có thể được sử dụng bằng cách đặt tùy chọn phù hợp trong FourOverSixConfig được truyền ở trên.
Các lớp riêng lẻ có thể được gán các tùy chọn lượng tử hóa tùy chỉnh bằng cách đặt module_config_overrides, hoặc được loại trừ khỏi lượng tử hóa bằng cách đặt modules_to_not_convert, như minh họa bên dưới.
Huấn luyện
Tầng tuyến tính đã lượng tử hóa của chúng tôi bao gồm một triển khai cho quá trình truyền ngược, do đó nhiều mô hình có thể được huấn luyện thêm với ít thay đổi.
Hãy đảm bảo đặt keep_master_weights thành True, và loại trừ các tầng khỏi quá trình lượng tử hóa khi cần (thường rất quan trọng để giữ một vài tầng cuối cùng của mạng ở độ chính xác cao):
from transformers import AutoModelForCausalLM, FourOverSixConfig
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen3-8B",
device_map="auto",
quantization_config=FourOverSixConfig(
keep_master_weights=True,
modules_to_not_convert=[
"lm_head",
"model.layers.34.self_attn.q_proj",
"model.layers.34.self_attn.k_proj",
"model.layers.34.self_attn.v_proj",
# Add more layers here, e.g. self_attn.o_proj, MLP layers
],
),
)