مجموعة نوى Triton فعالة طورتها LinkedIn، مُحسّنة خصيصًا لتدريب نماذج اللغة الكبيرة، قادرة على تحسين سرعة التدريب بنسبة 20٪ وتقليل استخدام الذاكرة بنسبة 60٪.
مشروع Liger-Kernel: نظرة عامة تفصيلية
نظرة عامة على المشروع
Liger-Kernel عبارة عن مجموعة من نوى Triton تم تطويرها بواسطة LinkedIn، وهي مصممة خصيصًا لتدريب نماذج اللغة الكبيرة (LLM). يمكن لهذا المشروع تحسين إنتاجية التدريب متعدد وحدات معالجة الرسومات (GPU) بنسبة 20% وتقليل استخدام الذاكرة بنسبة 60%. اسم المشروع "Liger" يرمز إلى "LinkedIn GPU Efficient Runtime"، مما يعكس فكرته الأساسية المتمثلة في وقت تشغيل GPU فعال.
الميزات الأساسية
مزايا الأداء
- تحسين سرعة التدريب: من خلال دمج النوى والاستبدال الموضعي وتقنيات التقسيم، يتم تحسين إنتاجية التدريب متعدد وحدات معالجة الرسومات بنسبة 20%.
- كفاءة الذاكرة: يتم تقليل استخدام الذاكرة بنسبة 60%، مما يدعم أطوال سياق أطول وأحجام دفعات أكبر ومفردات ضخمة.
- تحسين ما بعد التدريب: بالنسبة لمهام المحاذاة والتقطير، يمكن لنوى ما بعد التدريب توفير ما يصل إلى 80% من الذاكرة.
التنفيذ التقني
- حساب دقيق: لا يوجد حساب تقريبي، وقد تم اختبار كل من الانتشار الأمامي والخلفي بدقة.
- تبعيات خفيفة الوزن: يتطلب Torch و Triton فقط، ولا توجد تبعيات مكتبة إضافية.
- توافق قوي: جاهز للاستخدام، ومتوافق مع Flash Attention و PyTorch FSDP و Microsoft DeepSpeed.
النماذج والعمليات المدعومة
هياكل النماذج المدعومة
يدعم المشروع العديد من هياكل نماذج اللغة الكبيرة السائدة، بما في ذلك:
- سلسلة LLaMA: LLaMA 2، LLaMA 3، LLaMA 3.2-Vision
- سلسلة Mistral: Mistral، Mixtral
- سلسلة Gemma: Gemma1، Gemma2، Gemma3
- سلسلة Qwen: Qwen2، Qwen2.5، Qwen2-VL، Qwen3، إلخ.
- نماذج أخرى: Phi3، Granite، OLMo2، GLM-4، إلخ.
عمليات النواة الأساسية
نفذ المشروع العديد من عمليات النواة المحسنة:
النوى الأساسية
LigerRMSNorm
: تطبيع RMSLigerLayerNorm
: تطبيع الطبقةliger_rotary_pos_emb
: ترميز الموضع الدوراني (RoPE)LigerSwiGLUMLP
: دالة التنشيط SwiGLULigerGEGLUMLP
: دالة التنشيط GeGLULigerCrossEntropyLoss
: خسارة الإنتروبيا المتقاطعةLigerFusedLinearCrossEntropyLoss
: خسارة الإنتروبيا المتقاطعة الخطية المدمجة
نوى ما بعد التدريب
يدعم العديد من وظائف خسارة التحسين للمحاذاة والتفضيل:
LigerFusedLinearDPOLoss
: خسارة DPOLigerFusedLinearORPOLoss
: خسارة ORPOLigerFusedLinearCPOLoss
: خسارة CPOLigerFusedLinearSimPOLoss
: خسارة SimPOLigerFusedLinearKTOLoss
: خسارة KTO
طرق الاستخدام
1. طريقة التكامل التلقائي
from liger_kernel.transformers import AutoLigerKernelForCausalLM
model = AutoLigerKernelForCausalLM.from_pretrained("path/to/some/model")
2. طريقة التصحيح اليدوي
import transformers
from liger_kernel.transformers import apply_liger_kernel_to_llama
apply_liger_kernel_to_llama()
apply_liger_kernel_to_llama(
rope=True,
swiglu=True,
cross_entropy=True,
fused_linear_cross_entropy=False,
rms_norm=False
)
model = transformers.AutoModelForCausalLM("path/to/llama/model")
3. طريقة API منخفضة المستوى
from liger_kernel.transformers import LigerFusedLinearCrossEntropyLoss
import torch.nn as nn
import torch
model = nn.Linear(128, 256).cuda()
loss_fn = LigerFusedLinearCrossEntropyLoss()
input = torch.randn(4, 128, requires_grad=True, device="cuda")
target = torch.randint(256, (4, ), device="cuda")
loss = loss_fn(model.weight, input, target)
loss.backward()
4. مثال على استخدام خسارة ما بعد التدريب
from liger_kernel.chunked_loss import LigerFusedLinearORPOLoss
orpo_loss = LigerFusedLinearORPOLoss()
y = orpo_loss(lm_head.weight, x, target)
طرق التثبيت
تثبيت الإصدار المستقر
pip install liger-kernel
تثبيت إصدار التطوير
pip install liger-kernel-nightly
التثبيت من المصدر
git clone https://github.com/linkedin/Liger-Kernel.git
cd Liger-Kernel
pip install -e .
تثبيت بيئة التطوير
pip install -e ".[dev]"
متطلبات النظام
بيئة NVIDIA GPU
torch >= 2.1.2
triton >= 2.3.0
بيئة AMD GPU
torch >= 2.5.0
triton >= 3.0.0
تبعيات أخرى
transformers >= 4.x
: إذا كنت تستخدم واجهة برمجة تطبيقات تصحيح نموذج المحولات
معايير الأداء
شروط اختبار الأداء:
- النموذج: LLaMA 3-8B
- حجم الدفعة: 8
- نوع البيانات: bf16
- المحسن: AdamW
- نقطة تفتيش التدرج: ممكنة
- استراتيجية التوزيع: FSDP1، 8 وحدات معالجة رسومات A100
أظهرت نتائج الاختبار:
- بدأت نماذج Hugging Face في مواجهة تجاوز الذاكرة بأطوال سياق 4K، بينما يمكن لـ Hugging Face + Liger Kernel التوسع إلى 16K
- تحسين إنتاجية التدريب بأكثر من 20%
- تقليل استخدام الذاكرة بنسبة 60%
تكامل الإطار
تم دمج Liger-Kernel في العديد من أطر التدريب السائدة:
- Axolotl
- LLaMa-Factory
- SFTTrainer
- Hugging Face Trainer
- SWIFT
- oumi
المبادئ التقنية
تقنية دمج النواة
من خلال دمج عمليات متعددة في نواة واحدة، يتم تقليل عدد مرات الوصول إلى ذاكرة GPU وتحسين كفاءة الحساب.
الحساب المقسم
بالنسبة للعمليات كثيفة الذاكرة، يتم استخدام تقنية المعالجة المقسمة لتقسيم الحسابات الكبيرة إلى أجزاء صغيرة، مما يقلل من ذروة استخدام الذاكرة.
العمليات الموضعية
استخدم العمليات الموضعية قدر الإمكان لتجنب تخصيص الذاكرة الإضافية، مما يزيد من تحسين كفاءة الذاكرة.
ملخص
يمثل Liger-Kernel تقدمًا مهمًا في تحسين تدريب نماذج اللغة الكبيرة. من خلال نوى Triton المصممة بعناية وتقنيات تحسين الذاكرة ودعم النموذج الواسع، فإنه يوفر للباحثين والمهندسين أداة قوية وسهلة الاستخدام يمكنها تحسين كفاءة التدريب بشكل كبير وتقليل تكاليف الحساب. إن طبيعة المشروع مفتوحة المصدر ودعم المجتمع النشط يجعله موردًا مهمًا في مجال تدريب LLM.