Buckets:

mishig's picture
|
download
raw
8.44 kB

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_compressor data_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 وكثير من الإعدادات الأخرى التي تريدها، على الرغم من أنه قد لا توجد نواة حقيقية.

الموارد

Xet Storage Details

Size:
8.44 kB
·
Xet hash:
745154b9a0e5cb2e73e40cdbe0d741813232a0c8cb10d9bd1cd5ac9bb07d5824

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.