Accelerate documentation

تكميم النموذج

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

and get access to the augmented documentation experience

to get started

تكميم النموذج

تكامل 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