Buckets:
| # NVIDIA ModelOpt | |
| [NVIDIA-ModelOpt](https://github.com/NVIDIA/Model-Optimizer) هو مكتبة موحدة تجمع بين أحدث تقنيات تحسين النماذج مثل التكميم (quantization) والتقليم (pruning) والتقطير (distillation) وفك التشفير التخميني (speculative decoding) وغيرها. يقوم هذا الأداة بضغط نماذج التعلم العميق من أجل أطر النشر اللاحقة مثل TensorRT-LLM أو TensorRT بغرض تحسين سرعة الاستدلال. | |
| قبل أن تبدأ، تأكد من تثبيت nvidia_modelopt. | |
| ```bash | |
| pip install -U "nvidia_modelopt[hf]" | |
| ``` | |
| قم بتكميم نموذج عن طريق تمرير `NVIDIAModelOptConfig` إلى [from_pretrained()](/docs/diffusers/v0.43.0/ar/api/models/overview#diffusers.ModelMixin.from_pretrained) (يمكنك أيضًا تحميل نماذج مُكمَّمة مسبقًا). يعمل هذا مع أي نموذج في أي نمط، طالما أنه يدعم التحميل باستخدام [Accelerate](https://hf.co/docs/accelerate/index) ويحتوي على طبقات `torch.nn.Linear`. | |
| يكمم المثال أدناه الأوزان إلى FP8 فقط. | |
| ```python | |
| import torch | |
| from diffusers import AutoModel, SanaPipeline, NVIDIAModelOptConfig | |
| model_id = "Efficient-Large-Model/Sana_600M_1024px_diffusers" | |
| dtype = torch.bfloat16 | |
| quantization_config = NVIDIAModelOptConfig(quant_type="FP8", quant_method="modelopt") | |
| transformer = AutoModel.from_pretrained( | |
| model_id, | |
| subfolder="transformer", | |
| quantization_config=quantization_config, | |
| dtype=dtype, | |
| ) | |
| pipe = SanaPipeline.from_pretrained( | |
| model_id, | |
| transformer=transformer, | |
| dtype=dtype, | |
| ) | |
| pipe.to("cuda") # or "mps", "xpu", "cpu" | |
| print(f"Pipeline memory usage: {torch.cuda.max_memory_reserved() / 1024**3:.3f} GB") | |
| prompt = "A cat holding a sign that says hello world" | |
| image = pipe( | |
| prompt, num_inference_steps=50, guidance_scale=4.5, max_sequence_length=512 | |
| ).images[0] | |
| image.save("output.png") | |
| ``` | |
| > **ملاحظة:** | |
| > | |
| > صُممت طرق التكميم في NVIDIA-ModelOpt لتقليل البصمة الذاكرة لأوزان النموذج باستخدام تقنيات متنوعة من التدريب الواعي بالتكميم (QAT) والتكميم بعد التدريب (PTQ) مع الحفاظ على أداء النموذج. ومع ذلك، يعتمد المكسب الفعلي في الأداء أثناء الاستدلال على إطار النشر (مثل TRT-LLM، TensorRT) وتكوين العتاد المحدد. | |
| > | |
| > يمكن العثور على مزيد من التفاصيل [هنا](https://github.com/NVIDIA/Model-Optimizer/tree/main/examples). | |
| ## NVIDIAModelOptConfig | |
| تقبل فئة `NVIDIAModelOptConfig` ثلاثة معلمات: | |
| - `quant_type`: قيمة نصية تشير إلى أحد أنواع التكميم أدناه. | |
| - `modules_to_not_convert`: قائمة بأسماء الوحدات الكاملة أو الجزئية التي يجب عدم إجراء التكميم (Quantization) عليها. على سبيل المثال، لتجنب أي تكميم في كتل الإسقاط (projection blocks) الخاصة بـ [SD3Transformer2DModel](/docs/diffusers/v0.43.0/ar/api/models/sd3_transformer2d#diffusers.SD3Transformer2DModel) ضمن pos_embed، يجب تحديد: `modules_to_not_convert=["pos_embed.proj.weight"]`. | |
| - `disable_conv_quantization`: قيمة منطقية، عند ضبطها على `True` تُعطّل التكميم لجميع طبقات الالتفاف في النموذج. وهذا مفيد لأن تكميم القنوات والكتل لا يعمل بشكل جيد عادةً مع طبقات الالتفاف (المستخدمة مع INT4 وNF4 وNVFP4). إذا كنت ترغب في تعطيل التكميم لطبقات التمرير المحددة، فاستخدم `modules_to_not_convert` بدلاً من ذلك. | |
| - `algorithm`: الخوارزمية المستخدمة لتحديد المقياس، والافتراضي هو `"max"`. يمكنك الاطلاع على توثيق modelopt للاطلاع على خوارزميات وتفاصيل إضافية. | |
| - `forward_loop`: دالة حلقة الأمامي المستخدمة لمعايرة التنشيط أثناء التكميم. إذا لم تُقدَّم، تعتمد على قيم المقياس الثابتة المحسوبة باستخدام الأوزان فقط. | |
| - `kwargs`: قاموس من معاملات الكلمات المفتاحية التي سيتم تمريرها إلى طريقة التكميم الأساسية التي سيتم استدعاؤها بناءً على `quant_type`. | |
| ## أنواع التكميم المدعومة | |
| يدعم ModelOpt تكميم الأوزان فقط، والقنوات، والكتل بصيغ int8 وfp8 وint4 وnf4 وnvfp4. صُممت طرق التكميم لتقليل البصمة الذاكرة لأوزان النموذج مع الحفاظ على أداء النموذج أثناء الاستدلال. | |
| تخزين التكميم على الأوزان فقط يحفظ أوزان النموذج في نوع بيانات منخفض البتات محدد، لكنه يؤدي العمليات الحسابية بنوع بيانات أعلى دقة، مثل `bfloat16`. وهذا يقلل من متطلبات الذاكرة الناتجة عن أوزان النموذج، مع الحفاظ على ذروات الذاكرة اللازمة لحساب التنشيطات. | |
| طرق التكميم المدعومة هي على النحو التالي: | |
| | **نوع التكميم** | **الأنظمة المدعومة** | **معلمات الإلزامية** | **ملاحظات إضافية** | | |
| |-----------------------|-----------------------|---------------------|----------------------| | |
| | **INT8** | `int8 weight only`, `int8 channel quantization`, `int8 block quantization` | `quant_type`, `quant_type + channel_quantize`, `quant_type + channel_quantize + block_quantize` | | |
| | **FP8** | `fp8 weight only`, `fp8 channel quantization`, `fp8 block quantization` | `quant_type`, `quant_type + channel_quantize`, `quant_type + channel_quantize + block_quantize` | | |
| | **INT4** | `int4 weight only`, `int4 block quantization` | `quant_type`, `quant_type + channel_quantize + block_quantize` | `channel_quantize = -1 is only supported for now`| | |
| | **NF4** | `nf4 weight only`, `nf4 double block quantization` | `quant_type`, `quant_type + channel_quantize + block_quantize + scale_channel_quantize` + `scale_block_quantize` | `channel_quantize = -1 and scale_channel_quantize = -1 are only supported for now` | | |
| | **NVFP4** | `nvfp4 weight only`, `nvfp4 block quantization` | `quant_type`, `quant_type + channel_quantize + block_quantize` | `channel_quantize = -1 is only supported for now`| | |
| راجع [وثائق modelopt الرسمية](https://nvidia.github.io/Model-Optimizer/) لفهم أفضل لطرق التكميم المتاحة والقائمة الشاملة لخيارات التكوين المتوفرة. | |
| ## تسلسل وفك تسلسل النماذج المُكمّاة | |
| لتسلسل نموذج مُكمَّم في نوع بيانات محدد، حمّل النموذج أولاً بنوع بيانات الكمّ المطلوب ثم احفظه باستخدام طريقة [save_pretrained()](/docs/diffusers/v0.43.0/ar/api/models/overview#diffusers.ModelMixin.save_pretrained). | |
| ```python | |
| import torch | |
| from diffusers import AutoModel, NVIDIAModelOptConfig | |
| from modelopt.torch.opt import enable_huggingface_checkpointing | |
| enable_huggingface_checkpointing() | |
| model_id = "Efficient-Large-Model/Sana_600M_1024px_diffusers" | |
| quant_config_fp8 = {"quant_type": "FP8", "quant_method": "modelopt"} | |
| quant_config_fp8 = NVIDIAModelOptConfig(**quant_config_fp8) | |
| model = AutoModel.from_pretrained( | |
| model_id, | |
| subfolder="transformer", | |
| quantization_config=quant_config_fp8, | |
| dtype=torch.bfloat16, | |
| ) | |
| model.save_pretrained('path/to/sana_fp8', safe_serialization=False) | |
| ``` | |
| لتحميل نموذج كمّي مُسلسَل، استخدم طريقة [from_pretrained()](/docs/diffusers/v0.43.0/ar/api/models/overview#diffusers.ModelMixin.from_pretrained). | |
| ```python | |
| import torch | |
| from diffusers import AutoModel, NVIDIAModelOptConfig, SanaPipeline | |
| from modelopt.torch.opt import enable_huggingface_checkpointing | |
| enable_huggingface_checkpointing() | |
| quantization_config = NVIDIAModelOptConfig(quant_type="FP8", quant_method="modelopt") | |
| transformer = AutoModel.from_pretrained( | |
| "path/to/sana_fp8", | |
| subfolder="transformer", | |
| quantization_config=quantization_config, | |
| dtype=torch.bfloat16, | |
| ) | |
| pipe = SanaPipeline.from_pretrained( | |
| "Efficient-Large-Model/Sana_600M_1024px_diffusers", | |
| transformer=transformer, | |
| dtype=torch.bfloat16, | |
| ) | |
| pipe.to("cuda") # or "mps", "xpu", "cpu" | |
| prompt = "A cat holding a sign that says hello world" | |
| image = pipe( | |
| prompt, num_inference_steps=50, guidance_scale=4.5, max_sequence_length=512 | |
| ).images[0] | |
| image.save("output.png") | |
| ``` | |
Xet Storage Details
- Size:
- 8.99 kB
- Xet hash:
- ce462fb5bcb3ed321995489aba2bdf0d6646b1ea35b0200ccf997eacdc2a3cb7
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.