قم بضبط LLaMA-3 بسهولة على بياناتك باستخدام Unslot

قم بضبط LLaMA-3 بسهولة على بياناتك باستخدام Unslot ، وهو أداة قوية تضمن تدريبًا أسرع بما يصل إلى 30 مرة. تعرف على كيفية إعداد وتحسين وحفظ نموذجك المضبوط للاستنتاج السلس عبر المنصات. افتح الإمكانات الكاملة لـ LLaMA-3 لحالة استخدامك المحددة.

٢٠ فبراير ٢٠٢٥

party-gif

قم بالتنقيح الدقيق لـ LLAMA-3، نموذج اللغة المفتوح المصدر القوي، على بياناتك الخاصة بسهولة باستخدام حزمة Unslot المحسّنة. افتح الإمكانات الكاملة لهذا النموذج الذكائي وكيّفه لتلبية احتياجاتك المحددة، دون عناء الإعداد المعقد أو التدريب المكثف للموارد.

ضبط LLAMA-3 مع Unslot: نهج قوي وفعال

Unslot هو أداة رائعة تتيح لك ضبط الموديل LLAMA-3 بشكل فعال على مجموعة بياناتك الخاصة. فيما يلي دليل خطوة بخطوة عن كيفية القيام بذلك:

  1. تثبيت الحزم المطلوبة: ابدأ بنسخ مستودع GitHub Unslot وتثبيت الحزم اللازمة بناءً على تكوين جهازك.

  2. إعداد معلمات التدريب: حدد معلمات التدريب الخاصة بك، مثل الحد الأقصى لطول التسلسل وأنواع البيانات وطريقة الكمية. يستخدم Unslot محوّلات Lora لتمكين الضبط الفعال.

  3. تنسيق بيانات التدريب الخاصة بك: تأكد من أن بياناتك مهيكلة بالشكل المطلوب، مع أعمدة للتعليمات والإدخال والإخراج. يوفر Unslot أمثلة باستخدام مجموعة بيانات Alpaca، ولكن يمكنك تكييفها مع بياناتك الخاصة.

  4. إعداد مدرب SFT: أنشئ كائن مدرب SFT (Supervised Fine-Tuning) من مكتبة Hugging Face Transformers، مع تحديد الموديل والمميز الرمزي ومجموعة البيانات ومعلمات التدريب الأخرى.

  5. تدريب الموديل: اتصل بوظيفة train() على كائن مدرب SFT لبدء عملية الضبط الدقيق. يضمن Unslot استخدام الذاكرة والسرعة المحسنة تدريبًا فعالًا، حتى على موارد GPU المحدودة.

  6. إجراء الاستنتاج: بعد التدريب، يمكنك استخدام فئة FastLanguageModel الخاصة بـ Unslot لتوليد استجابات من الموديل المضبوط دقيقًا. كما يوفر Unslot خيارات لحفظ الموديل وتحميل محوّلات Lora للاستخدام في المستقبل.

  7. استكشاف الميزات الإضافية: يقدم Unslot ميزات متقدمة، مثل القدرة على استخدام الموديل مع إطارات عمل أخرى مثل PyTorch Lightning وخيار تحويل الموديل إلى تنسيق GGML للاستخدام مع LLAMA-CPP أو GoLLAMA.

إعداد معلمات التدريب

أولاً، نحتاج إلى استيراد الفئات الضرورية من مكتبة unslot:

from unslot.models.fast_language_model import FastLanguageModel

بعد ذلك، نقوم بإعداد معلمات التدريب:

  • max_sequence_length: الحد الأقصى لطول التسلسل للإدخال. نقوم بتعيينه إلى 248 رمزًا، حيث أن مجموعة البيانات التي نستخدمها لها نص قصير نسبيًا.
  • data_type: نستخدم الكمية بـ 4 بت للتدريب الفعال.
max_sequence_length = 248
data_type = "4bit"

يستخدم Unslot محوّلات Lora لتمكين الضبط الدقيق الفعال. هناك خياران:

  1. استخدام موديل مسبق التحميل من مستودع Hugging Face Unslot، والذي يحتوي بالفعل على محوّلات Lora المدمجة.
  2. استخدام موديل من مستودع Hugging Face وإضافة محوّلات Lora بنفسك.

في هذه الحالة، سنستخدم الموديل المسبق التحميل، لذا لا نحتاج إلى أي خطوات إضافية.

model = FastLanguageModel.from_pretrained("unslot/alpaca-7b")

إذا كنت بحاجة إلى استخدام موديل مختلف وإضافة محوّلات Lora بنفسك، يمكنك إلغاء تعليق القسم التالي وتوفير المعلمات اللازمة.

# model_id = "your-hugging-face-model-id"
# model = FastLanguageModel.from_pretrained(model_id)
# model.add_lora_adapters()

الآن نحن جاهزون للانتقال إلى الخطوة التالية: تنسيق بيانات التدريب.

تحضير البيانات الخاصة بك للضبط الدقيق

لضبط موديل Lama 3 باستخدام Unslot، تحتاج إلى تنسيق بيانات التدريب الخاصة بك بطريقة محددة. مجموعة البيانات المستخدمة في المثال لها ثلاثة أعمدة: التعليمات والإدخال والإخراج.

يحتوي عمود التعليمات على وصف المهمة التي يجب أن ينجزها الموديل. يوفر عمود الإدخال سياقًا إضافيًا للمهمة، ويحتوي عمود الإخراج على الاستجابة المتوقعة من الموديل.

عند تنسيق بياناتك الخاصة، تأكد من هيكلتها بنفس الطريقة، مع أعمدة التعليمات والإدخال والإخراج. إذا كان الإدخال مفقودًا لمثال معين، فهذا أمر جيد، حيث يمكن للتعليمات وحدها أن توفر المعلومات الضرورية للموديل لتوليد الإخراج.

