پرش به محتوای اصلی
پرش به محتوای مقاله

چطور Nunchaku Lite حجم VRAM مدل‌های انتشار را نصف می‌کند؟

·۱ مرداد ۱۴۰۵۱۰ دقیقه مطالعه
استفاده از استنتاج ۴ بیتی Nunchaku در Diffusers برای تسریع پخش تصویر
استفاده از استنتاج ۴ بیتی Nunchaku در Diffusers برای تسریع پخش تصویر
اشتراک‌گذاری
واقعاً چه چیز جدید است؟

گذار از کوانتش «فقط وزن» به کوانتش «وزن و فعال‌ساز» (W4A4) بدون نیاز به کامپایل محلی CUDA. این اولین بار است که سرعت استنتاج مدل‌های انتشار در کتابخانه Diffusers به‌طور مستقیم از طریق کوانتش فعال‌سازها افزایش می‌یابد.

اگر امروز برای اجرای مدل‌های تبدیل متن به تصویر با خطای کمبود حافظه مواجه می‌شوید، راهکار جدید هگینگ فیس مصرف VRAM شما را تا ۵۰٪ کاهش می‌دهد. این یعنی مدل‌هایی که پیش‌تر فقط روی کارت‌های گرافیکی صنعتی اجرا می‌شدند، اکنون روی سخت‌افزارهای مصرف‌کننده جای می‌گیرند.

بارگذاری یک مدل مدرن تبدیل متن به تصویر با دقت BF16 معمولاً به ۲۰ تا ۳۰ گیگابایت حافظه ویدیویی (VRAM) نیاز دارد؛ سدی سخت که اکثر کاربران خانگی و کارت‌های گرافیکی مصرف‌کننده را از دایره رقابت خارج می‌کند. هگینگ فیس (Hugging Face) برای حل این مشکل، Nunchaku Lite را به‌طور بومی در کتابخانه Diffusers ادغام کرد تا استنتاج ۴ بیتی با کارایی بالا را روی سخت‌افزارهای معمولی ممکن کند.

بسیاری از بک‌اندهای کوانتش فعلی مانند bitsandbytes، GGUF، torchao یا Quanto، تنها روی وزن‌ها تمرکز دارند (Weight-only). این بدان معناست که آن‌ها وزن‌ها را با دقت پایین ذخیره می‌کنند اما در زمان محاسبه، آن‌ها را دوباره به دقت بالا برمی‌گردانند (Dequantize). این روند حافظه را می‌گیرد اما به‌ندرت باعث بهبود سرعت می‌شود و حتی می‌تواند باعث ایجاد یک تأخیر کوچک در زمان اجرا شود.

همان‌طور که در تحلیل قبلی ما درباره‌ی بهینه‌سازی‌های لایه‌های مدل‌های زبانی اشاره کردیم، چالش اصلی همواره تعادل بین دقت و سرعت است. Nunchaku Lite بازی را تغییر می‌دهد و با پیاده‌سازی کوانتش W4A4، هم وزن‌ها و هم فعال‌سازها (Activations) را در دقت ۴ بیتی اجرا می‌کند. این ادغام، فراتر از صرفاً کاهش حافظه است و مستقیماً حلقه حذف نویز (denoising loop) را هدف قرار می‌دهد تا فرآیند تولید تصویر سریع‌تر شود در حالی که ردپای حافظه کوچک باقی می‌ماند.

طبق مستندات فنی، هسته این فناوری SVDQuant است. در مدل‌های ترنسفورمر انتشار (Diffusion Transformers)، وجود مقادیر پرت (Outliers) بزرگ در هر دو بخش وزن‌ها و فعال‌سازها، کوانتش ۴ بیتی را دشوار می‌کند، زیرا این مقادیر پرت باعث کاهش شدید دقت مدل می‌شوند.

SVDQuant این مشکل را با انتقال مقادیر پرت فعال‌سازها به داخل وزن‌ها حل می‌کند. به‌طور دقیق‌تر، SVDQuant سخت‌ترین بخش هر ماتریس وزنی را با یک شاخه کم‌رتبه (Low-rank branch) کوچک ۱۶ بیتی نمایش می‌دهد. سپس باقی‌مانده (Residual) به ۴ بیت کوانت می‌شود.

