Transformers documentation

AWQ

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

AWQ

يحافظ تكميم الأوزان الواعي بالتفعيل (AWQ) على نسبة صغيرة من الأوزان التي تُعدّ مهمة لأداء نماذج اللغة الكبيرة، وذلك لضغط النموذج إلى 4 بتات مع الحد الأدنى من تدهور الأداء.

تتوفر عدة مكتبات لتكميم النماذج باستخدام خوارزمية AWQ، مثل llm-awq وautoawq أو optimum-intel. يدعم Transformers تحميل النماذج المكمّمة باستخدام مكتبتَي llm-awq وautoawq. سيوضح لك هذا الدليل كيفية تحميل النماذج المكمّمة باستخدام autoawq، لكن العملية مشابهة للنماذج المكمّمة باستخدام llm-awq.

قم بتشغيل الأمر أدناه لتثبيت autoawq

pip install autoawq

يُعيد AutoAWQ تثبيت Transformers إلى الإصدار 4.47.1. إذا كنت ترغب في تنفيذ الاستدلال باستخدام AutoAWQ، فقد تحتاج إلى إعادة تثبيت إصدار Transformers الخاص بك بعد تثبيت AutoAWQ.

حدد نموذجًا مُكمَّمًا بطريقة AWQ عن طريق فحص المفتاح quant_method في ملف config.json الخاص بالنموذج.

{
  "_name_or_path": "/workspace/process/huggingfaceh4_zephyr-7b-alpha/source",
  "architectures": [
    "MistralForCausalLM"
  ],
  ...
  ...
  ...
  "quantization_config": {
    "quant_method": "awq",
    "zero_point": true,
    "group_size": 128,
    "bits": 4,
    "version": "gemm"
  }
}

حمّل النموذج المُكمَّم بـ AWQ باستخدام from_pretrained(). يقوم هذا تلقائيًا بإعداد الأوزان الأخرى إلى fp16 افتراضيًا لأسباب تتعلق بالأداء. استخدم معامل dtype لتحميل هذه الأوزان الأخرى بتنسيق مختلف.

إذا تم تحميل النموذج على وحدة المعالجة المركزية (CPU)، فاستخدم معامل device_map لنقله إلى مُسرِّع.

from transformers import AutoModelForCausalLM, AutoTokenizer
from accelerate import Accelerator
import torch

device = Accelerator().device

model = AutoModelForCausalLM.from_pretrained(
  "TheBloke/zephyr-7B-alpha-AWQ",
  dtype=torch.float32,
  device_map=device
)

استخدم attn_implementation لتفعيل FlashAttention2 من أجل تسريع الاستدلال بشكل أكبر.

from transformers import AutoModelForCausalLM, AutoTokenizer
from accelerate import Accelerator

model = AutoModelForCausalLM.from_pretrained(
  "TheBloke/zephyr-7B-alpha-AWQ",
  attn_implementation="flash_attention_2",
  device_map=Accelerator().device
)

وحدات مدمجة

توفر الوحدات المدمجة دقةً وأداءً محسَّنين. وهي مدعومة بشكل افتراضي للوحدات AWQ الخاصة ببنية Llama وبنية Mistral، لكن يمكنك أيضًا دمج وحدات AWQ للبنى غير المدعومة.

لا يمكن دمج الوحدات المدمجة مع تقنيات التحسين الأخرى مثل FlashAttention2.

المعماريات المدعومة
البنيات غير المدعومة

أنشئ AwqConfig و اضبط المعاملين fuse_max_seq_len و do_fuse=True لتفعيل الوحدات المدمجة. يمثل معامل fuse_max_seq_len طول التسلسل الكلي، وينبغي أن يتضمن طول السياق وطول التوليد المتوقع. اضبطه على قيمة أكبر لضمان الأمان.

يُدمج المثال أدناه وحدات AWQ الخاصة بنموذج TheBloke/Mistral-7B-OpenOrca-AWQ.

import torch
from transformers import AwqConfig, AutoModelForCausalLM

quantization_config = AwqConfig(
    bits=4,
    fuse_max_seq_len=512,
    do_fuse=True,
)
model = AutoModelForCausalLM.from_pretrained(
  "TheBloke/Mistral-7B-OpenOrca-AWQ",
  quantization_config=quantization_config
).to(0)

تم إجراء اختبار أداء لنموذج TheBloke/Mistral-7B-OpenOrca-AWQ باستخدام batch_size=1 مع الوحدات المدمجة وبدونها.

وحدة غير مدمجة
حجم الدفعةطول التعبئة المسبقةطول فك الترميزرموز التعبئة المسبقة/ثفكّ رموز الرموز/ثانيةالذاكرة (ذاكرة الفيديو)
1323260.098438.45374.50 غيغابايت (5.68%)
164641333.6731.66044.50 غيغابايت (5.68%)
11281282434.0631.62724.50 غيغابايت (5.68%)
12562563072.2638.17314.50 غيغابايت (5.68%)
15125123184.7431.68194.59 غيغابايت (5.80%)
1102410243148.1836.80314.81 غيغابايت (6.07%)
1204820482927.3335.26765.73 غيغابايت (7.23%)
وحدة مدمجة
حجم الدفعةطول التعبئة المسبقةطول فك الترميزرموز التمهيد/ثفكّ رموز الرموز/ثانيةالذاكرة (ذاكرة الفيديو)
1323281.489980.25694.00 غيغابايت (5.05%)
164641756.1106.264.00 غيغابايت (5.05%)
11281282479.32105.6314.00 غيغابايت (5.06%)
12562561813.685.74854.01 غيغابايت (5.06%)
15125122848.997.7014.11 غيغابايت (5.19%)
1102410243044.3587.73234.41 غيغابايت (5.57%)
1204820482715.1189.47095.57 غيغابايت (7.04%)

تم اختبار السرعة ومعدل الإنتاجية للوحدات المدمجة وغير المدمجة أيضاً باستخدام مكتبة optimum-benchmark.

generate throughput per batch size
ذروة الذاكرة/حجم الدفعة في الأمام
forward latency per batch size
توليد الإنتاجية/حجم الدفعة

ExLlamaV2

تدعم نوى ExLlamaV2 عمليات التعبئة المسبقة والتفكيك بشكل أسرع. نفّذ الأمر أدناه لتثبيت أحدث إصدار من autoawq مع دعم ExLlamaV2.

pip install git+https://github.com/casper-hansen/AutoAWQ.git

اضبط version="exllama" في AwqConfig لتفعيل نواة ExLlamaV2.

يُؤمَّن دعم ExLlamaV2 على وحدات معالجة الرسوميات من AMD.

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, AwqConfig

quantization_config = AwqConfig(version="exllama")

model = AutoModelForCausalLM.from_pretrained(
    "TheBloke/Mistral-7B-Instruct-v0.1-AWQ",
    quantization_config=quantization_config,
    device_map="auto",
)

الموارد

شغّل دفتر ملاحظات عرض AWQ لمزيد من الأمثلة حول كيفية تكميم نموذج، ودفع نموذج مُكمَّم إلى Hub، والمزيد.

Update on GitHub