تخطّي إلى المحتوى

الضبط الدقيق لنموذج لغوي كبير على تعليقاتك التوضيحية

درّب نموذجاً لغوياً كبيراً بطريقة SFT أو DPO، أو نموذج مكافأة، أو نموذج مكافأة للعمليات على تصنيفات دراستك، وقِس كلاً منها على عناصر محجوزة، وانشره على Hub.

جديد في v2.14.0

يدرّب هذا الدرس أربعة أنواع من النماذج اللغوية على الإجابات التي تجمعها دراسة في Potato. يضبط المُدرِّب llm-sft نموذجاً لغوياً كبيراً ضبطاً دقيقاً على إجابات مكتوبة أو مسارات وكلاء مصحّحة، ويضبط llm-dpo نموذجاً لغوياً كبيراً على الاختيارات الزوجية، ويدرّب reward-model نموذج مكافأة عددياً على المقارنات، ويدرّب prm-reward نموذج مكافأة للعمليات على تقييمات الخطوات. الصفحة موجّهة إلى الفرق التي تجمع بالفعل بيانات تفضيل أو مسارات في Potato وتريد نموذجاً أول من هذه التصنيفات من دون تصدير البيانات إلى سكربت تدريب منفصل. يسمّي كل قسم المخطط الذي ينتج البيانات، ويعطي تهيئة تجتاز مدقّق Potato، ويسرد المعاملات التي تستحق التغيير، ويبيّن ما تقيسه درجة العناصر المحجوزة وهل تعود التنبؤات إلى المعلّقين بوصفها تصنيفات مسبقة. تغطي نظرة عامة على تدريب النماذج صفحة التدريب، ويشغّل درّب نموذجك الأول الحلقة كلها بمصنِّف لا يحتاج إلى GPU.

المُدرِّبات بحسب مخطط التعليق التوضيحي

يتعلّم كل مُدرِّب في هذه الصفحة من مخطط تعليق توضيحي واحد في كل تشغيلة، وتعرض صفحة التدريب المُدرِّب فقط للمخططات التي يستطيع التعلّم منها. يسرد الجدول التالي المخططات التي يتعلّم منها كل مُدرِّب:

المُدرِّبالمخططما يتعلّمه النموذجالدرجة الرئيسية للعناصر المحجوزةالعرض على المعلّقين
llm-sfttextأن يكتب الإجابة التي كتبها المعلّقونtoken F1نعم، تملأ الإجابة المولَّدة مربع النص
llm-sfttrajectory_editأن يعيد كتابة خطوات الوكيل إلى الخطوات المصحّحةcloser_to_correctionلا، تُخزَّن وتُقيَّم فقط
llm-dpopairwise بوضع binaryأن يفضّل الاستجابة التي اختارها المعلّقونالدقة من دون احتساب حالات التعادلنعم، تُحدَّد بطاقة الاستجابة المفضّلة
llm-dpotrajectory_editأن يفضّل الخطوات المصحّحة على الأصليةcloser_to_correctionلا، تُخزَّن وتُقيَّم فقط
reward-modelpairwise (binary وscale) وranking وbwsدرجة لكل استجابةالدقة، أو دقة الاتجاه، أو Kendall's tau، أو دقة الأفضل والأسوأنعم، بوصفها إجابة المخطط نفسه
prm-rewardprocess_rewardتقييماً بصحيح أو محايد أو خاطئ لكل خطوةstep_macro_f1تُعرض عبر زر "AI pre-label steps"

قبل أن تبدأ

تثبّت إضافات التدريب في Potato مكتبات PyTorch وTransformers وPEFT للمُدرِّبات الأربعة:

bash
pip install "potato-annotation[train-llm]"
pip install "potato-annotation[train-text]"

تغطي الإضافة الأولى llm-sft وllm-dpo، وتغطي الثانية reward-model وprm-reward. ويثبّت الأمر pip install "potato-annotation[train]" كل إضافات التدريب دفعة واحدة. يظهر المُدرِّب الذي تنقصه حِزمه في صفحة التدريب بعبارة "not installed" مع الأمر الذي يثبّت الحِزم.