برای رسیدن به حداکثر سرعت، موتور استنتاج مرجع Nunchaku از کرنل‌های ادغام‌شده (Fused Kernels) استفاده می‌کند. Nunchaku تصویر پایین‌رتبه (Low-rank down projection) را با کرنل کوانتش و تصویر بالا-رتبه (Low-rank up projection) را با کرنل محاسباتی ۴ بیتی ادغام می‌کند. این کار سربار دسترسی به حافظه را که معمولاً با شاخه ۱۶ بیتی همراه است، کاملاً حذف می‌کند.

Nunchaku kernel fusion: the low-rank down projection is fused with input quantization, and the low-rank up projection is fused with the 4-bit matmul

در حالی که نسخه اصلی موتور Nunchaku به مسیرهای اجرای ادغام‌شده‌ی خاص هر مدل وابسته بود — مانند ادغام تصویرهای QKV و کرنل‌های GELU/MLP — این بهینه‌سازی‌ها به چیدمان خاص ماژول‌ها گره خورده بودند و پشتیبانی از یک خانواده مدل جدید معمولاً نیازمند کارهای ادغام دستی بود.

Nunchaku Lite یک مسیر ادغام عمومی (Generic) را در Diffusers ارائه می‌دهد. در لایه‌های زیرین، این سیستم پیش از بارگذاری چک‌پوینت، ماژول‌های nn.Linear مربوطه در یک مدل استاندارد Diffusers را با لایه‌های خطی SVDQ/AWQ در زمان اجرا جایگزین (Patch) می‌کند. در این حالت، دیگر نیازی به کلاس خط لوله (Pipeline) سفارشی یا موتور استنتاج مجزا نیست و هیچ کامپایل محلی CUDA مورد نیاز نمی‌باشد. کرنل‌های NVFP4 در اولین بار استفاده، از طریق بسته kernels از هاب دانلود می‌شوند.

این سیستم از دو خانوادهٔ کرنل متمایز استفاده می‌کند:

  • svdq_w4a4: برای بخش‌های توجه (Attention) و تصویرهای MLP ترنسفورمر که تقریباً تمام محاسبات در آنجا انجام می‌شود. این کرنل در دو مدل INT4 و NVFP4 موجود است و از وزن‌ها و فعال‌سازهای ۴ بیتی با اصلاح کم‌رتبه SVDQuant استفاده می‌کند.
  • awq_w4a16: دارای وزن‌های ۴ بیتی و فعال‌سازهای ۱۶ بیتی. این کرنل برای لایه‌های حساس به دقت و محدود به حافظه (Memory-bound) مانند تصویرهای نرمال‌سازی تطبیقی و مدولاسیون (به عنوان مثال adanorm_single/adanorm_zero در مدل FLUX یا لایه‌های مدولاسیون Qwen-Image) استفاده می‌شود تا کیفیت مدل حفظ شود.

Nunchaku Lite image quality and performance comparison

بارگذاری یک مدل Nunchaku Lite به‌سادگی فراخوانی from_pretrained() است. کاربران تنها با نصب پیش‌نیازهای لازم:
pip install -U diffusers transformers accelerate kernels bitsandbytes
می‌توانند شروع کنند.

یک پیاده‌سازی نمونه با استفاده از ErnieImagePipeline به این صورت است:

import torch
from diffusers import ErnieImagePipeline

pipe = ErnieImagePipeline.from_pretrained(
    "lite-infer/ERNIE-Image-Turbo-nunchaku-lite-nvfp4_r32-bnb4-text-encoder",
    torch_dtype=torch.bfloat16,
).to("cuda")

image = pipe(
    prompt="A cinematic portrait of a red fox in a misty forest at sunrise, detailed fur, volumetric light",
    height=1024, width=1024, num_inference_steps=8, guidance_scale=1.0,
    generator=torch.Generator("cuda").manual_seed(42),
).images[0]
image.save("output.png")

