Transformers documentation

GPTQ

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

GPTQ

يُنفّذ مشروع GPT-QModel (حزمة بايثون gptqmodel) خوارزمية GPTQ، وهي تقنية تكميم بعد التدريب يتم فيها تكميم كل صف من مصفوفة الأوزان بشكل مستقل للعثور على نسخة من الأوزان تُقلّل الخطأ إلى أدنى حد. يتم تكميم هذه الأوزان إلى int4، لكنها تُستعاد إلى fp16 على الفور أثناء الاستدلال. يمكن أن يوفر ذلك 4 أضعاف من استهلاك الذاكرة لأن أوزان int4 تُفكّ تكميمها في نواة مدمجة بدلاً من الذاكرة العامة للوحدة الرسومية. كما يكون الاستدلال أسرع لأن عرض بت أقل يستغرق وقتاً أقل للتواصل.

لم يعد AutoGPTQ مدعوماً في Transformers. قم بتثبيت GPT-QModel بدلاً من ذلك.

قم بتثبيت Accelerate وTransformers وOptimum أولاً.

pip install --upgrade accelerate optimum transformers

ثمّ نفّذ الأمر أدناه لتثبيت GPT-QModel.

pip install gptqmodel --no-build-isolation

أنشئ فئة GPTQConfig وحدد عدد البتات التي سيتم التكميم إليها، ومجموعة بيانات لمعايرة الأوزان للتكميم، ومُرمّز (tokenizer) لتحضير مجموعة البيانات.

from transformers import AutoModelForCausalLM, AutoTokenizer, GPTQConfig

tokenizer = AutoTokenizer.from_pretrained("facebook/opt-125m")
gptq_config = GPTQConfig(bits=4, dataset="c4", tokenizer=tokenizer)

يمكنك تمرير مجموعة بياناتك الخاصة كقائمة من النصوص، لكن يُوصى بشدة باستخدام نفس مجموعة البيانات الواردة في ورقة GPTQ.

dataset = ["gptqmodel is an easy-to-use model quantization library with user-friendly apis, based on the GPTQ algorithm."]
gptq_config = GPTQConfig(bits=4, dataset=dataset, tokenizer=tokenizer)

Load a model to quantize and pass GPTQConfig to from_pretrained(). Set device_map="auto" to automatically offload the model to a CPU to help fit the model in memory, and allow the model modules to be moved between the CPU and GPU for quantization.

quantized_model = AutoModelForCausalLM.from_pretrained("facebook/opt-125m", device_map="auto", quantization_config=gptq_config)

إذا كنت تستنفد الذاكرة لأن مجموعة البيانات كبيرة جداً (لا يُدعم تفريغ القرص)، فحاول تمرير معامل max_memory لتخصيص كمية الذاكرة المراد استخدامها على جهازك (GPU و CPU).

quantized_model = AutoModelForCausalLM.from_pretrained(
    "facebook/opt-125m",
    device_map="auto",
    max_memory={0: "30GiB", 1: "46GiB", "cpu": "30GiB"},
    quantization_config=gptq_config
)

يعتمد الوقت اللازم لتهيئة نموذج من الصفر على العتاد الذي تستخدمه. فقد يستغرق تهيئة نموذج facebook/opt-350m نحو 5 دقائق على وحدة معالجة رسومية (GPU) مجانية في Google Colab، بينما قد يستغرق تهيئة نموذج يحتوي على 175 مليار معامل نحو 4 ساعات على وحدة NVIDIA A100. قبل تهيئة نموذج، يُنصح بالتحقق من Hub لمعرفة ما إذا كانت هناك نسخة مُهيّأة باستخدام GPTQ من النموذج موجودة بالفعل.

بمجرد تكميم النموذج، يمكنك استخدام push_to_hub() لدفع النموذج ومجزئ الرموز إلى Hub حيث يمكن مشاركته والوصول إليه بسهولة. وهذا يحفظ GPTQConfig.

quantized_model.push_to_hub("opt-125m-gptq")
tokenizer.push_to_hub("opt-125m-gptq")

يحفظ save_pretrained() النموذج المُكمَّم محليًا. إذا تم كمّ النموذج باستخدام معامل device_map، فتأكد من نقل النموذج بالكامل إلى وحدة معالجة رسومية (GPU) أو وحدة معالجة مركزية (CPU) قبل حفظه. يحفظ المثال أدناه النموذج على وحدة المعالجة المركزية.

quantized_model.save_pretrained("opt-125m-gptq")
tokenizer.save_pretrained("opt-125m-gptq")

# if quantized with device_map set
quantized_model.to("cpu")
quantized_model.save_pretrained("opt-125m-gptq")

أعد تحميل نموذج مُكمَّم باستخدام from_pretrained()، واضبط device_map="auto" لتوزيع النموذج تلقائيًا على جميع وحدات معالجة الرسوميات المتاحة، مما يتيح تحميل النموذج بشكل أسرع دون استخدام ذاكرة أكثر من اللازم.

from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained("{your_username}/opt-125m-gptq", device_map="auto")

Marlin

Marlin هو نواة CUDA مخصصة حصريًا للكمّية 4-بت، مُحسّنة بشكل كبير لمعمارية GPU من NVIDIA A100 (Ampere). عمليات التحميل، وفكّ الكمّية، وتنفيذ الأوزان بعد فكّ الكمّية مُوازاة إلى حدٍّ كبير، مما يوفر تحسينًا كبيرًا في الاستدلال مقارنةً بنواة CUDA GPTQ الأصلية. يتوفر Marlin للاستدلال المُكمّى فقط، ولا يدعم كمّية النموذج.

يمكن تفعيل استنتاج Marlin باستخدام معامل backend في GPTQConfig.


from transformers import AutoModelForCausalLM, GPTQConfig

model = AutoModelForCausalLM.from_pretrained("{your_username}/opt-125m-gptq", device_map="auto", quantization_config=GPTQConfig(bits=4, backend="marlin"))

GPT-QModel

GPT-QModel هو الخلفية (backend) التي يتم صيانتها بنشاط لـ GPTQ في Transformers. تم استنساخه (fork) في الأصل من AutoGPTQ، لكنه انبثق منذ ذلك الحين مع تحسينات كبيرة مثل التكميم (quantization) الأسرع، واستخدام أقل للذاكرة، وإعدادات افتراضية أكثر دقة.

يوفر GPT-QModel تكميمًا غير متماثل، مما قد يُقلّل من أخطاء التكميم مقارنةً بالتكميم المتماثل. وهو غير متوافق مع نقاط التفتيش القديمة لـ AutoGPTQ، كما أن جميع النوى (Marlin) لا تدعم التكميم غير المتماثل.

يتمتع GPT-QModel أيضاً بدعم أوسع لأحدث نماذج LLM، والنماذج متعددة الوسائط (Qwen2-VL وOvis1.6-VL)، والمنصات (Linux، وmacOS، وWindows 11)، والأجهزة (AMD ROCm، وApple Silicon، ومعالجات Intel/AMD، وبطاقات الرسوميات Intel Datacenter Max/Arc، وغيرها).

تم تحديث نواة Marlin أيضاً لبطاقات A100 الرسومية، كما تم تحديث النوى الأخرى لتشمل التوسيط التلقائي (auto-padding) للنماذج القديمة والنماذج ذات ميزات الإدخال/الإخراج غير المنتظمة.

الموارد

شغّل كميّة GPTQ باستخدام دفتر ملاحظات notebook الخاص بـ PEFT للحصول على تجربة عملية.

Update on GitHub