يرفض كل مُدرِّب أن يدرّب بأقل من 20 عنصراً في قسم train (المعامل min_instances). يضع التقسيم الافتراضي 70% من العناصر المصنّفة في train، و15% في val، و15% في test، فخطّط لنحو 30 عنصراً مصنّفاً قبل التشغيلة الأولى. عناصر val وtest محجوزة خارج التدريب، وتُستخدم لقياس أداء النموذج.

يبدأ llm-sft وllm-dpo من Qwen/Qwen2.5-0.5B-Instruct، ويبدأ reward-model من distilbert/distilroberta-base، ويبدأ prm-reward من answerdotai/ModernBERT-base. المُدرِّبات اللغوية الكبيرة مبنية للعمل على GPU. وعندما لا يحتوي الجهاز الذي يشغّل Potato على GPU، يرسل التدريب عن بُعد التشغيلات إلى خادم GPU عبر ssh أو إلى عنقود SLURM.

دراسة تجمع التفضيلات وإعادات الصياغة

تسأل التهيئة الأولى سؤالين عن كل سؤال من أسئلة دعم العملاء. يختار المعلّقون الأفضل من استجابتين، ويكتبون الإجابة التي يريدها المعلّق من المساعد. يدرّب الاختيار llm-dpo وreward-model، وتدرّب الإجابة المكتوبة llm-sft. يضم كل سطر من data/answers.jsonl سؤالاً واستجابتين:

json
{"id": "q001", "prompt": "How do I reset my router to factory settings?", "responses": ["Hold the reset button on the back for 10 seconds until the lights blink, then wait two minutes for the router to restart.", "Routers can be reset. Check the manual."]}

تعرض التهيئة السؤال بوصفه نص العنصر، والاستجابتين بوصفهما البطاقتين A وB:

yaml
annotation_task_name: "Support answers: preferences and rewrites"
task_dir: .
data_files:
  - data/answers.jsonl
item_properties:
  id_key: id
  text_key: prompt
output_annotation_dir: annotation_output
user_config:
  allow_all_users: true
 
annotation_schemes:
  - annotation_type: pairwise
    name: preferred
    description: "Which response answers the question better?"
    mode: binary
    items_key: responses
    allow_tie: true
    tie_label: "No preference"
 
  - annotation_type: text
    name: rewrite
    description: "Write the answer you would want the assistant to give."
    multiline: true
    rows: 4
 
model_training:
  enabled: true
  writeback:
    schemas: [preferred]
    min_confidence: 0.7

يهمّ text_key: prompt من وجهين، فالسؤال هو ما يقرأه المعلّقون وهو ما يضعه llm-sft بعد السؤال. يسمّي items_key: responses القائمة التي تأتي منها بطاقات المقارنة بترتيب البيانات، فتكون A هي الاستجابة الأولى. ويسرد writeback.schemas المخطط preferred وحده، فيرى المعلّقون اختيار النموذج ولا يرون إعادة صياغة مولَّدة. التصنيفات المسبقة تثبّت المعلّقين على رأيها، فأضف rewrite إلى القائمة فقط عندما تسوّغ درجة العناصر المحجوزة لتشغيلة llm-sft عرض نص النموذج. ويُبقي min_confidence: 0.7 التنبؤات التي يقل يقين النموذج بها خارج الصفحة مع الاستمرار في تخزينها. تحقّق من التهيئة بمدقّق Potato قبل تشغيل الخادم:

bash
python -m potato.validate_cli config.yaml --strict

شغّل Potato، وصنّف 30 سؤالاً على الأقل، وافتح /admin/training بصفتك مسؤولاً. ويمكن أيضاً بدء التشغيلات أدناه من الـ API بمفتاح admin_api_key الموجود في التهيئة داخل $KEY.

الضبط الدقيق الموجَّه بـ llm-sft

يحوّل llm-sft كل عنصر مصنّف إلى مثال تدريب واحد. السؤال هو description المخطط (السؤال الذي رآه المعلّقون) يتبعه نص العنصر، والهدف هو الإجابة التي كتبها المعلّق. تغطي دالة الخسارة رموز الإجابة وحدها، فيتعلّم النموذج أن يجيب لا أن يكرّر السؤال. ويُدرَّب مهايئ LoRA افتراضياً بدلاً من كل الأوزان.

اختر llm-sft والمخطط rewrite في صفحة التدريب وانقر Train now، أو ابدأ التشغيلة نفسها من الـ API:

bash
curl -X POST -H "X-API-Key: $KEY" -H "Content-Type: application/json" \
  http://localhost:8000/admin/training/api/runs \
  -d '{"trainer": "llm-sft", "schemas": ["rewrite"], "params": {"max_new_tokens": 256}}'

تغيّر معظم التشغيلات المعاملات الواردة في هذا الجدول فقط:

المعاملالقيمة الافتراضيةالمعنى
model_nameQwen/Qwen2.5-0.5B-Instructنموذج لغوي سببي على Hugging Face Hub، أو مجلد محلي.
loratrueتدرّب القيمة false كل الأوزان وتحتاج إلى ذاكرة أكبر بعدة أضعاف. وتحمّل {quantize: 4bit} النموذج الأساسي بدقة 4 بتات (انظر QLoRA).
max_length1024عدد الرموز في كل مثال. السؤال الطويل يفقد رموزاً من بدايته، وتبقى الإجابة.
max_new_tokens256أطول إجابة يولّدها النموذج.
instructiondescription المخططنص يوضع قبل نص كل عنصر.
system_promptلا شيءرسالة نظام للنماذج التي لها قالب محادثة.
gradient_checkpointingfalseيوفّر ذاكرة التنشيطات مقابل زيادة في الوقت بنحو الثلث.
learning_rate2e-4 مع LoRA، و1e-5 من دونها

تحتفظ التشغيلة بنقطة الحفظ ذات أقل خسارة على val. ولأن التشغيلة اختارت نقطة الحفظ على val، تُقرأ درجة العناصر المحجوزة من test. الدرجة هي token F1، أي تداخل الكلمات بين الإجابة المولَّدة والإجابة المكتوبة بصرف النظر عن الترتيب، وتُذكر المطابقة التامة إلى جانبها. يمنح token F1 درجة لإجابة تستخدم الكلمات الصحيحة في أماكن خاطئة، فاقرأ المقياسين معاً.

يولّد النموذج إجابة بالطريقة الجشعة لكل عنصر في val وtest. ومع writeback.include_unlabeled: true يجيب النموذج أيضاً عن العناصر التي لم يصنّفها أحد. ثقة التنبؤ هي متوسط احتمال النموذج للرموز التي ولّدها، ويرتّب طابور مراجعة النموذج العناصر بحسب هذه الثقة. وعند إدراج rewrite تحت writeback.schemas، تملأ الإجابة المولَّدة مربع النص عندما يفتح المعلّق العنصر.

النص الحر ملائم بدرجة ضعيفة لعدة معلّقين على العنصر الواحد. يحسم إعداد aggregation عدة إجابات في إجابة واحدة بمقارنة الإجابات كلمة بكلمة، ونادراً ما تتطابق إجابتان مكتوبتان كلمة بكلمة. ومع llm-sft على مخطط text، يتجنّب وجود كاتب واحد لكل عنصر المقارنة كلمة بكلمة.

ضبط التفضيل بـ llm-dpo

يدرّب Direct Preference Optimization (DPO) نموذجاً لغوياً كبيراً على رفع احتمال الاستجابة المفضّلة قياساً إلى الاستجابة الأخرى، مقيساً بنسخة مرجعية مجمّدة من النموذج الابتدائي. يبني llm-dpo مثالاً واحداً من كل عنصر أُجيب عنه بـ A أو B. السؤال هو حقل prompt في العنصر، أو أول حقل من question وinstruction وquery وinput وcontext يوجد في العنصر. وتُستبعد العناصر التي أُجيب عنها بخيار التعادل، لأن التعادل لا يعدّ إحدى الاستجابتين أفضل.

اختر llm-dpo والمخطط preferred، أو أرسل الطلب نفسه أعلاه مع "trainer": "llm-dpo" و"schemas": ["preferred"]. ومع مهايئ LoRA الافتراضي، يكون النموذج المرجعي هو النموذج نفسه مع إيقاف المهايئ، فلا تُحفظ نسخة ثانية في الذاكرة. أما lora: false فتدرّب كل الأوزان وتبقي نسخة مجمّدة مرجعاً، وتضاعف النسخة المجمّدة الذاكرة.