یک مخزن Nunchaku Lite در واقع همان مخزن استاندارد Diffusers است که تنها با یک بلوک quantization_config در فایل config.json ترنسفورمر متمایز می‌شود:

"quantization_config": {
  "quant_method": "nunchaku_lite",
  "compute_dtype": "bfloat16",
  "svdq_w4a4": {
    "precision": "nvfp4",
    "group_size": 16,
    "rank": 32,
    "targets": [ "layers.0.self_attention.to_q", "layers.0.self_attention.to_k", "..." ]
  },
  "awq_w4a16": {
    "precision": "int4",
    "group_size": 64,
    "targets": [ "adaLN_modulation.1", "..." ]
  }
}

این پیکربندی پارامترهای زیر را مشخص می‌کند:

  • quant_method: روی "nunchaku_lite" تنظیم شده است.
  • compute_dtype: معمولاً "bfloat16" است.
  • جزئیات svdq_w4a4: شامل دقت (مثلاً "nvfp4")، اندازه گروه (۱۶)، رتبه یا Rank (۳۲) و فهرستی از ماژول‌های هدف مانند layers.0.self_attention.to_q.
  • جزئیات awq_w4a16: شامل دقت (مثلاً "int4")، اندازه گروه (۶۴) و اهدافی مانند adaLN_modulation.1.

از آنجا که مدل کوانتیده دقیقاً همان ساختار ماژول‌های نسخه متراکم (Dense) را حفظ می‌کند، تمامی ابزارهای پایین‌دستی — از جمله زمان‌بندها (Schedulers)، قلاب‌های بارگذاری لورا (LoRA)، سیستم‌های Offloading و torch.compile — آن را به عنوان یک مدل عادی Diffusers می‌بینند. جزئیات بیشتر درباره فرمت چک‌پوینت در مستندات رسمی Diffusers موجود است.

پشتیبانی سخت‌افزاری بر اساس نسل GPU و دقت چک‌پوینت تقسیم شده است. کوانتایزر در زمان بارگذاری، قابلیت CUDA گرافیک را اعتبارسنجی کرده و به‌جای تولید خروجی‌های نادرست، خطای واضحی صادر می‌کند:

  • NVFP4 (SVDQ W4A4): نیازمند پردازنده‌های NVIDIA Blackwell (سری RTX 50، RTX PRO 6000، B200).
  • INT4 (SVDQ W4A4 و AWQ W4A16): پشتیبانی از معماری‌های Turing، Ampere و Ada (سری RTX 30 و 40، A100، L40S).
  • عدم پشتیبانی: پردازنده‌های Volta و Hopper در حال حاضر توسط این کرنل‌های ۴ بیتی پشتیبانی نمی‌شوند.

بنچمارک‌های روی یک NVIDIA RTX PRO 6000 (Blackwell) با استفاده از مدل rootonchair/ERNIE-Image-Turbo-nunchaku-lite-int4-bnb4-text-encoder در ابعاد ۱۰۲۴ در ۱۰۲۴ بهبودهای قابل‌توجهی را نشان می‌دهد:

  • پایه BF16: تأخیر کلی (End-to-end) ۳.۰۰ ثانیه، حلقه حذف نویز ۲.۸۶ ثانیه و پیک VRAM ۳۱.۱ گیگابایت.
  • Nunchaku Lite NVFP4: تأخیر کلی ۲.۲۷ ثانیه، حلقه حذف نویز ۲.۱۳ ثانیه و VRAM ۲۰.۶ گیگابایت (۱.۳۵ برابر سریع‌تر).
  • Nunchaku Lite NVFP4 + torch.compile: تأخیر کلی ۱.۶۸ ثانیه، حلقه حذف نویز ۱.۵۳ ثانیه و VRAM ۲۰.۶ گیگابایت (۱.۸ برابر سریع‌تر).
  • Nunchaku Lite NVFP4 + NF4 Text Encoder: تأخیر کلی ۲.۲۹ ثانیه، حلقه حذف نویز ۲.۱۳ ثانیه و VRAM ۱۶.۰ گیگابایت.

