Accelerate documentation
تكميم النموذج
تكميم النموذج
تكامل bitsandbytes
Accelerate brings bitsandbytes quantization to your model. You can now load any pytorch model in 8-bit or 4-bit with a few lines of code.
إذا كنت ترغب في استخدام نماذج Transformers مع bitsandbytes، فيجب عليك اتباع هذا الوثيقة.
للتعرف على المزيد حول آلية عمل التكميم في bitsandbytes، اطّلع على منشورات المدونة حول التكميم بـ 8 بت والتكميم بـ 4 بت.
المتطلبات المسبقة
ستحتاج إلى تثبيت المتطلبات التالية:
- تثبيت مكتبة
bitsandbytes
pip install bitsandbytes
بالنسبة إلى الأجهزة غير cuda، يمكنك الرجوع إلى دليل تثبيت bitsandbytes هنا.
- تثبيت أحدث إصدار من
accelerateمن المصدر
pip install git+https://github.com/huggingface/accelerate.git
- قم بتثبيت
minGPTوhuggingface_hubلتشغيل الأمثلة
git clone https://github.com/karpathy/minGPT.git
pip install minGPT/
pip install huggingface_hubكيف يعمل
أولاً، نحتاج إلى تهيئة نموذجنا. ولتوفير الذاكرة، يمكننا تهيئة نموذج فارغ باستخدام مدير السياق init_empty_weights().
لنأخذ نموذج GPT2 من مكتبة minGPT.
from accelerate import init_empty_weights
from mingpt.model import GPT
model_config = GPT.get_default_config()
model_config.model_type = 'gpt2-xl'
model_config.vocab_size = 50257
model_config.block_size = 1024
with init_empty_weights():
empty_model = GPT(model_config)ثم، نحتاج إلى الحصول على المسار إلى أوزان نموذجك. يمكن أن يكون المسار ملف state_dict (مثل “pytorch_model.bin”) أو مجلد يحتوي على نقاط التفتيش المجزأة.
from huggingface_hub import snapshot_download
weights_location = snapshot_download(repo_id="marcsun13/gpt2-xl-linear-sharded")أخيرًا، عليك ضبط إعدادات التكميم الخاصة بك باستخدام BnbQuantizationConfig.
فيما يلي مثال على التكميم بدقة 8 بت:
from accelerate.utils import BnbQuantizationConfig
bnb_quantization_config = BnbQuantizationConfig(load_in_8bit=True, llm_int8_threshold = 6)فيما يلي مثال على التكميم بدقة 4 بت:
from accelerate.utils import BnbQuantizationConfig
bnb_quantization_config = BnbQuantizationConfig(load_in_4bit=True, bnb_4bit_compute_dtype=torch.bfloat16, bnb_4bit_use_double_quant=True, bnb_4bit_quant_type="nf4")للتكميم النموذج الفارغ لديك باستخدام الإعداد المحدد، عليك استخدام load_and_quantize_model().
from accelerate.utils import load_and_quantize_model
quantized_model = load_and_quantize_model(empty_model, weights_location=weights_location, bnb_quantization_config=bnb_quantization_config)حفظ وتحميل نموذج 8-بت
يمكنك حفظ نموذج 8 بت الخاص بك باستخدام accelerate عبر save_model().
from accelerate import Accelerator
accelerate = Accelerator()
new_weights_location = "path/to/save_directory"
accelerate.save_model(quantized_model, new_weights_location)
quantized_model_from_saved = load_and_quantize_model(empty_model, weights_location=new_weights_location, bnb_quantization_config=bnb_quantization_config, device_map = "auto")يرجى ملاحظة أن تسلسل النماذج ذات 4 بتات غير مدعوم حاليًا.
تحميل الوحدات إلى وحدة المعالجة المركزية والقرص
يمكنك نقل بعض الوحدات إلى وحدة المعالجة المركزية/القرص الصلب إذا لم يكن لديك مساحة كافية على وحدة معالجة الرسوميات لتخزين النموذج بأكمله على وحدات معالجة الرسوميات الخاصة بك. يستخدم هذا الاستدلال على النماذج الكبيرة في الخلفية. راجع هذه التوثيق لمزيد من التفاصيل.
في حالة التكميم بدقة 8 بت، سيتم تحويل الوحدات المختارة إلى دقة 8 بت.
في حالة التكميم بدقة 4 بت، ستُحفظ الوحدات المختارة في torch_dtype الذي مرّره المستخدم في BnbQuantizationConfig. سنضيف دعمًا لتحويل هذه الوحدات المُحمّلة بدقة 4 بت عندما يصبح التسلسل بدقة 4 بت ممكنًا.
كل ما عليك هو تمرير device_map مخصص من أجل تفريغ الوحدات على المعالج/القرص. سيتم توزيع وحدات التفريغ على وحدة معالجة الرسوميات عند الحاجة. إليك مثالاً:
device_map = {
"transformer.wte": 0,
"transformer.wpe": 0,
"transformer.drop": 0,
"transformer.h": "cpu",
"transformer.ln_f": "disk",
"lm_head": "disk",
}ضبط نموذج مُكمَّم
لا يمكن إجراء تدريب خالص بدقة 8 بت أو 4 بت على هذه النماذج. ومع ذلك، يمكنك تدريب هذه النماذج بالاستفادة من طرق الضبط الدقيق الفعّالة من حيث المعلمات (PEFT) وتدريب، على سبيل المثال، محوِّلات (adapters) فوقها. يرجى الاطلاع على مكتبة peft لمزيد من التفاصيل.
حاليًا، لا يمكنك إضافة محوِّلات (adapters) فوق أي نموذج مُكمَّم (quantized). ومع ذلك، بفضل الدعم الرسمي للمحوِّلات مع نماذج Transformers، يمكنك ضبط النماذج المُكمَّمة. إذا كنت ترغب في ضبط نموذج Transformers، فالتزم بهذا الوثيقة بدلاً من ذلك. اطّلع على هذا التطبيق التجريبي لمعرفة كيفية ضبط نموذج Transformers بدقة 4 بت.
لاحظ أنك لا تحتاج إلى تمرير device_map عند تحميل النموذج للتدريب. سيتم تحميل نموذجك تلقائيًا على وحدة معالجة الرسوميات الخاصة بك. يرجى ملاحظة أنه يجب استخدام device_map=auto للاستدلال فقط.
مثال توضيحي - تشغيل GPT2 1.5b على Google Colab
اطّلع على عرض توضيحي على Google Colab لتشغيل النماذج المُكمّاة على نموذج GPT2. نقطة التفتيش لنموذج GPT2-1.5B بصيغة FP32 تستهلك 6 جيجابايت من الذاكرة. بعد التكميم، تستهلك 1.6 جيجابايت مع وحدات 8-بت و1.2 جيجابايت مع وحدات 4-بت.
Update on GitHub