المعاملالقيمة الافتراضيةالمعنى
model_nameQwen/Qwen2.5-0.5B-Instructنموذج لغوي سببي.
beta0.1مدى ابتعاد النموذج عن المرجع. القيمة الأقل تتيح للنموذج أن يبتعد أكثر.
epochs2
learning_rate5e-5 مع LoRA، و5e-7 من دونها
max_length1024عدد الرموز في كل سؤال واستجابة.
instructionلا شيءنص يوضع قبل سؤال كل عنصر.

تحتفظ التشغيلة بنقطة الحفظ ذات أقل خسارة DPO على val، ويذكر سجل التشغيلة عدد المرات التي يفضّل فيها النموذج اختيار المعلّقين على val. درجة العناصر المحجوزة هي الدقة على test، على العناصر التي لم يُجَب عنها بتعادل، مع macro-F1 إلى جانب الدقة. التنبؤ هو الاستجابة التي يفضّلها النموذج المدرَّب، واحتمال هذا التفضيل هو الثقة. وبوصفه تصنيفاً مسبقاً، تُحدَّد بطاقة الاستجابة المفضّلة عندما يفتح المعلّق العنصر. ومع randomize_order في المخطط، يتبع التحديد الاستجابة إلى المكان الذي يراها فيه المعلّق. والمهايئ المحفوظ سياسة أيضاً، ويولّد نصاً عند تحميله بـ PEFT. وللاطلاع على جمع بيانات التفضيل نفسها، انظر جمع بيانات RLHF والتفضيل والمقارنة الزوجية.

نموذج مكافأة بـ reward-model

يحوّل نموذج المكافأة الاستجابة إلى رقم، من أجل RLHF أو أخذ العيّنات بأفضل n أو ترتيب المخرجات الجديدة. يدرّب reward-model محوّلاً بمخرج واحد بحيث تحصل الاستجابة التي فضّلها المعلّقون على درجة أعلى. دالة الخسارة هي خسارة Bradley–Terry، -log sigmoid(r_winner - r_loser)، وهي خسارة نمذجة المكافأة في InstructGPT. يدرّب المخطط preferred أعلاه reward-model من دون أي تغيير في التهيئة. ويعطي كل مخطط مقارِن إشارة تدريب مختلفة:

المخططإشارة التدريبالدرجة الرئيسية للعناصر المحجوزة
pairwise، binaryتتفوق الاستجابة المختارة على الأخرى. وتُتخطى حالات التعادل.الدقة
pairwise، scaleيفوز الجانب الذي يميل إليه المنزلق، موزوناً بمدى ميل المنزلق. وتُتخطى نقطة المنتصف.دقة الاتجاه
rankingالترتيب كله، بخسارة Plackett-Luce، أو كل زوج في الترتيب مع ranking_loss: pairs.Kendall's tau
bwsيتفوق الأفضل على كل عنصر آخر في المجموعة، ويتفوق كل عنصر آخر على الأسوأ.دقة الأفضل والأسوأ

عندما يكون للعنصر حقل سؤال، تكون كل مكافأة للاستجابة بمعلومية السؤال. وخيارات الترتيب هي تصنيفات المخطط، ويُقيَّم كل منها بمعلومية نص العنصر. يبني الخادم مجموعات BWS من bws_config، فالتشغيلة من بيانات الخادم نفسها تملك المجموعات، ولا تحتاج ملفات البيانات إلى المجموعات.

المعاملالقيمة الافتراضيةالمعنى
model_namedistilbert/distilroberta-baseمرمِّز، أو نموذج لغوي كبير مع lora.
ranking_lossplackett_luceلمخططات ranking فقط: plackett_luce أو pairs.
max_length512عدد الرموز في كل نص مقيَّم، السؤال والاستجابة معاً.
learning_rate2e-5، أو 2e-4 مع LoRA

تجيب التنبؤات عن سؤال المخطط نفسه، فتُقيَّم وتُكتب راجعةً كما يحدث مع أي مخطط آخر. التصنيف المسبق هو البطاقة المحدَّدة في الاختيار الثنائي، وموضع المنزلق في المقياس، وترتيب القائمة في الترتيب، والأفضل والأسوأ المحدَّدان في BWS. ويخزّن كل تنبؤ كذلك rewards التي جاء منها. الفروق بين المكافآت وحدها ذات معنى. ويقارن المقارنة الزوجية والمقياس الأفضل-الأسوأ بين الصيغ المقارِنة لجمع البيانات.