BF16 and Nunchaku Lite outputs for a red fox prompt

بهینه‌سازی‌های تکمیلی شامل torch.compile است که می‌توان آن را از طریق pipe.transformer.compile(fullgraph=True) یا روش سریع‌تر pipe.transformer.compile_repeated_blocks(fullgraph=True) اعمال کرد. این کار شتاب کلی را از ۱.۳۵ برابر به ۱.۸ برابر می‌رساند.

علاوه بر این، کوانتایز کردن رمزگذارهای متنی (مانند T5 یا Qwen3) با استفاده از NF4 در bitsandbytes، پیک VRAM را در این بنچمارک‌ها تقریباً ۲۲٪ کاهش می‌دهد. ابزارهای کمکی Offloading در Diffusers مانند enable_model_cpu_offload() و enable_sequential_cpu_offload() نیز کاملاً سازگار هستند تا مدل در GPUهای کوچک‌تر جای بگیرد.

برای کسانی که می‌خواهند مدل‌های جدید را کوانت کنند، ابزار diffuse-compressor عرضه شده است که اجازه می‌دهد کاربران معماری‌های خود را کالیبره، کوانت، بسته‌بندی و منتشر کنند. با در نظر گرفتن مدل FLUX.2 Klein 4B به عنوان مثال، گردش کار شامل این مراحل است:

مرحله ۱: بازرسی (Inspection)

  • استفاده از اسکنر عمومی برای پیمایش مدل.
  • شناسایی لایه های خطی سازگار در استک تکرارشونده بلوک‌های ترنسفورمر به عنوان اهداف SVDQ W4A4.
  • شناسایی لایه های مدولاسیون شناخته‌شده به عنوان اهداف AWQ W4A16.
  • سایر بخش‌ها متراکم (Dense) باقی می‌مانند.
  • برای FLUX.2 Klein 4B، نتیجه مورد انتظار ۱۰۰ هدف SVDQ، ۳ هدف AWQ و ۶ لایه خطی متراکم بیرونی است.
  • اجرا: python examples/text_to_image/quantize_hf.py black-forest-labs/FLUX.2-klein-4B --precision int4 --rank 32 --inspect-config

مرحله ۲: کوانتش (Quantization)

  • اجرای SVDQuant روی ترنسفورمر و نوشتن چک‌پوینت در قالب .safetensors.
  • جایگزینی --precision int4 با nvfp4 برای ساخت وزن‌های بومی Blackwell.
  • اجرا: python examples/text_to_image/quantize_hf.py black-forest-labs/FLUX.2-klein-4B --precision int4 --output outputs/checkpoints/svdq-int4_r32-flux-2-klein-4b.safetensors

مرحله ۳: بسته‌بندی (Packaging)

  • ترکیب ترنسفورمر کوانتیده با اجزای پایه خط لوله.
  • نوشتن پیکربندی فشرده nunchaku_lite در فایل transformer/config.json.
  • تبدیل اختیاری رمزگذارهای متنی به NF4.
  • اجرا: python examples/convert_nunchaku_lite_diffusers.py --checkpoint outputs/checkpoints/svdq-int4_r32-flux-2-klein-4b.safetensors --model-id black-forest-labs/FLUX.2-klein-4B --bnb4-text-encoder text_encoder --compute-dtype bfloat16 --output-dir outputs/diffusers/FLUX.2-klein-4B-nunchaku-lite-int4-bnb4-text-encoder

مرحله ۴: تأیید (Verification)

  • بارگذاری از طریق DiffusionPipeline.from_pretrained() برای تأیید کیفیت تصاویر (مثلاً: "یک ربات شیشه‌ای در گلخانه، نورپردازی سینمایی").
  • ارسال به هاب: pipe.push_to_hub("your-name/your-model-nunchaku-lite-int4").

Quality comparison grid

