الضبط الدقيق لنموذج لغوي كبير على تعليقاتك التوضيحية
درّب نموذجاً لغوياً كبيراً بطريقة SFT أو DPO، أو نموذج مكافأة، أو نموذج مكافأة للعمليات على تصنيفات دراستك، وقِس كلاً منها على عناصر محجوزة، وانشره على Hub.
جديد في v2.14.0
يدرّب هذا الدرس أربعة أنواع من النماذج اللغوية على الإجابات التي تجمعها دراسة في Potato. يضبط المُدرِّب llm-sft نموذجاً لغوياً كبيراً ضبطاً دقيقاً على إجابات مكتوبة أو مسارات وكلاء مصحّحة، ويضبط llm-dpo نموذجاً لغوياً كبيراً على الاختيارات الزوجية، ويدرّب reward-model نموذج مكافأة عددياً على المقارنات، ويدرّب prm-reward نموذج مكافأة للعمليات على تقييمات الخطوات. الصفحة موجّهة إلى الفرق التي تجمع بالفعل بيانات تفضيل أو مسارات في Potato وتريد نموذجاً أول من هذه التصنيفات من دون تصدير البيانات إلى سكربت تدريب منفصل. يسمّي كل قسم المخطط الذي ينتج البيانات، ويعطي تهيئة تجتاز مدقّق Potato، ويسرد المعاملات التي تستحق التغيير، ويبيّن ما تقيسه درجة العناصر المحجوزة وهل تعود التنبؤات إلى المعلّقين بوصفها تصنيفات مسبقة. تغطي نظرة عامة على تدريب النماذج صفحة التدريب، ويشغّل درّب نموذجك الأول الحلقة كلها بمصنِّف لا يحتاج إلى GPU.
المُدرِّبات بحسب مخطط التعليق التوضيحي
يتعلّم كل مُدرِّب في هذه الصفحة من مخطط تعليق توضيحي واحد في كل تشغيلة، وتعرض صفحة التدريب المُدرِّب فقط للمخططات التي يستطيع التعلّم منها. يسرد الجدول التالي المخططات التي يتعلّم منها كل مُدرِّب:
| المُدرِّب | المخطط | ما يتعلّمه النموذج | الدرجة الرئيسية للعناصر المحجوزة | العرض على المعلّقين |
|---|---|---|---|---|
llm-sft | text | أن يكتب الإجابة التي كتبها المعلّقون | token F1 | نعم، تملأ الإجابة المولَّدة مربع النص |
llm-sft | trajectory_edit | أن يعيد كتابة خطوات الوكيل إلى الخطوات المصحّحة | closer_to_correction | لا، تُخزَّن وتُقيَّم فقط |
llm-dpo | pairwise بوضع binary | أن يفضّل الاستجابة التي اختارها المعلّقون | الدقة من دون احتساب حالات التعادل | نعم، تُحدَّد بطاقة الاستجابة المفضّلة |
llm-dpo | trajectory_edit | أن يفضّل الخطوات المصحّحة على الأصلية | closer_to_correction | لا، تُخزَّن وتُقيَّم فقط |
reward-model | pairwise (binary وscale) وranking وbws | درجة لكل استجابة | الدقة، أو دقة الاتجاه، أو Kendall's tau، أو دقة الأفضل والأسوأ | نعم، بوصفها إجابة المخطط نفسه |
prm-reward | process_reward | تقييماً بصحيح أو محايد أو خاطئ لكل خطوة | step_macro_f1 | تُعرض عبر زر "AI pre-label steps" |
قبل أن تبدأ
تثبّت إضافات التدريب في Potato مكتبات PyTorch وTransformers وPEFT للمُدرِّبات الأربعة:
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 سؤالاً واستجابتين:
{"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:
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 قبل تشغيل الخادم:
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:
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_name | Qwen/Qwen2.5-0.5B-Instruct | نموذج لغوي سببي على Hugging Face Hub، أو مجلد محلي. |
lora | true | تدرّب القيمة false كل الأوزان وتحتاج إلى ذاكرة أكبر بعدة أضعاف. وتحمّل {quantize: 4bit} النموذج الأساسي بدقة 4 بتات (انظر QLoRA). |
max_length | 1024 | عدد الرموز في كل مثال. السؤال الطويل يفقد رموزاً من بدايته، وتبقى الإجابة. |
max_new_tokens | 256 | أطول إجابة يولّدها النموذج. |
instruction | description المخطط | نص يوضع قبل نص كل عنصر. |
system_prompt | لا شيء | رسالة نظام للنماذج التي لها قالب محادثة. |
gradient_checkpointing | false | يوفّر ذاكرة التنشيطات مقابل زيادة في الوقت بنحو الثلث. |
learning_rate | 2e-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_name | Qwen/Qwen2.5-0.5B-Instruct | نموذج لغوي سببي. |
beta | 0.1 | مدى ابتعاد النموذج عن المرجع. القيمة الأقل تتيح للنموذج أن يبتعد أكثر. |
epochs | 2 | |
learning_rate | 5e-5 مع LoRA، و5e-7 من دونها | |
max_length | 1024 | عدد الرموز في كل سؤال واستجابة. |
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_name | distilbert/distilroberta-base | مرمِّز، أو نموذج لغوي كبير مع lora. |
ranking_loss | plackett_luce | لمخططات ranking فقط: plackett_luce أو pairs. |
max_length | 512 | عدد الرموز في كل نص مقيَّم، السؤال والاستجابة معاً. |
learning_rate | 2e-5، أو 2e-4 مع LoRA |
تجيب التنبؤات عن سؤال المخطط نفسه، فتُقيَّم وتُكتب راجعةً كما يحدث مع أي مخطط آخر. التصنيف المسبق هو البطاقة المحدَّدة في الاختيار الثنائي، وموضع المنزلق في المقياس، وترتيب القائمة في الترتيب، والأفضل والأسوأ المحدَّدان في BWS. ويخزّن كل تنبؤ كذلك rewards التي جاء منها. الفروق بين المكافآت وحدها ذات معنى. ويقارن المقارنة الزوجية والمقياس الأفضل-الأسوأ بين الصيغ المقارِنة لجمع البيانات.
دراسة تجمع تقييمات الخطوات والتصحيحات
تعمل التهيئة الثانية على مسارات الوكلاء. يقيّم المعلّقون كل خطوة من المسار ثم يصلحون الخطوات الخاطئة. تدرّب تقييمات الخطوات prm-reward، وتدرّب التصحيحات llm-sft أو llm-dpo. يضم كل سطر من data/traces.jsonl المهمة وخطوات الوكيل والإجابة النهائية:
{"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 في العنصر، بهذا الترتيب:
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 هناك يمنع الخادم من البدء، ويذكر المدقّق السبب:
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_name | answerdotai/ModernBERT-base | مرمِّز له مجزِّئ رموز سريع. |
max_length | 1024 | عدد الرموز في كل مسار. |
epochs | 6 | |
batch_size | 8 | عدد المسارات في كل خطوة. |
learning_rate | 5e-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:
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:
export HF_TOKEN=hf_your_write_token
potato start config.yamlيسمّي النموذج متغير البيئة، وهو HF_TOKEN افتراضياً، ويطلب اسم المستودع مرتين، ويُبقي خيار Private محدَّداً افتراضياً. ويسرد النشر على Hugging Face Hub الملفات التي تُرفع والفحوص قبل الدفع والترخيص في بطاقة النموذج. وهذا هو الدفع نفسه من الـ API:
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، وتذكر صفحة التشغيلة موضع النموذج. وللانتقال من نموذج منشور إلى حلقة تعلّم نشط، تابع مع النموذج في الحلقة.
قراءات إضافية
- تهيئة تدريب النماذج: كل مفتاح في
model_training، ودرجات العناصر المحجوزة، والكتابة الراجعة، والمسارات. - المُدرِّبات: كل المُدرِّبات الـ 38، مجمّعة بحسب المهمة.
- التدريب عن بُعد: خوادم GPU عبر ssh، وعناقيد SLURM، والوكيل الذي يستعلم دورياً.
- تعليق مسارات الوكلاء: جمع بيانات المسارات في Potato.
- أقسام المرجع في المستودع الأصلي:
llm-sftوllm-dpoومسارات الوكلاء وprm-rewardوreward-modelوQLoRA والنشر على Hub.
المراجع
- 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