Buckets:
| # Quanto | |
| > [!WARNING] | |
| > تم إيقاف استخدام وحدة الخلفية Quanto وسيتم إزالتها في الإصدار 1.0.0. يُنصح بالانتقال إلى إحدى وحدات الخلفية الأخرى المدعومة [لتكميم الأرقام](./overview)، مثل [bitsandbytes](./bitsandbytes) أو [torchao](./torchao). | |
| [Quanto](https://github.com/huggingface/optimum-quanto) هو واجهة خلفية لتكميم PyTorch مخصصة لـ [Optimum](https://huggingface.co/docs/optimum/en/index). وقد صُمم مع مراعاة التنوع والبساطة: | |
| - جميع الميزات متاحة في الوضع العاجل (يعمل مع النماذج غير القابلة للتتبع) | |
| - يدعم التدريب الواعي بالكمّ | |
| - النماذج المُكمّمة متوافقة مع `torch.compile` | |
| - النماذج المُكمّمة مستقلة عن الجهاز (مثل CUDA وXPU وMPS وCPU) | |
| للاستفادة من وحدة الخلفية Quanto، ستحتاج أولاً إلى تثبيت `optimum-quanto>=0.2.6` و`accelerate` | |
| ```shell | |
| pip install optimum-quanto accelerate | |
| ``` | |
| الآن يمكنك تكميم نموذج عن طريق تمرير كائن `QuantoConfig` إلى طريقة `from_pretrained()`. على الرغم من أن مكتبة Quanto تسمح بتكميم وحدات `nn.Conv2d` و`nn.LayerNorm`، إلا أن Diffusers يدعم حاليًا تكميم الأوزان في طبقات `nn.Linear` في النموذج فقط. يوضح المقطع التالي كيفية تطبيق تكميم `float8` باستخدام Quanto. | |
| ```python | |
| import torch | |
| from diffusers import FluxTransformer2DModel, QuantoConfig | |
| model_id = "black-forest-labs/FLUX.1-dev" | |
| quantization_config = QuantoConfig(weights_dtype="float8") | |
| transformer = FluxTransformer2DModel.from_pretrained( | |
| model_id, | |
| subfolder="transformer", | |
| quantization_config=quantization_config, | |
| dtype=torch.bfloat16, | |
| ) | |
| pipe = FluxPipeline.from_pretrained(model_id, transformer=transformer, dtype=dtype) | |
| 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") | |
| ``` | |
| ## تخطي التكميم على وحدات محددة | |
| من الممكن تجاوز تطبيق التكميم على وحدات معينة باستخدام الحجة `modules_to_not_convert` في `QuantoConfig`. يرجى التأكد من أن الوحدات المُمررة إلى هذه الحجة تطابق مفاتيح الوحدات في `state_dict` | |
| ```python | |
| import torch | |
| from diffusers import FluxTransformer2DModel, QuantoConfig | |
| model_id = "black-forest-labs/FLUX.1-dev" | |
| quantization_config = QuantoConfig(weights_dtype="float8", modules_to_not_convert=["proj_out"]) | |
| transformer = FluxTransformer2DModel.from_pretrained( | |
| model_id, | |
| subfolder="transformer", | |
| quantization_config=quantization_config, | |
| dtype=torch.bfloat16, | |
| ) | |
| ``` | |
| ## استخدام `from_single_file` مع وحدة الخلفية Quanto | |
| يتوافق `QuantoConfig` مع `~FromOriginalModelMixin.from_single_file`. | |
| ```python | |
| import torch | |
| from diffusers import FluxTransformer2DModel, QuantoConfig | |
| ckpt_path = "https://huggingface.co/black-forest-labs/FLUX.1-dev/blob/main/flux1-dev.safetensors" | |
| quantization_config = QuantoConfig(weights_dtype="float8") | |
| transformer = FluxTransformer2DModel.from_single_file(ckpt_path, quantization_config=quantization_config, dtype=torch.bfloat16) | |
| ``` | |
| ## حفظ النماذج المُكمّاة | |
| يدعم Diffusers تسلسل نماذج Quanto باستخدام الطريقة `~ModelMixin.save_pretrained`. | |
| تختلف متطلبات التسلسل والتحميل بين النماذج المُكمّاة مباشرةً باستخدام مكتبة Quanto والنماذج المُكمّاة باستخدام Diffusers مع اعتماد Quanto كخلفية. ولا يزال من غير الممكن حاليًا تحميل النماذج المُكمّاة مباشرةً باستخدام Quanto داخل Diffusers باستخدام `~ModelMixin.from_pretrained` | |
| ```python | |
| import torch | |
| from diffusers import FluxTransformer2DModel, QuantoConfig | |
| model_id = "black-forest-labs/FLUX.1-dev" | |
| quantization_config = QuantoConfig(weights_dtype="float8") | |
| transformer = FluxTransformer2DModel.from_pretrained( | |
| model_id, | |
| subfolder="transformer", | |
| quantization_config=quantization_config, | |
| dtype=torch.bfloat16, | |
| ) | |
| # save quantized model to reuse | |
| transformer.save_pretrained("<your quantized model save path>") | |
| # you can reload your quantized model with | |
| model = FluxTransformer2DModel.from_pretrained("<your quantized model save path>") | |
| ``` | |
| ## استخدام `torch.compile` مع Quanto | |
| يدعم إطار عمل Quanto حاليًا `torch.compile` لأنواع التكميم التالية: | |
| - أوزان `int8` | |
| ```python | |
| import torch | |
| from diffusers import FluxPipeline, FluxTransformer2DModel, QuantoConfig | |
| model_id = "black-forest-labs/FLUX.1-dev" | |
| quantization_config = QuantoConfig(weights_dtype="int8") | |
| transformer = FluxTransformer2DModel.from_pretrained( | |
| model_id, | |
| subfolder="transformer", | |
| quantization_config=quantization_config, | |
| dtype=torch.bfloat16, | |
| ) | |
| transformer = torch.compile(transformer, mode="max-autotune", fullgraph=True) | |
| pipe = FluxPipeline.from_pretrained( | |
| model_id, transformer=transformer, dtype=dtype | |
| ) | |
| pipe.to("cuda") # or "mps", "xpu", "cpu" | |
| images = pipe("A cat holding a sign that says hello").images[0] | |
| images.save("flux-quanto-compile.png") | |
| ``` | |
| ## أنواع التكميم المدعومة | |
| ### الأوزان | |
| - float8 | |
| - int8 | |
| - int4 | |
| - int2 | |
Xet Storage Details
- Size:
- 5.74 kB
- Xet hash:
- 59d809dac4c949fece4cd7c28f2259323f4e8063876c5e7a6b58754623798145
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.