AutoRound عبارة عن خوارزمية تكميمية متقدمة لاستدلال LLM ذو البتات المنخفضة. إنها مصممة لمجموعة واسعة من النماذج. يعتمد AutoRound علامة تدرج النسب لضبط قيم التقريب والحد الأدنى لقيم الأوزان في 200 خطوة فقط، والتي تتنافس بشكل مثير للإعجاب مع الأساليب الحديثة دون تقديم أي حمل إضافي للاستدلال والحفاظ على تكلفة ضبط منخفضة. تعرض الصورة أدناه نظرة عامة على AutoRound. راجع مقالتنا على arxiv لمزيد من التفاصيل وقم بزيارة low_bit_open_llm_leaderboard لمزيد من البيانات والوصفات الدقيقة عبر النماذج المختلفة.
[2024/10] تم دمج AutoRound في torch/ao، راجع مذكرة الإصدار الخاصة بهم
[2024/10] تحديث مهم: نحن ندعم الآن التكميم المتماثل كامل النطاق وجعلناه التكوين الافتراضي. عادةً ما يكون هذا التكوين أفضل أو مشابهًا للتكميم غير المتماثل ويتفوق بشكل كبير على المتغيرات المتماثلة الأخرى، خاصة عند عرض البتات المنخفض مثل 2 بت.
[2024/09] يدعم تنسيق AutoRound العديد من نماذج LVM، راجع الأمثلة Qwen2-Vl،Phi-3-vision، Lava
[2024/08] يدعم تنسيق AutoRound أجهزة Intel Gaudi2. يرجى الرجوع إلى Intel/Qwen2-7B-int4-inc.
[2024/08] يقدم AutoRound العديد من الميزات التجريبية، بما في ذلك الضبط السريع لمعلمات القاعدة/التحيز (لـ 2 بت وW4A4)، وتكميم التنشيط، ونوع البيانات mx_fp.
تثبيت النقطة -vvv --no-build-isolation -e .
تثبيت النقطة تلقائيًا
يتم توفير دليل مستخدم يعرض بالتفصيل القائمة الكاملة للوسائط المدعومة عن طريق استدعاء auto-round -h
على الجهاز. وبدلاً من ذلك، يمكنك استخدام auto_round
بدلاً من auto-round
. قم بتعيين التنسيق الذي تريده format
وتم دعم تصدير التنسيقات المتعددة.
CUDA_VISIBLE_DEVICES=0 تقريب تلقائي --نموذج الفيسبوك/opt-125m - البتات 4 --حجم المجموعة 128 --تنسيق "auto_round،auto_gptq" --disable_eval --output_dir ./tmp_autoround
نحن نقدم وصفتين للحصول على أفضل دقة وسرعة تشغيل سريعة مع ذاكرة منخفضة. التفاصيل على النحو التالي.
## أفضل دقة، أبطأ بمقدار 3 مرات، يمكن أن يوفر الاستخدام المنخفض لوحدة معالجة الرسومات (gpu_mem_usage) ~20 غيغابايت ولكن أبطأ بنسبة ~30%CUDA_VISIBLE_DEVICES=0 دورة تلقائية --نموذج الفيسبوك/opt-125m - البتات 4 --حجم المجموعة 128 - العينات 512 - عدد 1000 --low_gpu_mem_usage --disable_eval
## ذاكرة سريعة ومنخفضة، تسريع 2-3 مرات، انخفاض طفيف في الدقة عند W4G128CUDA_VISIBLE_DEVICES=0 دوران تلقائي --نموذج الفيسبوك/opt-125m - البتات 4 --حجم المجموعة 128 - العينات 128 --الايترز 200 --سلسلة 512 --حجم الدفعة 4 --disable_eval
تنسيق AutoRound : هذا التنسيق مناسب تمامًا لوحدة المعالجة المركزية (CPU)، وأجهزة HPU، و2 بت، بالإضافة إلى الاستدلال المختلط الدقة. [2،4] بت مدعومة. كما أنها تستفيد من نواة مارلين، والتي يمكن أن تعزز أداء الاستدلال بشكل ملحوظ. ومع ذلك، فهي لم تحظى بعد بتبني مجتمعي واسع النطاق.
تنسيق AutoGPTQ : هذا التنسيق مناسب تمامًا للتكميم المتماثل على أجهزة CUDA ويتم اعتماده على نطاق واسع من قبل المجتمع، ويتم دعم [2,3,4,8] بت. كما أنها تستفيد من نواة مارلين، والتي يمكن أن تعزز أداء الاستدلال بشكل ملحوظ. ومع ذلك، فإن النواة غير المتماثلة بها مشكلات يمكن أن تسبب انخفاضًا كبيرًا في الدقة، خاصة عند تكميم 2 بت والنماذج الصغيرة. بالإضافة إلى ذلك، يميل التكميم المتماثل إلى الأداء الضعيف عند دقة 2 بت.
تنسيق AutoAWQ : هذا التنسيق مناسب تمامًا لتكميم 4 بت غير المتماثل على أجهزة CUDA ويتم اعتماده على نطاق واسع داخل المجتمع، ويتم دعم تكميم 4 بت فقط. يتميز بدمج طبقة متخصصة مصممة خصيصًا لنماذج اللاما.
من المحولات استيراد AutoModelForCausalLM، AutoTokenizermodel_name = "facebook/opt-125m"model = AutoModelForCausalLM.from_pretrained(model_name)tokenizer = AutoTokenizer.from_pretrained(model_name)from auto_round import AutoRoundbits, group_size,sym = 4, 128, Trueautoround = AutoRound(model, tokenizer) ، bits=bits, group_size=group_size,sym=sym)## أفضل دقة، أبطأ بمقدار 3X، يمكن أن يوفر low_gpu_mem_usage ~20 جيجا بايت ولكن ~30% أبطأ# autoround = AutoRound(model, tokenizer, nsamples=512, iters=1000, low_gpu_mem_usage =True, bits=bits, group_size=group_size,sym=sym)## ذاكرة سريعة ومنخفضة، تسريع 2-3X، انخفاض طفيف في الدقة عند W4G128# autoround = AutoRound(model, tokenizer, nsamples=128, iters=200, seqlen =512، Batch_size=4، bits=bits، group_size=group_size،sym=sym )autoround.quantize()output_dir = "./tmp_autoround"## format= 'auto_round'(الافتراضي في الإصدار>0.3.0)، 'auto_gptq '، 'auto_awq'autoround.save_quantized(output_dir, format='auto_round', inplace=True)
تم إجراء الاختبار على Nvidia A100 80G باستخدام الإصدار الليلي من PyTorch 2.6.0.dev20241029+cu124. يرجى ملاحظة أنه تم استبعاد تكاليف تحميل البيانات وتعبئتها من التقييم. لقد قمنا بتمكين torch.compile لـ Torch 2.6، ولكن ليس لـ 2.5 بسبب المشكلات التي تمت مواجهتها.
لتحسين استخدام ذاكرة وحدة معالجة الرسومات، بالإضافة إلى تنشيط low_gpu_mem_usage
، يمكنك تعيين gradient_accumulate_steps=8
و batch_size=1
، على الرغم من أن هذا قد يزيد من وقت الضبط.
تم تقييم الطرازين 3B و14B على Qwen 2.5، والنموذج 8X7B هو Mixtral، بينما استخدمت النماذج المتبقية LLaMA 3.1.
إصدار الشعلة/التكوين W4G128 | 3 ب | 8 ب | 14 ب | 70 ب | 8X7B |
---|---|---|---|---|---|
2.6 مع الشعلة تجميع | 7 دقائق 10 جيجابايت | 12 دقيقة 18 جيجابايت | 23 دقيقة 22 جيجابايت | 120 دقيقة 42 جيجابايت | 28 دقيقة 46 جيجابايت |
2.6 مع الشعلة تجميع low_gpu_mem_usage=صحيح | 12 دقيقة 6 جيجابايت | 19 دقيقة 10 جيجابايت | 33 دقيقة 11 جيجابايت | 140 دقيقة 25 جيجابايت | 38 دقيقة 36 جيجابايت |
2.6 مع الشعلة تجميع low_gpu_mem_usage=صحيح gradient_accumulate_steps=8,bs=1 | 15 دقيقة 3 جيجابايت | 25 دقيقة 6 جيجابايت | 45 دقيقة 7 جيجابايت | 187 دقيقة 19 جيجابايت | 75 دقيقة 36 جيجابايت |
2.5 بدون تجميع الشعلة | 8 دقيقة 10 جيجابايت | 16 دقيقة 20 جيجابايت | 30 دقيقة 25 جيجابايت | 140 دقيقة 49 جيجابايت | 50 دقيقة 49 جيجابايت |
يرجى تشغيل رمز التكميم أولا
وحدة المعالجة المركزية : إصدار تلقائي > 0.3.1 ، تثبيت intel-extension-for-pytorch (سرعة أعلى بكثير على وحدة المعالجة المركزية Intel) أو تثبيت intel-extension-for-transformers،
HPU : يوصى باستخدام صورة عامل الإرساء باستخدام Gaudi Software Stack. يمكن العثور على مزيد من التفاصيل في دليل غاودي.
CUDA : لا توجد عمليات إضافية لتكميم Sym، ولتكميم غير متماثل، تحتاج إلى تثبيت التدوير التلقائي من المصدر
من المحولات استيراد AutoModelForCausalLM، AutoTokenizerfrom auto_round import AutoRoundConfigbackend = "auto" ##cpu, hpu, cuda, cuda:marlin(مدعوم في auto_round>0.3.1 و 'pip install -v gptqmodel --no-build-isolation')quantization_config = AutoRoundConfig(backend=backend)quantized_model_path = "./tmp_autoround"model = AutoModelForCausalLM.from_pretrained(quantized_model_path, devices_map=backend.split(':')[0], quantization_config=quantization_config)tokenizer = AutoTokenizer.from_pretrained(quantized_model_path)text = " هناك فتاة تحب المغامرة،"inputs = tokenizer(text, return_tensors="pt").to(model.device)print(tokenizer.decode(model.generate(**inputs, max_new_tokens=50)[0]) )
التدوير التلقائي - النموذج المحفوظ_الكمي_نموذج --eval --مهمة lambada_openai --eva_bs 1
من المحولات استيراد AutoModelForCausalLM، AutoTokenizerquantized_model_path = "./tmp_autoround"model = AutoModelForCausalLM.from_pretrained(quantized_model_path, devices_map="auto")tokenizer = AutoTokenizer.from_pretrained(quantized_model_path)text = "هناك فتاة تحب المغامرة،"inputs = tokenizer( نص، return_tensors = "pt").to(model.device)print(tokenizer.decode(model.generate(**inputs, max_new_tokens=50)[0]))
يدعم AutoRound بشكل أساسي جميع نماذج اللغات الكبيرة الرئيسية.
يرجى ملاحظة أن علامة النجمة (*) تشير إلى نماذج كمية تابعة لجهات خارجية، والتي قد تفتقر إلى بيانات دقيقة وتستخدم وصفة مختلفة. نحن نقدر بشدة جهودهم ونشجع المزيد من المستخدمين على مشاركة نماذجهم، حيث لا يمكننا إطلاق معظم النماذج بأنفسنا.
نموذج | المدعومة |
---|---|
meta-llama/Meta-Llama-3.1-70B-Instruct | وصفة |
meta-llama/Meta-Llama-3.1-8B-Instruct | نموذج-kaitchup-autogptq-int4*، نموذج-kaitchup-autogptq-sym-int4*، وصفة |
ميتا اللاما/ميتا اللاما-3.1-8B | نموذج-كايتشب-autogptq-sym-int4* |
كوين/كوين-VL | الدقة، وصفة |
كوين/Qwen2-7B | نموذج autoround-sym-int4، نموذج autogptq-sym-int4 |
كوين/Qwen2-57B-A14B-Instruct | نموذج autoround-sym-int4، نموذج-autogptq-sym-int4 |
01-آي/يي-1.5-9ب | نموذج-LnL-AI-autogptq-int4* |
01-ai/Yi-1.5-9B-دردشة | نموذج-LnL-AI-autogptq-int4* |
إنتل/الدردشة العصبية-7b-v3-3 | نموذج autogptq-int4 |
إنتل/الدردشة العصبية-7b-v3-1 | نموذج autogptq-int4 |
TinyLlama-1.1B-متوسط | نموذج-LnL-AI-autogptq-int4* |
ميسترالاي/ميسترال-7B-v0.1 | نموذج-autogptq-lmhead-int4، نموذج-autogptq-int4 |
جوجل/جيما-2ب | نموذج autogptq-int4 |
tiiuae/فالكون-7ب | نموذج autogptq-int4-G64 |
sapienzanlp/modello-italia-9b | نموذج-fbaldassarri-autogptq-int4* |
مايكروسوفت/فاي-2 | نموذج-autoround-sym-int4 نموذج-autogptq-sym-int4 |
مايكروسوفت/Phi-3.5-mini-instruct | نموذج-كايتشب-autogptq-sym-int4* |
مايكروسوفت/Phi-3-vision-128k-instruct | وصفة |
ميسترالاي/ميسترال-7B-Instruct-v0.2 | الدقة، الوصفة، المثال |
mistralai/Mixtral-8x7B-Instruct-v0.1 | الدقة، الوصفة، المثال |
ميسترالاي/ميسترال-8x7B-v0.1 | الدقة، الوصفة، المثال |
meta-llama/Meta-Llama-3-8B-Instruct | الدقة، الوصفة، المثال |
جوجل/جيما-7ب | الدقة، الوصفة، المثال |
meta-llama/Llama-2-7b-chat-hf | الدقة، الوصفة، المثال |
كوين/Qwen1.5-7B-دردشة | الدقة، وصفة سيم، وصفة غير تماثلية، مثال |
baichuan-inc/Baichuan2-7B-Chat | الدقة، الوصفة، المثال |
01-ai/Yi-6B-شات | الدقة، الوصفة، المثال |
الفيسبوك/opt-2.7b | الدقة، الوصفة، المثال |
Bigscience/بلوم-3ب | الدقة، الوصفة، المثال |
إليوثيرAI/gpt-j-6b | الدقة، الوصفة، المثال |
تم دمج AutoRound في مستودعات متعددة.
ضاغط إنتل العصبي
ModelCloud/GPTQModel
بيتورتش/آو
إذا وجدت AutoRound مفيدًا لبحثك، فيرجى الاستشهاد بمقالتنا:
@article{cheng2023optimize، title={تحسين تقريب الوزن عبر النزول المتدرج الموقع لتكميم ماجستير إدارة الأعمال}, المؤلف={تشنغ، وينهوا وتشانغ، ويوي وشين، هايهاو وكاي، ييانغ وهو، شين آند لف، كاوكاو وليو، يي}، مجلة = {arXiv طبعة أولية arXiv:2309.05516}، العام={2023} }