Diffusers documentation
AutoRound
AutoRound
AutoRound هو مجموعة أدوات متقدمة للكمّية. يحقق دقة عالية عند عرض بت منخفض للغاية (2-4 بت) مع ضبطٍ محدود، وذلك بالاستفادة من هبوط التدرّج الإشاري وتوفير توافق واسع مع الأجهزة. راجع أبحاثنا SignRoundV1 وSignRoundV2 لمزيد من التفاصيل.
قم بتثبيت auto-round (الإصدار ≥ 0.13.0):
pip install "auto-round>=0.13.0"لاستخدام نواة Marlin للاستدلال الأسرع على CUDA، ثبّت gptqmodel:
pip install "gptqmodel>=5.8.0"تحميل نموذج مُكمَّم
قم بتحميل نموذج AutoRound مُكمَّم مسبقًا عن طريق تمرير AutoRoundConfig إلى from_pretrained(). يعمل هذا الأسلوب مع أي نموذج يُحمَّل عبر Accelerate ويحتوي على طبقات torch.nn.Linear.
يمكنك استخدام PipelineQuantizationConfig لتكميم مكونات محددة من خط الأنابيب:
import torch
from diffusers import DiffusionPipeline, PipelineQuantizationConfig, AutoRoundConfig
pipeline_quant_config = PipelineQuantizationConfig(
quant_mapping={"transformer": AutoRoundConfig(backend="auto")}
)
pipe = DiffusionPipeline.from_pretrained(
"INCModel/Z-Image-W4A16-AutoRound",
quantization_config=pipeline_quant_config,
dtype=torch.bfloat16,
device_map="cuda", # or "mps", "xpu", "cpu"
)
image = pipe("a cat holding a sign that says hello").images[0]
image.save("output.png")أو حمّل مكوّن نموذج مُكمَّم مباشرةً:
import torch
from diffusers import ZImageTransformer2DModel, ZImagePipeline, AutoRoundConfig
model_id = "INCModel/Z-Image-W4A16-AutoRound"
quantization_config = AutoRoundConfig(backend="auto")
transformer = ZImageTransformer2DModel.from_pretrained(
model_id,
subfolder="transformer",
quantization_config=quantization_config,
dtype=torch.bfloat16,
device_map="cuda", # or "mps", "xpu", "cpu"
)
pipe = ZImagePipeline.from_pretrained(
model_id,
transformer=transformer,
dtype=torch.bfloat16,
device_map="cuda",
)
image = pipe("a cat holding a sign that says hello").images[0]
image.save("output.png")يدعم AutoRound في Diffusers تحميل النماذج المكمّمة مسبقًا فقط. ولكي تُكمّم نموذجًا من الصفر، استخدم AutoRound CLI أو واجهة Python API مباشرة، ثم حمّل النتيجة باستخدام Diffusers.
torch.compile
يتوافق AutoRound مع torch.compile للحصول على استدلال أسرع. يمكنك تجميع المحوّل الكمي (DiT) لتحسين الأداء:
import torch
from diffusers import DiffusionPipeline, PipelineQuantizationConfig, AutoRoundConfig
pipeline_quant_config = PipelineQuantizationConfig(
quant_mapping={"transformer": AutoRoundConfig(backend="auto")}
)
pipe = DiffusionPipeline.from_pretrained(
"INCModel/Z-Image-W4A16-AutoRound",
quantization_config=pipeline_quant_config,
dtype=torch.bfloat16,
device_map="cuda", # or "mps", "xpu", "cpu"
)
pipe.transformer = torch.compile(pipe.transformer, mode="default", fullgraph=False)واجهات الخلفية
يدعم AutoRound عدة محركات استنتاج لنماذج الكمّية على مستوى الأوزان فقط. يتحكم المحرك في النواة التي تتعامل مع فكّ الكمّية أثناء المرور الأمامي. اضبط معامل backend في AutoRoundConfig لاختيار أحد المحركات:
| الواجهة الخلفية | القيمة | الجهاز | المتطلبات | ملاحظات |
|---|---|---|---|---|
| Auto | "auto" | أي | — | الافتراضي. يختار تلقائيًا أفضل واجهة خلفية متاحة. |
| PyTorch | "torch" | CPU / CUDA | — | تنفيذ نقي باستخدام PyTorch. أوسع توافق. |
| تريتون | "tritonv2" | CUDA | triton | نواة مبنية على Triton للاستدلال على وحدة معالجة الرسوميات. |
| ExllamaV2 | "exllamav2" | CUDA | gptqmodel>=5.8.0 | أداء جيد لـ CUDA عبر نواة ExllamaV2. |
| Marlin | "marlin" | CUDA | gptqmodel>=5.8.0 | أفضل أداء لـ CUDA عبر نواة Marlin. |
from diffusers import AutoRoundConfig
# Auto-select (default)
config = AutoRoundConfig()
# Explicit Triton backend for CUDA
config = AutoRoundConfig(backend="tritonv2")
# Marlin backend for best CUDA performance (requires gptqmodel>=5.8.0)
config = AutoRoundConfig(backend="marlin")
# ExllamaV2 backend for good CUDA performance (requires gptqmodel>=5.8.0)
config = AutoRoundConfig(backend="exllamav2")
# PyTorch backend for CPU/CUDA inference
config = AutoRoundConfig(backend="torch")الحفظ والتحميل
يتطلب AutoRound معايرة البيانات لكي يقوم بتكميم النموذج. يتم ذلك خارج Diffusers باستخدام مكتبة AutoRound مباشرةً:
from auto_round import AutoRound
autoround = AutoRound(
"Tongyi-MAI/Z-Image",
scheme="W4A16", # W4G128 symmetric
enable_torch_compile=True,
num_inference_steps=3,
guidance_scale=7.5,
dataset="coco2014",
)
autoround.quantize_and_save("Z-Image-W4A16-AutoRound")لمزيد من التفاصيل حول خيارات المعايرة، راجع توثيق AutoRound.
import torch
from diffusers import ZImageTransformer2DModel, ZImagePipeline
model_id = "INCModel/Z-Image-W4A16-AutoRound"
# The inference backend will be automatically selected.
pipe = ZImagePipeline.from_pretrained(
model_id,
dtype=torch.bfloat16,
device_map="cuda", # or "mps", "xpu", "cpu"
)
image = pipe("a cat holding a sign that says hello").images[0]
image.save("output.png")مخططات الكمّات المدعومة
يدعم AutoRound عدة مخططات:
- W4A16(bits:4,group_size:128,sym:True,act_bits:16)
- W8A16(bits:8,group_size:128,sym:True,act_bits:16)
- W3A16(bits:3,group_size:128,sym:True,act_bits:16)
- W2A16(bits:2,group_size:128,sym:True,act_bits:16)
- GGUF:Q4_K_M(جميع أنواع Q_K,Q_0,Q*_1 التي يوفرها llamacpp مدعومة)
- NVFP4 (ميزة تجريبية، يُنصح بالتصدير إلى صيغة
llm_compressordata_type nvfp4,act_data_type nvfp4,static_global_scale,group_size 16) - MXFP4(ميزة بحثية، لا يوجد نواة حقيقية، MXFP4 القياسي، data_type mxfp,act_data_type mxfp,bits 4, act_bits 4, group_size 32)
- MXINT4(ميزة بحثية، لا يوجد نواة حقيقية، MXINT4 القياسية، data_type mxint,act_data_type mxint,bits 4, act_bits 4, group_size 32)
- MXFP4_RCEIL(ميزة بحثية، لا يوجد نواة حقيقية، متغير NVIDIA، data_type mxfp، act_data_type mxfp_rceil، bits 4، act_bits 4، group_size 32)
- MXFP8(ميزة بحثية، لا يوجد نواة حقيقية، data_type mxfp,act_data_type mxfp_rceil,group_size 32)
- FPW8A16(ميزة بحثية، لا يوجد نواة حقيقية، data_type fp8,group_size 0->per tensor )
- FP8_STATIC(ميزة بحثية، لا يوجد نواة حقيقية، data_type:fp8، act_data_type:fp8، group_size -1 -> لكل قناة، act_group_size=0-> لكل مخطط)
علاوة على ذلك، يمكنك تعديل group_size وbits وsym وكثير من الإعدادات الأخرى التي تريدها، على الرغم من أنه قد لا توجد نواة حقيقية.