ضبط دقيق لنموذج لغوي طويل الذيل مفتوح المصدر باستخدام أكسولوتل باستخدام أسلوب تحسين التفضيل المباشر (DPO)

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

ما هو نموذج LLM؟

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

من المحتمل أنك تفاعلت سابقًا مع نماذج LLM من خلال منتجات مثل ChatGPT أو Claude من قبل، وشهدت بنفسك قدرتها على فهم وتوليد ردود تشبه تلك التي يولدها البشر.

لماذا ضبط نموذج LLM؟

هل لا يمكننا فقط استخدام GPT-4o لكل شيء؟ حسنًا، على الرغم من أنه هو النموذج الأقوى الذي لدينا في وقت كتابة هذه المقالة، إلا أنه ليس دائمًا الخيار الأكثر عملية. يمكن أن يؤدي ضبط نموذج أصغر، يتراوح بين 3 إلى 14 مليار معلم، إلى نتائج قابلة للمقارنة بتكلفة بسيطة. علاوة على ذلك، يسمح لك ضبط النموذج بامتلاك ملكيتك الفكرية ويقلل من اعتمادك على أطراف ثالثة.

فهم النماذج الأساسية، والتعليم، والدردشة

قبل الانغماس في عملية الضبط، من الضروري فهم أنواع مختلفة من نماذج LLM التي توجد:

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

ما هو التعلم المعزز وDPO؟

التعلم المعزز (RL) هو تقنية حيث تتعلم النماذج من خلال تلقي التعليقات على أفعالها. يتم تطبيقه على نماذج التعليمات أو المحادثة من أجل تحسين جودة مخرجاتها. عادةً، لا يتم تطبيق RL على النماذج الأساسية لأنه يستخدم معدل تعلم أقل بكثير لن ينقل المؤشر بما فيه الكفاية.

تعتبر DPO شكلًا من أشكال RL حيث يتم تدريب النموذج باستخدام أزواج من الإجابات الجيدة والسيئة لنفس الطلب/المحادثة. من خلال عرض هذه الأزواج، يتعلم النموذج تفضيل الأمثلة الجيدة وتجنب السيئة.

متى تستخدم DPO

DPO مفيدة بشكل خاص عندما ترغب في تعديل أسلوب أو سلوك النموذج الخاص بك، على سبيل المثال:

  • تعديلات الأسلوب: تعديل طول الردود، مستوى التفاصيل، أو درجة الثقة التي يعبر عنها النموذج.
  • تدابير الأمان: قم بتدريب النموذج لرفض الإجابة على الاقتراحات غير الآمنة أو غير المناسبة.

ومع ذلك، فإن DPO ليست مناسبة لتعليم النموذج المعرفة أو الحقائق الجديدة. لهذا الغرض، تعتبر تقنيات الضبط الدقيق بالإشراف (SFT) أو التوليف المعزز بالاسترجاع (RAG) أكثر ملائمة.

إنشاء مجموعة بيانات DPO

في بيئة الإنتاج، عادة ما تقوم بإنشاء مجموعة بيانات DPO باستخدام ردود فعل من مستخدميك، عن طريق مثلا:

  • ردود المستخدم: تنفيذ آلية الإعجاب/الكراهية على الردود.
  • الخيارات المقارنة: عرض نتائج مختلفة للمستخدمين وطلب منهم اختيار الأفضل.

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

لأسباب بسيطة، سنستخدم مجموعة بيانات جاهزة من HuggingFace: olivermolenschot/alpaca_messages_dpo_test. إذا قمت بفحص المجموعة البيانية، ستلاحظ أنها تحتوي على اقتراحات مع إجابات مختارة ومرفوضة – وهذه هي الأمثلة الجيدة والسيئة. تم إنشاء هذه البيانات اصطناعيًا باستخدام GPT-3.5-turbo و GPT-4.

عمومًا، ستحتاج إلى ما بين 500 و 1,000 زوج من البيانات على الأقل للحصول على تدريب فعال دون التحام. أكبر مجموعات بيانات DPO تحتوي على ما يصل إلى 15,000-20,000 زوج.

ضبط Qwen2.5 3B Instruct بواسطة Axolotl

سنستخدم Axolotl لتهذيب نموذج Qwen2.5 3B Instruct الذي يحتل حاليا المرتبة الأولى في لوحة OpenLLM Leaderboard في فئة الحجم الخاصة به. باستخدام Axolotl ، يمكنك تهذيب النموذج دون كتابة سطر واحد من الشفرة – فقط ملف تكوين YAML. فيما يلي config.yml الذي سنستخدمه:

base_model: Qwen/Qwen2.5-3B-Instruct
strict: false

# Axolotl will automatically map the dataset from HuggingFace to the prompt template of Qwen 2.5
chat_template: qwen_25
rl: dpo
datasets:
  - path: olivermolenschot/alpaca_messages_dpo_test
    type: chat_template.default
    field_messages: conversation
    field_chosen: chosen
    field_rejected: rejected
    message_field_role: role
    message_field_content: content

# We pick a directory inside /workspace since that's typically where cloud hosts mount the volume
output_dir: /workspace/dpo-output