برای کاربرانی که به دنبال حداکثر سرعت هستند، Nunchaku از «بازنویسی‌های ساختاری» (Structural Rewrites) پشتیبانی می‌کند که فراتر از مسیر عمومی است. مسیر عمومی فرض می‌کند معماری ثابت می‌ماند، اما موتور اصلی Nunchaku گروه‌هایی از لایه‌ها را به ماژول‌های ادغام‌شده تبدیل می‌کند.

به عنوان مثال، FLUX.1-dev سه ماژول مجزا را تعریف می‌کند: self.to_q ،self.to_k و self.to_v. Nunchaku این‌ها را با استفاده از fuse_linears() در یک ماژول کوانتیده واحد به نام to_qkv ترکیب می‌کند. این کار ضروری است زیرا اپراتور ادغام‌شده Nunchaku، تصویر QKV، نرمال‌سازی Q/K و رمزگذاری‌های دورانی (Rotary Embeddings) را همگی در یک مرحله مصرف می‌کند.

در مسیر پیش‌فرض Diffusers، اجرا تکه‌تکه است:
۱. تصویر جداگانه توسط to_q ،to_k و to_v.
۲. باز کردن (Unflattening) به صورت سرها (Heads).
۳. نرمال‌سازی توسط norm_q و norm_k.
۴. اعمال رمزگذاری‌های دورانی.

در مقابل، مسیر Nunchaku از fused_qkv_norm_rottary() برای پردازش حالت‌های پنهان، تصویر to_qkv و ماژول‌های نرمال‌سازی و رمزگذاری‌های دورانی در یک کرنل واحد استفاده می‌کند.

این بازنویسی‌های ساختاری از طریق یک پیکربندی هدف مدل-محور در زمان کوانتش و یک آداپتور زمان اجرا در هنگام بارگذاری (مانند موارد ارائه شده توسط rootonchair/nunchaku-lite) مدیریت می‌شوند. این به سیستم اجازه می‌دهد سه ماژول مقصد را با الحاق آن‌ها در امتداد بُعد خروجی به ترتیب Q، K، V در یک ماژول گروهی نگاشت کند. اسکریپت کوانتش FLUX.2 Klein 4B یک نمونه عینی از پیکربندی هدف برای این فرآیند ارائه می‌دهد.

این تغییر رویکرد، کوانتش را از یک «حالت سازگاری» — که هدفش فقط جا شدن مدل در VRAM بود — به یک «حالت شتاب‌دهنده» تبدیل می‌کند. با کوانتش فعال‌سازها، Nunchaku Lite دقیقاً گلوگاه محاسباتی واقعی مدل‌های انتشار را هدف قرار داده است.

برای توسعه‌دهندگان معمولی، این موضوع اصطکاک مربوط به کامپایل سفارشی CUDA را حذف می‌کند. اکنون می‌توان یک مدل ۴ بیتی را از طریق from_pretrained() بارگذاری کرد و فوراً سرعت بیشتری را مشاهده نمود. این کار به‌طور مؤثر مانع سخت‌افزاری برای اجرای ترنسفورمرهای پیشرفته‌ای مانند FLUX روی GPUهای ۱۶ تا ۲۴ گیگابایتی را پایین می‌آورد.

مثالی از یک خط لوله، یک ترنسفورمر Nunchaku NVFP4 را با یک رمزگذار متنی bitsandbytes NF4 جفت می‌کند تا یک تصویر ۱۰۲۴ در ۱۰۲۴ را در ۱.۷ ثانیه روی یک RTX 5090 با ۱۲ گیگابایت پیک حافظه تولید کند (در حالی که برای BF16 نیاز به ۲۴ گیگابایت بود).

اگرچه Nunchaku Lite به دلیل فقدان برخی کرنل‌های ادغام‌شده خاص معماری، کمی کندتر از موتور کامل Nunchaku است، اما پیاده‌سازی پایه آن همچنان حدود ۳۰٪ سرعت را افزایش می‌دهد در حالی که همان سطح کاهش VRAM را حفظ می‌کند. سربار باقی‌مانده عمدتاً ناشی از فراخوانی‌های اضافی کرنل است که torch.compile می‌تواند آن را کاهش دهد.

