يمثل دمج GaLore في تدريب نماذج اللغات الكبيرة (LLMs) تقدمًا كبيرًا في مجال التعلم العميق، لا سيما فيما يتعلق بكفاءة الذاكرة وإضفاء الطابع الديمقراطي على أبحاث الذكاء الاصطناعي. من خلال السماح بتدريب نماذج ذات مليار معلمة على أجهزة من فئة المستهلك، وتقليل أثر الذاكرة في حالات التحسين، والاستفادة من تقنيات مصفوفة الإسقاط المتقدمة، تفتح GaLore آفاقًا جديدة للباحثين والممارسين ذوي الوصول المحدود إلى الموارد الحسابية المتطورة.
توسيع نطاق LLMs باستخدام الأجهزة المخصصة للمستهلكين
تعد قدرة GaLore على تسهيل تدريب النماذج بما يصل إلى 7 مليارات معلمة، مثل تلك المستندة إلى بنية Llama، على وحدات معالجة الرسومات الاستهلاكية مثل NVIDIA RTX 4090، رائدة. يتم تحقيق ذلك من خلال تقليل متطلبات الذاكرة المرتبطة تقليديًا بحالات المُحسّن والتدرجات اللونية أثناء عملية التدريب. ويستفيد هذا النهج من البنية المتأصلة منخفضة الرتبة للتدرجات في الشبكات العصبية العميقة، من خلال تطبيق إسقاط يقلل من أبعاد البيانات التي يجب تخزينها ومعالجتها.
كفاءة الذاكرة في حالات المُحسِّن
تمثل حالة المحسن، خاصة في خوارزميات التحسين التكيفية مثل آدم، جزءًا كبيرًا من أثر الذاكرة أثناء تدريب النموذج. يعالج GaLore هذا الأمر من خلال إسقاط التدرجات في مساحة فرعية ذات أبعاد أقل قبل أن تتم معالجتها بواسطة المُحسِّن. ولا يؤدي هذا إلى تقليل الذاكرة المطلوبة لتخزين هذه الحالات فحسب، بل يحافظ أيضًا على فعالية عملية التحسين.
إن التوفير في الذاكرة كبير، حيث ذكر المؤلفون “أكثر من انخفاض بنسبة 82.5% في الذاكرة لتخزين حالات المحسن أثناء التدريب“، مما يجعل من الممكن تدريب نماذج أكبر أو استخدام أحجام دفعات أكبر ضمن نفس قيود الذاكرة. عند دمجها مع مُحسِّنات الدقة 8 بت، يمكن أن تكون هذه التوفيرات أكثر وضوحًا.
تبديل الفضاء الجزئي وتقنيات الإسقاط المتقدمة
أحد العناصر الحاسمة في فعالية GaLore هو آلية تبديل الفضاء الجزئي الديناميكي، والتي تسمح للنموذج بالتنقل عبر مساحات فرعية مختلفة ذات رتبة منخفضة طوال عملية التدريب. وهذا يضمن أن النموذج لا يقتصر على جزء محدود من مساحة المعلمة، وبالتالي الحفاظ على القدرة على تعلم المعلمة الكاملة. يعد القرار بشأن متى وكيف يتم تبديل المساحات الفرعية أمرًا محوريًا، حيث يمثل تكرار هذه المفاتيح توازنًا بين الحفاظ على مسار تحسين ثابت والتكيف مع المشهد المتطور لهيكل التدرج المنخفض.
تعد القدرة على ضبط هذه التوقعات ديناميكيًا استجابةً للتغيرات في بنية التدرج أداة فعالة في ترسانة GaLore، مما يسمح بتحكم أكثر دقة في مقايضات تحسين الذاكرة الكامنة في تدريب النماذج الكبيرة.
الجمع بين GaLore ومُحسِّنات 8 بت
يمثل الجمع بين GaLore ومُحسِّنات الدقة 8 بت تآزرًا يزيد من كفاءة الذاكرة إلى الحد الأقصى مع الحفاظ على سلامة وأداء عملية التدريب. تعمل أدوات تحسين 8 بت على تقليل مساحة الذاكرة عن طريق قياس حالات المُحسِّن. عند استخدامه مع آلية عرض GaLore، تكون النتيجة نظام تدريب عالي الكفاءة في الذاكرة ولا يؤثر على دقة النموذج أو سرعة التقارب.
يكون هذا المزيج فعالاً بشكل خاص في السيناريوهات التي تمثل فيها الذاكرة عنق الزجاجة الحرج، مثل تدريب النماذج الكبيرة على أجهزة من فئة المستهلك أو نشر النماذج في بيئات محدودة الذاكرة. فهو يتيح استخدام نماذج أكثر تعقيدًا ومجموعات بيانات أكبر ضمن نفس قيود الأجهزة، مما يدفع حدود ما يمكن تحقيقه بموارد محدودة.
تفاصيل التنفيذ
يتضمن دمج أدوات تحسين 8 بت مع GaLore لتدريب نماذج اللغات الكبيرة (LLMs) تحديد كمية التدرجات والأوزان وحالات المُحسِّن لتمثيلات 8 بت. تعمل عملية التكميم هذه على تقليل مساحة الذاكرة بشكل كبير، مما يتيح تدريب نماذج أكبر أو استخدام أحجام دفعات أكبر ضمن نفس قيود الذاكرة. تتضمن التفاصيل الخوارزمية لهذا التكامل عدة خطوات رئيسية، بعضها قد يستفيد بشكل كبير من تنفيذ CUDA الأصلي لتحقيق مكاسب في الكفاءة. يفتح GaLore إمكانيات جديدة لدمج هذه التقنيات بشكل أكثر إحكامًا مع القياس الكمي وتحديد المعلمات المتخصصة للمصفوفات، مما قد يؤدي إلى مزيد من التخفيضات في استخدام الذاكرة. نحن نستكشف هذا الاتجاه حاليًا في مكتبة bitsandbytes.
نظرة عامة خوارزمية لتحسين 8 بت مع GaLore
الإسقاط التدرج: يقوم GaLore بإسقاط التدرجات ذات الدقة الكاملة في مساحة فرعية منخفضة الرتبة باستخدام مصفوفات الإسقاط. تقلل هذه الخطوة من أبعاد التدرجات، والتي يتم بعد ذلك تكميمها إلى تنسيق 8 بت.
التكميم: التدرجات المتوقعة، إلى جانب أوزان النموذج وحالات المُحسِّن (مثل المتوسطات المتحركة في Adam)، يتم قياسها كميًا من تمثيلات الأعداد الصحيحة ذات 32 بت إلى 8 بت. يتضمن ذلك قياس قيم الفاصلة العائمة إلى نطاق 8 بت وتقريبها إلى أقرب عدد صحيح.
تحديث محسن: يتم استخدام التدرجات الكمية 8 بت لتحديث أوزان النموذج. تتضمن هذه الخطوة إلغاء تحديد كمية التدرجات مرة أخرى إلى تنسيق الفاصلة العائمة، وتطبيق قاعدة تحديث المحسن (على سبيل المثال، التحديث اللحظي لآدم وتعديل المعلمة)، ثم قياس حالات المحسن المحدثة مرة أخرى إلى 8 بت للتخزين.
إزالة الكميات وتحديث الوزن: تخضع الأوزان المكممة ذات 8 بت إلى إزالة الكمية لتمثيل الفاصلة العائمة للمعالجة، على الرغم من الاحتفاظ بدقة 8 بت المتأصلة في شكلها المكمما بسبب النطاق المحدود للقيم. هذه الخطوة ضرورية لأن العمليات القياسية في أطر عمل مثل PyTorch لا تدعم الأعداد الصحيحة ذات 8 بت، ولا يمكن لأوزان الأعداد الصحيحة هذه استيعاب التدرجات. في حين أن هذا النهج لا يعزز الدقة بطبيعته، فإنه يسهل التطبيق العملي وحساب التدرج للأوزان الكمية ضمن قيود مكتبات التعلم العميق الحالية. لاحظ أنه بعد إزالة الكمية وقبل تطبيق تحديث الوزن، يستخدم GaLore إسقاطًا آخر يقوم بإسقاط التحديثات ذات الرتبة المنخفضة التي تم إلغاء الكمية مرة أخرى إلى المساحة الأصلية.
استخدمه مع محولات الوجه المعانقة
لاستخدام أدوات تحسين GaLore مع مكتبة محولات Hugging Face، يتعين عليك أولاً تحديثها إلى إصدار يدعم أدوات تحسين GaLore، إما عن طريق تثبيت آخر تحديث، أي pip install transformers>=4.39.0 أو تركيب محولات من المصدر .
ثم قم بتثبيت مكتبة الشعلة الوفيرة باستخدام pip install galore-torch. فيما يلي مثال عملي كامل لـ GaLore مع المحولات، للتدريب المسبق لـ Mistral-7B على مجموعة بيانات imdb:
import torch
import datasets
from transformers import TrainingArguments, AutoConfig, AutoTokenizer, AutoModelForCausalLM
import trl
train_dataset = datasets.load_dataset('imdb', split='train')
args = TrainingArguments(
output_dir="./test-galore",
max_steps=100,
per_device_train_batch_size=2,
optim="galore_adamw",
optim_target_modules=["attn", "mlp"]
)
model_id = "mistralai/Mistral-7B-v0.1"
config = AutoConfig.from_pretrained(model_id)
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_config(config).to(0)
trainer = trl.SFTTrainer(
model=model,
args=args,
train_dataset=train_dataset,
dataset_text_field='text',
max_seq_length=512,
)
trainer.train()
TrainingArguments: ببساطة تمرير صالحة optim_target_modules (وهو يدعم سلسلة واحدة أو regex أو قائمة من السلاسل أو regexs) بالإضافة إلى optim، مُحسِّن GaLore صالح، مثل galore_adamw, galore_adamw_8bit, galore_adafactor – وأنت على ما يرام!
تحديثات الطبقة الحكيمة
نقطة أخرى مهمة يجب ذكرها هي طبقة الحكمة أدوات تحسين الأداء (أي تحديث الأوزان طبقة واحدة في كل مرة). عادةً، يقوم المُحسِّن بإجراء تحديث وزن واحد لجميع الطبقات بعد الانتشار العكسي. ويتم ذلك عن طريق تخزين تدرجات الوزن بالكامل في الذاكرة. من خلال اعتماد تحديثات الوزن على مستوى الطبقة، يمكننا تقليل أثر الذاكرة أثناء التدريب. تحت الغطاء، يتم تنفيذ ذلك باستخدام خطافات ما بعد التراكم PyTorch على الطبقات التي يرغب المستخدمون في تحديثها.
لاستخدام هذه الميزة، ما عليك سوى إلحاق _layerwise لأسماء المحسن، على سبيل المثال galore_adamw_layerwise.
خاتمة
يمثل GaLore، بنهجه المبتكر للاستفادة من بنية التدرجات ذات الرتبة المنخفضة، خطوة مهمة إلى الأمام في تدريب طلاب ماجستير إدارة الأعمال على كفاءة الذاكرة. من خلال تمكين تدريب نماذج ذات مليار معلمة على أجهزة من فئة المستهلك، وتقليل أثر الذاكرة لحالات المُحسِّن من خلال تقنيات العرض، والسماح بالتبديل الديناميكي للمساحات الفرعية، تعمل GaLore على إضفاء الطابع الديمقراطي على الوصول إلى تدريب النماذج على نطاق واسع. إن توافق GaLore مع أدوات تحسين الدقة 8 بت يعزز من فائدته، مما يوفر طريقًا لتدريب نماذج أكبر وأكثر تعقيدًا دون الحاجة إلى موارد حسابية متخصصة. وهذا يفتح إمكانيات جديدة للبحث والتطبيق في مجال الذكاء الاصطناعي، مما يجعله وقتًا مثيرًا للممارسين والباحثين على حدٍ سواء.
موارد
يرجى الرجوع إلى الورقة الأصلية. مراجع تويتر: 1 2 3. تجري الورقة أيضًا مقارنات بين GaLore وReLoRA، والتي قد تكون ذات أهمية لبعض القراء. بالنسبة للقراء الذين لديهم أسئلة لا تزال دون إجابة، خاصة بعد مراجعة الورقة، أو الذين يرغبون في مناقشة النتائج بشكل بناء، فلا تتردد في الانضمام إلى مجتمع Slack الخاص بالمؤلف. للراغبين في المزيد من الإصدارات على هذا المنوال، يرجى المتابعة جياوي تشاو و تيتوس فون كولر (للحصول على معلومات حول الأحدث bitsandbytes الإصدارات) كذلك يونس بلقادة للحصول على أحدث وأكبر المعلومات حول الموضوعات المتعلقة بالتكميم داخل وحول النظام البيئي Hugging Face.