Microsoft LoRA عبارة عن مكتبة Python مفتوحة المصدر من Microsoft، تنفذ تقنية "LoRA: Low-Rank Adaptation of Large Language Models" (تكييف منخفض الرتبة للنماذج اللغوية الكبيرة). يوفر هذا المشروع حلاً ثوريًا للضبط الدقيق الفعال للنماذج اللغوية الكبيرة.
عنوان المشروع: https://github.com/microsoft/LoRA
عنوان الورقة البحثية: https://arxiv.org/abs/2106.09685
LoRA (Low-Rank Adaptation) هي طريقة ضبط دقيق فعالة للمعلمات، وتتمثل فكرتها الأساسية في:
أظهرت LoRA أداءً ممتازًا في اختبار GLUE القياسي:
النموذج | عدد معلمات التدريب | دقة MNLI | دقة SST-2 | دقة MRPC |
---|---|---|---|---|
RoBERTa Base ضبط دقيق كامل | 125M | 87.6 | 94.8 | 90.2 |
RoBERTa Base LoRA | 0.8M | 87.6±.1 | 95.1±.2 | 89.7±.7 |
DeBERTa XXL ضبط دقيق كامل | 1.5B | 91.1 | 96.8 | 92.9 |
DeBERTa XXL LoRA | 4.7M | 91.9±.1 | 96.9±.2 | 92.6±.6 |
أظهرت LoRA أيضًا أداءً ممتازًا في مهام توليد النصوص مثل E2E و DART و WebNLG:
الطريقة | معلمات التدريب | E2E (BLEU) | DART (BLEU) | WebNLG (BLEU) |
---|---|---|---|---|
GPT-2 M ضبط دقيق كامل | 354.92M | 68.2 | 46.0 | 47.6 |
GPT-2 M LoRA | 0.35M | 70.4±.1 | 47.1±.2 | 55.3±.2 |
microsoft/LoRA/
├── loralib/ # الكود المصدري للمكتبة الأساسية
├── examples/
│ ├── NLG/ # مثال على توليد اللغة الطبيعية GPT-2
│ └── NLU/ # مثال على فهم اللغة الطبيعية RoBERTa/DeBERTa
├── README.md
└── setup.py
pip install loralib
# أو التثبيت من المصدر
pip install git+https://github.com/microsoft/LoRA
# ===== قبل التعديل =====
# layer = nn.Linear(in_features, out_features)
# ===== بعد التعديل =====
import loralib as lora
layer = lora.Linear(in_features, out_features, r=16)
import loralib as lora
model = BigModel()
# تعيين المعلمات التي تحتوي على "lora_" فقط على أنها قابلة للتدريب
lora.mark_only_lora_as_trainable(model)
# حلقة التدريب
for batch in dataloader:
# عملية التدريب العادية
pass
# حفظ معلمات LoRA
torch.save(lora.lora_state_dict(model), 'lora_checkpoint.pt')
# تحميل النموذج المدرب مسبقًا
model.load_state_dict(torch.load('pretrained.pt'), strict=False)
# تحميل معلمات LoRA
model.load_state_dict(torch.load('lora_checkpoint.pt'), strict=False)
تدعم مكتبة LoRA حاليًا أنواع الطبقات التالية:
nn.Linear
→ lora.Linear
nn.Embedding
→ lora.Embedding
nn.Conv2d
→ lora.Conv2d
lora.MergedLinear
(تستخدم لطبقات خطية مدمجة مثل إسقاط QKV)# لسيناريوهات مثل إسقاط QKV
qkv_proj = lora.MergedLinear(
d_model, 3*d_model,
r=8,
enable_lora=[True, False, True] # تطبيق LoRA على Q و V فقط
)
# تدريب التحيزات المتعلقة بـ LoRA
lora.mark_only_lora_as_trainable(model, bias='lora_only')
# تدريب جميع التحيزات
lora.mark_only_lora_as_trainable(model, bias='all')
# وضع التقييم: دمج الأوزان، والقضاء على تأخير الاستدلال
model.eval()
# وضع التدريب: استعادة الحالة المنفصلة
model.train()
يوفر مشروع Microsoft LoRA حلاً اختراقيًا للضبط الدقيق الفعال للنماذج اللغوية الكبيرة. من خلال تقنية التكييف منخفضة الرتبة الذكية، مع تقليل تكاليف الحساب والتخزين بشكل كبير، يتم الحفاظ على أداء النموذج الممتاز. لا يتمتع هذا المشروع بقيمة أكاديمية مهمة فحسب، بل يوفر أيضًا مسارًا تقنيًا قابلاً للتطبيق للتطبيقات الصناعية العملية، وهو عمل تاريخي في مجال الضبط الدقيق الفعال للمعلمات.