دراسة تجمع تقييمات الخطوات والتصحيحات

تعمل التهيئة الثانية على مسارات الوكلاء. يقيّم المعلّقون كل خطوة من المسار ثم يصلحون الخطوات الخاطئة. تدرّب تقييمات الخطوات prm-reward، وتدرّب التصحيحات llm-sft أو llm-dpo. يضم كل سطر من data/traces.jsonl المهمة وخطوات الوكيل والإجابة النهائية:

json
{"id": "traj_001", "task_description": "Find the current weather in San Francisco and report the temperature.", "steps": [{"thought": "I should look up the current weather.", "action": "web_search(queyr='San Francisco weather')"}, {"thought": "Open the first result.", "action": "open_url(results[0])"}, {"thought": "Read the temperature from the page.", "action": "extract_text('.temp')"}], "final_answer": "It is sunny."}

تقرأ المُدرِّبات المهمة من حقل task_description أو task أو text في العنصر، بهذا الترتيب:

yaml
annotation_task_name: "Agent traces: step ratings and corrections"
task_dir: .
data_files:
  - data/traces.jsonl
item_properties:
  id_key: id
  text_key: task_description
output_annotation_dir: annotation_output
user_config:
  allow_all_users: true
 
annotation_schemes:
  - annotation_type: process_reward
    name: step_quality
    description: "Rate each step of the agent's trace"
    steps_key: steps
    step_text_key: action
    mode: per_step
    allow_neutral: true
    ai_prelabel: true
 
  - annotation_type: trajectory_edit
    name: corrected_trace
    description: "Fix the wrong steps, then correct the final answer"
    steps_key: steps
    step_text_key: action
    editable_fields: [action]
    show_diff: true
    edit_final_answer: true
    final_answer_key: final_answer
 
model_training:
  enabled: true
  writeback:
    schemas: [step_quality]
    include_unlabeled: true

يعطي mode: per_step مع allow_neutral: true التقييمات الثلاثة التي يتعلّمها prm-reward. ويضع ai_prelabel: true زر "AI pre-label steps" على المخطط، وتظهر التقييمات المدرَّبة عبر الزر. يسمّي writeback.schemas المخطط step_quality وحده. وإدراج corrected_trace هناك يمنع الخادم من البدء، ويذكر المدقّق السبب:

text
model_training.writeback.schemas names 'corrected_trace', a trajectory_edit scheme, which has no prelabel display: its predictions are stored and scored but annotators would never see them. Leave it out of writeback.schemas.

إصلاح المسارات بـ llm-sft وllm-dpo

إجابة trajectory_edit زوج من المسارات، خطوات الوكيل الأصلية والخطوات بعد تصحيحات المعلّق. يغطي تحرير المسارات من أجل SFT/DPO المحرّر، ويغطي مقال تحرير المسارات كيف تتحول الأزواج إلى بيانات تدريب. يستبعد المُدرِّبان المسارات التي لم يحرّرها أحد.

  • llm-sft يأخذ المهمة والخطوات الأصلية بوصفها السؤال والخطوات المصحّحة بوصفها الهدف، فيتعلّم النموذج إصلاح المسار. تُكتب كل خطوة بصيغة Step N يتبعها حقول الخطوة (action: ...، thought: ...)، وتأتي الإجابة النهائية بعد الخطوة الأخيرة عندما يكون للمخطط final_answer_key.
  • llm-dpo يأخذ المهمة بوصفها السؤال والخطوات المصحّحة بوصفها الاستجابة المفضّلة والخطوات الأصلية بوصفها الاستجابة الأخرى. يبيّن التنبؤ هل يفضّل النموذج التصحيح (A) أم الأصل (B)، ولا يُجرى إلا للمسارات المحجوزة التي لها تصحيح.

تذكر التشغيلتان closer_to_correction بوصفها درجة العناصر المحجوزة. في llm-dpo تكون الدرجة نسبة المسارات المحجوزة التي يفضّل فيها النموذج التصحيح. وفي llm-sft تكون الدرجة نسبة المسارات التي تكون فيها الخطوات المكتوبة أقرب إلى التصحيح منها إلى الأصل بحسب token F1، ويُذكر token_f1 مقابل التصحيح إلى جانب الدرجة.