# Qwen 2.5 supports up to 32,768 tokens with a max generation of 8,192 tokens
sequence_len: 8192

# Sample packing does not currently work with DPO. Pad to sequence length is added to avoid a Torch bug
sample_packing: false
pad_to_sequence_len: true

# Add your WanDB account if you want to get nice reporting on your training performance
wandb_project:
wandb_entity:
wandb_watch:
wandb_name:
wandb_log_model:

# Can make training more efficient by batching multiple rows together
gradient_accumulation_steps: 1
micro_batch_size: 1

# Do one pass on the dataset. Can set to a higher number like 2 or 3 to do multiple
num_epochs: 1

# Optimizers don't make much of a difference when training LLMs. Adam is the standard
optimizer: adamw_torch

# DPO requires a smaller learning rate than regular SFT
lr_scheduler: constant
learning_rate: 0.00005

# Train in bf16 precision since the base model is also bf16
bf16: auto

# Reduces memory requirements
gradient_checkpointing: true

# Makes training faster (only suported on Ampere, Ada, or Hopper GPUs)
flash_attention: true

# Can save multiple times per epoch to get multiple checkpoint candidates to compare
saves_per_epoch: 1

logging_steps: 1
warmup_steps: 0

إعداد بيئة السحابة

لتشغيل التدريب ، سنستخدم خدمة استضافة سحابية مثل Runpod أو Vultr. إليك ما ستحتاجه:

  • صورة Docker: قم بنسخ صورة Docker winglian/axolotl-cloud:main المقدمة من فريق Axolotl.
  • متطلبات الأجهزة: ستكون بطاقة GPU بسعة VRAM 80 جيجابايت (مثل توصيلة A100 PCIe) أكثر من كافية لحجم هذا النموذج.
  • التخزين: 200 جيجابايت من التخزين الحجمي ستكون كافية لاستيعاب جميع الملفات التي نحتاجها.
  • إصدار CUDA: يجب أن يكون إصدار CUDA الخاص بك على الأقل 12.1.

يعتبر هذا النوع من التدريب تهذيبًا كاملاً لنموذج LLM ، وبالتالي فهو يستهلك VRAM بشكل كبير. إذا كنت ترغب في تشغيل التدريب محليًا ، دون الاعتماد على مضيفي السحابة ، يمكنك محاولة استخدام QLoRA ، وهو نوع من تهذيب مراقب. على الرغم من أنه من الممكن نظريًا دمج DPO و QLoRA ، إلا أن ذلك يحدث نادرًا جدًا.

خطوات بدء التدريب

  1. تعيين دليل ذاكرة التخزين المؤقت لـ HuggingFace:
export HF_HOME=/workspace/hf

يضمن ذلك تحميل النموذج الأصلي إلى التخزين الحجمي الذي هو مستمر.

  1. إنشاء ملف التكوين: احفظ ملف config.yml الذي أنشأناه سابقًا في /workspace/config.yml.
  1. بدء التدريب:
python -m axolotl.cli.train /workspace/config.yml

وها هو! يجب أن يبدأ تدريبك. بعد أن يقوم Axolotl بتنزيل النموذج وبيانات التدريب، يجب أن ترى إخراجًا مشابهًا لهذا:

[2024-12-02 11:22:34,798] [DEBUG] [axolotl.train.train:98] [PID:3813] [RANK:0] loading model

[2024-12-02 11:23:17,925] [INFO] [axolotl.train.train:178] [PID:3813] [RANK:0] Starting trainer...

يجب أن يستغرق التدريب بضع دقائق فقط لاكتماله نظرًا لأن هذه مجموعة بيانات صغيرة تحتوي فقط على 264 صفًا. سيتم حفظ النموذج المعدل في/workspace/dpo-output.

رفع النموذج إلى HuggingFace

يمكنك رفع نموذجك إلى HuggingFace باستخدام واجهة سطر الأوامر:

  1. قم بتثبيت واجهة سطر الأوامر لـ HuggingFace Hub:
pip install huggingface_hub[cli]
  1. رفع النموذج:
huggingface-cli upload /workspace/dpo-output yourname/yourrepo

استبدل yourname/yourrepo باسم مستخدم HuggingFace واسم المستودع الفعلي الخاص بك.

تقييم النموذج المعدل

للتقييم، يُوصى باستضافة النماذج الأصلية والمعدلة باستخدام أداة مثل إنتاج النصوص التحليلي (TGI). ثم، قم بإجراء استنتاج على كلا النموذجين بإعداد درجة حرارة تساوي 0 (لضمان الإخراجات التحددية) وقارن يدويًا بين ردود الفعل للنموذجين.

يوفر هذا النهج التطبيقي رؤى أفضل من الاعتماد فقط على مقاييس فقدان تقييم التدريب، التي قد لا تلتقط تفاصيل إنتاج اللغة في LLMs.

الاستنتاج

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

نتمنى لك ضبطًا موفقًا!

Source:
https://www.sitepoint.com/fine-tuning-llm-with-direct-preference-optimization-dpo/