بعد تنزيل البيانات، تحتاج إلى تحويل الأعمدة الثلاثة إلى سلسلة نص واحدة تتبع تنسيقًا محددًا. يشمل هذا التنسيق رموزًا خاصة للتعليمات والإدخال والاستجابة. يوضح الكود في المثال كيفية إجراء هذا التحويل، مما ينشئ عمودًا واحدًا يمكن استخدامه لتدريب الموديل.

من المهم ملاحظة أنه بينما يستخدم المثال مجموعة بيانات Alpaca القياسية، يمكنك أيضًا هيكلة بياناتك باستخدام قوالب تعليمات أخرى، مثل تنسيق ChatML المقدم من OpenAI. ما عليك سوى التأكد من تنسيق أمثلة الإدخال الخاصة بك بشكل صحيح، حيث سيتم إدخالها في الموديل اللغوي أثناء التدريب.

تدريب النموذج باستخدام مدرب الضبط الدقيق الموجه لـ Unslot

أولاً، نحتاج إلى إعداد معلمات التدريب. سنقوم باستيراد فئة FastLanguageModel من Unslot وتحديد الحد الأقصى لطول التسلسل وأنواع البيانات وطريقة الكمية.

بعد ذلك، سنتعامل مع الحالة التي نحتاج فيها إلى إضافة محوّلات Lora إلى الموديل. إذا كنا نستخدم موديلاً من مستودع Hugging Face، فقد نحتاج إلى توفير رمز مميز لقبول شروط الخدمة.

الآن، نحتاج إلى تنسيق بيانات التدريب. يجب أن تحتوي مجموعة البيانات على ثلاثة أعمدة: التعليمات والإدخال والإخراج. سنقوم بتنزيل البيانات من Hugging Face وتخصيصها لهذا التنسيق.

بعد ذلك، سنقوم بإعداد مدرب التدريب الموجه من مكتبة Hugging Face Transformers. سيقبل هذا المدرب كائن الموديل والمميز الرمزي ومجموعة البيانات ومعلمات أخرى مثل المحسن وجدول معدل التعلم ودليل الإخراج.

أخيرًا، سنقوم باستدعاء وظيفة train() على كائن المدرب. سنلاحظ انخفاض خسارة التدريب، مما يشير إلى أن الموديل يتعلم. لاحظ أننا نقوم بتشغيل مجموعة بيانات صغيرة فقط لهذا المثال، ولكن ستحتاج إلى تشغيله لحقبة واحدة على الأقل للحصول على نتائج أفضل.

بعد التدريب، يمكننا حفظ الموديل وتحميل محوّلات Lora للاستنتاج. كما يوفر Unslot خيارات لاستخدام الموديل مع إطارات عمل أخرى مثل PyTorch Lightning و TensorFlow.

إجراء الاستنتاج باستخدام النموذج المضبوط دقيقًا

بمجرد تدريب الموديل، يمكنك استخدامه للاستنتاج. يوفر Unslot واجهة بسيطة لهذا الغرض:

  1. استورد فئة FastLanguageModel من Unslot.
  2. قدم الموديل المدرب وأخبره بأداء الاستنتاج.
  3. رمز الإدخال باستخدام تنسيق Alpaca (التعليمات والإدخال والإخراج المتوقع).
  4. انقل المدخلات إلى وحدة المعالجة المركزية للاستفادة من الموارد المتاحة.
  5. اتصل بوظيفة generate، مع توفير المدخلات المرمزة والحد الأقصى لعدد الرموز للتوليد وما إذا كان سيتم استخدام التخزين المؤقت.

سوف يقوم الموديل بتوليد استجابة بناءً على الإدخال المقدم. يمكنك أيضًا استخدام فئة TextStreamer لبث استجابة النص.

بعد التدريب، يمكنك حفظ الموديل بطرق مختلفة:

  • ادفع الموديل إلى Hugging Face Hub، والذي سيحفظ محوّلات Lora بشكل منفصل.
  • احفظ الموديل محليًا، مرة أخرى مع حفظ محوّلات Lora بشكل منفصل.

لتحميل الموديل المحفوظ للاستنتاج، يمكنك تعيين علامة لدمج محوّلات Lora مع الموديل.

يوفر Unslot أيضًا خيارات بديلة للاستنتاج، مثل استخدام فئة AutoModelForCausalLM من مكتبة Hugging Face Transformers، والتي قد تكون أبطأ ولكنها تسمح لك باستخدام الموديل مع أدوات أخرى مثل LLaMA-CPP أو GoLLaMA.

حفظ وتحميل النموذج المضبوط دقيقًا

بمجرد تدريب الموديل، يمكنك حفظه بطرق مختلفة لاستخدامه لاحقًا للاستنتاج. يوفر Unslot عدة خيارات لحفظ وتحميل الموديل المضبوط دقيقًا:

  1. الحفظ في Hugging Face Hub: يمكنك دفع الموديل المضبوط دقيقًا إلى Hugging Face Hub، مما يتيح لك مشاركته واستخدامه مع الآخرين. لفعل ذلك، تحتاج إلى توفير رمز مميز Hugging Face الخاص بك.
model.push_to_hub("your-model-name")
  1. الحفظ محليًا: يمكنك أيضًا حفظ الموديل محليًا، والذي سيحفظ فقط محوّلات Lora، وليس الموديل بأكمله. هذا يسمح لك بتحميل محوّلات Lora بسهولة ودمجها مع الموديل الأساسي لاحقًا.
model.save_pretrained("path/to/save/model")
  1. تحميل محوّلات Lora المحفوظة: عندما تريد استخدام الموديل المضبوط دقيقًا لل

التعليمات