کاربران می‌توانند با چک‌پوینت‌های آماده در هاب شروع کنند، از جمله:

  • rootonchair/ERNIE-Image-Turbo-nunchaku-lite-int4-bnb4-text-encoder (INT4)
  • rootonchair/ERNIE-Image-Turbo-nunchaku-lite-nvfp4-bnb4-text-encoder (NVFP4)
  • OzzyGT/Krea_2_Turbo_nunchaku_lite_nvfp4 (NVFP4)
  • و مجموعه‌های مختلف از lite-infer.

گام بعدی شما

  • اگر کاربر کارت‌های سری RTX 40 یا 50 هستید، مدل‌های آماده در هاب (مانند نسخه‌های rootonchair) را برای تست سرعت امتحان کنید.
  • برای کاهش بیشتر VRAM، از ترکیب Nunchaku Lite با رمزگذارهای متنی NF4 استفاده کنید.
  • توسعه‌دهندگان مدل‌های بازمتن را توصیه می‌کنیم ابزار diffuse-compressor را برای بهینه‌سازی مدل‌های خود بررسی کنند.

اما داستان سخت‌افزاری این تحول حتی شگفت‌انگیزتر است — به تحلیل ما درباره‌ی تراشه‌های Blackwell مراجعه کنید.

چرا این موضوع مهم است؟

این فناوری با کاهش ۵۰ درصدی VRAM و افزایش ۱.۸ برابری سرعت، دسترسی به مدل‌های پیشرفته تبدیل متن به تصویر را برای کاربران خانگی دموکراتیزه می‌کند. تکیه بر تخصص در مدیریت مقادیر پرت (SVDQuant)، دقت مدل را در عین فشرده‌سازی حفظ کرده است.

تأثیر برای ایران

به‌دلیل ماهیت بازمتن کتابخانه Diffusers و مدل‌های هاب، توسعه‌دهندگان ایرانی می‌توانند بدون نیاز به APIهای پولی، مدل‌های سنگین تبدیل متن به تصویر را روی GPUهایی با حافظه محدود (۱۶ گیگابایت) اجرا کنند.

·نگاه ما
تحریریه دات‌هوش

این به‌روزرسانی نشان می‌دهد که دوران «فقط ذخیره‌سازی» در کوانتش به پایان رسیده و عصر «محاسبات کم‌دقت» آغاز شده است. ادغام فعال‌سازها در مدار ۴ بیتی، مدل‌های انتشار را از شر گلوگاه‌های حافظه رها می‌کند و اجازه می‌دهد مدل‌های غول‌پیکر مثل FLUX روی سخت‌افزار خانگی با سرعت واقعی اجرا شوند. به نظر ما، این حرکت هگینگ فیس، استانداردهای استقرار مدل‌های مولد را از BF16 به سمت فرمت‌های بهینه‌شده‌ی سخت‌افزاری می‌برد.

منابع

این گزارش با خط‌لولهٔ خودکار دات‌هوش از منابع معتبر جهانی تدوین و زیر نظر تحریریه منتشر شده است. روش کار ما

گفتگو

پنج‌شنبه‌های هوش‌محور

بسته‌ی هفتگی دات‌هوش

۵ خبر، ۲ ابزار، ۱ پرامپت در هر شماره. به‌زودی راه‌اندازی می‌شود — هر پنج‌شنبه صبح.

خبر کلیدی
ابزار کاربردی
پرامپت حرفه‌ای
تحلیل پژوهش
به‌زودی
زاویه‌ی ایرانی
به‌زودی
تمرین این هفته
به‌زودی

راهنماهای دات‌هوش

راهنماهای کاربردیِ دات‌هوش برای کار با هوش مصنوعی — از همین‌جا شروع کنید:

دات‌هوش

راهنمای فارسی هوش مصنوعی — با نگاه به ایران

اخبار روزانه، معرفی ابزارها و مدل‌ها، و آموزشِ کار با هوش مصنوعی؛ همیشه با این پرسش که از ایران چه چیزی کار می‌کند و چه چیزی نه.