تُخزَّن تنبؤات تشغيلة trajectory_edit وتُقيَّم، ولا يراها المعلّقون أبداً. يبدأ المحرّر دائماً من مسار الوكيل الأصلي، فلا يوجد في الصفحة مكان لعرض إعادة كتابة متنبَّأ بها. اقرأ التنبؤات من صفحة التشغيلة أو من artifacts/predictions.jsonl في مجلد التشغيلة.

تقييمات الخطوات بـ prm-reward

يقيّم نموذج مكافأة العمليات خطوات المسار بدلاً من الإجابة النهائية وحدها، كما في PRM800K. يغذّي prm-reward المسار كله إلى مرمِّز محوّل بوصفه مدخلاً واحداً، المهمة يتبعها Step 1 وStep 2 وهكذا. يتعلّم المرمِّز تقييماً ثلاثياً عند آخر رمز في كل خطوة، فيجري كل تقييم والخطوات السابقة للخطوة أمامه. وتُستبعد من الخسارة الخطوات التي لم يقيّمها أحد. اختير النموذج الافتراضي answerdotai/ModernBERT-base لسياقه البالغ 8192 رمزاً.

المعاملالقيمة الافتراضيةالمعنى
model_nameanswerdotai/ModernBERT-baseمرمِّز له مجزِّئ رموز سريع.
max_length1024عدد الرموز في كل مسار.
epochs6
batch_size8عدد المسارات في كل خطوة.
learning_rate5e-5، أو 3e-4 مع LoRA

المسارات الطويلة تفقد خطواتها الأخيرة. المسار الأطول من max_length رمزاً يُقطع من نهايته، والخطوات بعد القطع لا يُتدرَّب عليها ولا تُقيَّم. ويحصي سجل التشغيلة الخطوات المفقودة. وعندما يزيد max_length على ما يستوعبه النموذج، تخفض التشغيلة max_length إلى حدّ النموذج مع تحذير، والحدّ 512 رمزاً لمعظم المرمِّزات من فئة BERT. وعندما يذكر سجل التشغيلة خطوات مفقودة، ارفع max_length واختر نموذجاً يتسع سياقه للمسارات الأطول.

درجة العناصر المحجوزة هي step_macro_f1، أي macro-F1 على التقييمات الثلاثة في كل خطوة مقيَّمة. معظم الخطوات في معظم المسارات صحيحة، فالدقة ستجامل نموذجاً لا يقول "خاطئ" أبداً. وتذكر التشغيلة أيضاً step_accuracy وfirst_error_accuracy، وهي نسبة المسارات التي تكون فيها أول خطوة خاطئة عند النموذج هي أول خطوة خاطئة عند المعلّقين.

يقيّم التنبؤ كل خطوة تتسع في max_length، وكل تقييم يعطي احتماله ثقةً له، وأقل الخطوات ثقة تعطي ثقة المسار. ومع وجود المخطط في writeback.schemas وai_prelabel: true، يعرض زر "AI pre-label steps" التقييمات المدرَّبة ليتحقق منها المعلّق. ولا يُستدعى حَكَم نموذج لغوي مهيّأ تحت ai_support لعنصر له تقييمات مدرَّبة. يغطي تعليق مكافأة العمليات المخطط، ويغطي دليل نماذج مكافأة العمليات البيانات.

تحميل نموذج أكبر باستخدام QLoRA

يحمّل QLoRA أوزان النموذج الأساسي بدقة 4 بتات ويدرّب فوقها مهايئ LoRA. يقبل llm-sft وllm-dpo وhf-text-classification وvlm-sft وreward-model الإعداد lora: {quantize: 4bit}، ويرفض prm-reward الإعداد قبل تحميل النموذج. خطّط للذاكرة من سطر "Peak GPU memory" الذي تسجّله كل تشغيلة لمحوّل في نهايتها. ويصف قسم QLoRA في مرجع التهيئة كيف تُحمَّل الأوزان الأساسية وخيار 8 بتات.

أضف هذه الكتلة إلى التهيئة أعلاه لتجعل QLoRA الإعداد الافتراضي لـ llm-sft:

yaml
model_training:
  enabled: true
  trainer_params:
    llm-sft:
      model_name: Qwen/Qwen2.5-7B-Instruct
      lora: {quantize: 4bit}
      gradient_checkpointing: true

يحتاج QLoRA إلى GPU يدعم CUDA وإلى إصدار من bitsandbytes يناسب CUDA في ذلك الجهاز، ويُثبَّت بالأمر pip install bitsandbytes. ومن دون GPU عامل أو إصدار مناسب، تتوقف التشغيلة عند التحقق قبل تحميل النموذج.

نشر تشغيلة على Hugging Face Hub

للتشغيلة الناجحة التي يوجد نموذجها على خادم Potato زر Publish to the Hugging Face Hub في صفحة التشغيلة. يرفع الدفع النموذج وبطاقة نموذج README.md مكتوبة من التشغيلة، وفيها المُدرِّب والنموذج الأساسي والمهايئ والمخططات والتصنيفات وأحجام الأقسام ودرجة العناصر المحجوزة وما قيست عليه الدرجة ومعرّفا التشغيلة وحزمة البيانات. التشغيلة التي استخدمت LoRA حفظت المهايئ وحده، فيضم مستودع Hub المهايئ، وتسمّي البطاقة النموذج الأساسي الذي يُحمَّل عليه المهايئ.

يبقى الرمز المميّز خارج المتصفح. أنشئ رمزاً بصلاحية الكتابة في إعدادات Hugging Face وضعه في بيئة الخادم قبل تشغيل Potato:

bash
export HF_TOKEN=hf_your_write_token
potato start config.yaml

يسمّي النموذج متغير البيئة، وهو HF_TOKEN افتراضياً، ويطلب اسم المستودع مرتين، ويُبقي خيار Private محدَّداً افتراضياً. ويسرد النشر على Hugging Face Hub الملفات التي تُرفع والفحوص قبل الدفع والترخيص في بطاقة النموذج. وهذا هو الدفع نفسه من الـ API:

bash
curl -X POST -H "X-API-Key: $KEY" -H "Content-Type: application/json" \
  http://localhost:8000/admin/training/api/runs/RUN_ID/push-to-hub \
  -d '{"repo_id": "your-org/support-dpo", "confirm_repo_id": "your-org/support-dpo", "private": true, "licence": "apache-2.0"}'

يعيد المسار الرمز 201 مع الإيداع. والنموذج المتروك على مضيف بعيد مع fetch_artifacts: false لا يمكن دفعه من خادم Potato، وتذكر صفحة التشغيلة موضع النموذج. وللانتقال من نموذج منشور إلى حلقة تعلّم نشط، تابع مع النموذج في الحلقة.

قراءات إضافية

المراجع

  • Dettmers, T., Pagnoni, A., Holtzman, A., and Zettlemoyer, L. (2023). QLoRA: Efficient Finetuning of Quantized LLMs. arXiv:2305.14314. arxiv.org/abs/2305.14314
  • Hu, E. J., Shen, Y., Wallis, P., Allen-Zhu, Z., Li, Y., Wang, S., Wang, L., and Chen, W. (2021). LoRA: Low-Rank Adaptation of Large Language Models. arXiv:2106.09685. arxiv.org/abs/2106.09685
  • Lightman, H., Kosaraju, V., Burda, Y., Edwards, H., Baker, B., Lee, T., Leike, J., Schulman, J., Sutskever, I., and Cobbe, K. (2023). Let's Verify Step by Step. arXiv:2305.20050. arxiv.org/abs/2305.20050
  • Ouyang, L., Wu, J., Jiang, X., Almeida, D., Wainwright, C. L., Mishkin, P., Zhang, C., Agarwal, S., Slama, K., Ray, A., Schulman, J., Hilton, J., Kelton, F., Miller, L., Simens, M., Askell, A., Welinder, P., Christiano, P., Leike, J., and Lowe, R. (2022). Training Language Models to Follow Instructions with Human Feedback. arXiv:2203.02155. arxiv.org/abs/2203.02155
  • Rafailov, R., Sharma, A., Mitchell, E., Ermon, S., Manning, C. D., and Finn, C. (2023). Direct Preference Optimization: Your Language Model is Secretly a Reward Model. arXiv:2305.18290. arxiv.org/abs/2305.18290