مرحبًا بك في الانضمام إلى مجموعة تبادل التكنولوجيا النموذجية الكبيرة Firefly، اتبع حسابنا الرسمي، وانقر فوق زر الانضمام إلى المجموعة.
مرحبًا بكم في متابعة Zhihu للتواصل والمناقشة: المطر الأحمر يتدفق
Firefly هو مشروع تدريب نموذجي كبير مفتوح المصدر يدعم التدريب المسبق والضبط الدقيق للتعليمات وDPO للنماذج الكبيرة السائدة، بما في ذلك على سبيل المثال لا الحصر Qwen2 وYi-1.5 وLlama3 وGemma وQwen1.5 وMiniCPM وMiniCPM3 وLla. ma، InternLM، Baichuan، ChatGLM، Yi، Deepseek، Qwen، Orion، Ziya، Xverse، Mistral، Mixtral-8x7B، Zephyr، Vicuna، Bloom، إلخ. يدعم هذا المشروع التدريب الكامل على المعلمات، والتدريب الفعال على LoRA وQLoRA ، ويدعم التدريب المسبق وSFT وDPO . إذا كانت موارد التدريب الخاصة بك محدودة، فإننا نوصي بشدة باستخدام QLoRA لضبط التعليمات، لأننا تحققنا من فعالية هذه الطريقة على Open LLM Leaderboard وحققنا نتائج جيدة جدًا.
؟المحتويات الرئيسية لهذا المشروع هي كما يلي:
تم تعديل الإصدار الحالي ليناسب قوالب نماذج الدردشة المختلفة، وهناك تحديثات رئيسية للتعليمات البرمجية. إذا كنت تفضل الإصدار السابق، يمكنك تنزيل الكود v0.0.1-alpha
تأتي نتائج التقييم من لوحة المتصدرين Open LLM الخاصة بـ Hugging Face. يتم تدريب نماذجنا باستخدام نصوص QLoRA، ويتم استخدام 1 إلى 2 V100 فقط للتدريب.
نموذج | متوسط | قوس | هيلاسواج | MMLU | صادقQA |
---|---|---|---|---|---|
اليراع-mixtral-8x7b | 70.16 | 68.09 | 85.76 | 71.49 | 55.31 |
يي-34B-الدردشة | 69.97 | 65.44 | 84.16 | 74.9 | 55.37 |
اليراع-اللاما-30ب | 64.83 | 64.25 | 83.64 | 58.23 | 53.2 |
falcon-40b-instruct | 63.47 | 61.6 | 84.31 | 55.45 | 52.52 |
جواناكو-33ب | 62.98 | 62.46 | 84.48 | 53.78 | 51.22 |
اليراع-llama2-13b-v1.2 | 62.17 | 60.67 | 80.46 | 56.51 | 51.03 |
اليراع اللاما2-13ب | 62.04 | 59.13 | 81.99 | 55.49 | 51.57 |
فيكونا-13ب-v1.5 | 61.63 | 56.57 | 81.24 | 56.67 | 51.51 |
mpt-30b-دردشة | 61.21 | 58.7 | 82.54 | 51.16 | 52.42 |
wizardlm-13b-v1.2 | 60.79 | 59.04 | 82.21 | 54.64 | 47.27 |
فيكونا-13ب-v1.3 | 60.01 | 54.61 | 80.41 | 52.88 | 52.14 |
اللاما-2-13ب-دردشة | 59.93 | 59.04 | 81.94 | 54.64 | 44.12 |
فيكونا-13ب-v1.1 | 59.21 | 52.73 | 80.14 | 51.9 | 52.08 |
جواناكو-13ب | 59.18 | 57.85 | 83.84 | 48.28 | 46.73 |
باستخدام كود التدريب لهذا المشروع، وبيانات التدريب المذكورة أعلاه، قمنا بتدريب الأوزان النموذجية التالية وفتحها.
النموذج الصيني:
نموذج | النموذج الأساسي | طول التدريب |
---|---|---|
اليراع-baichuan2-13b | baichuan-inc/Baichuan2-13B-Base | 1024 |
اليراع-baichuan-13b | baichuan-inc/Baichuan-13B-Base | 1024 |
اليراع-qwen-7b | كوين/كوين-7ب | 1024 |
يراعة-chatglm2-6b | THUDM/chatglm2-6b | 1024 |
اليراع-interlm-7b | internlm/internlm-7b | 1024 |
اليراع-baichuan-7b | بايتشوان-inc/baichuan-7B | 1024 |
اليراع-ziya-13b | YeungNLP/Ziya-LLaMA-13B-Pretrain-v1 | 1024 |
اليراع-بلوم-7b1 | بيجساينس/بلوم-7ب1 | 1024 |
اليراع-بلوم-2b6-v2 | YeungNLP/بلوم-2b6-zh | 512 |
اليراع-بلوم-2b6 | YeungNLP/بلوم-2b6-zh | 512 |
اليراع-بلوم-1b4 | YeungNLP/بلوم-1b4-zh | 512 |
نموذج اللغة الإنجليزية:
نموذج | النموذج الأساسي | طول التدريب |
---|---|---|
اليراع-mixtral-8x7b | ميسترالاي/ميسترال-8x7B-v0.1 | 1024 |
اليراع-اللاما-30ب | هوجيلاما/اللاما-30ب | 1024 |
اليراع-اللاما-13-v1.2 | NousResearch/Llama-2-13b-hf | 1024 |
اليراع اللاما2-13ب | NousResearch/Llama-2-13b-hf | 1024 |
اليراع-اللاما-13b-v1.2 | هوجيلاما/اللاما-13ب | 1024 |
اليراع-اللاما-13ب | هوجيلاما/اللاما-13ب | 1024 |
في الوقت الحاضر، ينظم هذا المشروع بشكل أساسي مجموعات بيانات التعليمات التالية وينظمها في تنسيق بيانات موحد:
مجموعة البيانات | يقدم |
---|---|
اليراع-القطار-1.1M | قمنا بجمع بيانات عن 23 مهمة صينية شائعة في البرمجة اللغوية العصبية وقمنا ببناء العديد من البيانات المتعلقة بالثقافة الصينية، مثل الأبيات والشعر والترجمة الصينية الكلاسيكية والنثر وروايات جين يونغ وما إلى ذلك. لكل مهمة، تتم كتابة العديد من قوالب التعليمات يدويًا لضمان الجودة العالية وثراء البيانات. تبلغ كمية البيانات 1.15 مليون. |
الطحلب-003-sft-البيانات | بيانات الحوار متعددة الجولات باللغتين الصينية والإنجليزية مفتوحة المصدر من قبل فريق MOSS بجامعة فودان، وتحتوي على أكثر من مليون بيانات |
com.ultrachat | بيانات المحادثة الإنجليزية متعددة المنعطفات مفتوحة المصدر من جامعة تسينغهوا، وتحتوي على أكثر من 1.4 مليون بيانات |
WizardLM_evol_instruct_V2_143k | تستخدم مجموعة بيانات الضبط الدقيق للتعليمات الإنجليزية مفتوحة المصدر من مشروع WizardLM طريقة Evol-Instruct لتطوير التعليمات وتعزيز تعقيد التعليمات لتحسين قدرة النموذج على اتباع التعليمات المعقدة. يحتوي على 143 ألف قطعة من البيانات. |
school_math_0.25M | تحتوي بيانات تعليمات العمليات الرياضية المفتوحة المصدر من قبل فريق مشروع BELLE على 250.000 قطعة من البيانات. |
ShareAI/CodeChat | يتضمن بشكل أساسي عينات من النصوص المتعلقة بالاستدلال المنطقي، وأسئلة التعليمات البرمجية وإجاباتها، وإنشاء التعليمات البرمجية. |
shareAI/ShareGPT-الصينية-الإنجليزية-90k | مجموعة بيانات الأسئلة والأجوبة ذات الجودة العالية المتوازية باللغتين الصينية والإنجليزية، والتي تغطي أسئلة المستخدم في سيناريوهات معقدة حقيقية. |
Ultrachat_200k | يتم تنظيف بيانات الضبط الدقيق لأمر اللغة الإنجليزية المفتوحة المصدر بواسطة مشروع Zephyr استنادًا إلى بيانات Ultrachat. |
Ultrafeedback_binarized | يمكن استخدام مجموعة البيانات المفضلة باللغة الإنجليزية لتدريب DPO |
يمكن اختيار البيانات المذكورة أعلاه أو أخذ عينات منها أو دمجها حسب الحاجة. إذا كنت تدرب نموذجًا صينيًا، فمن المستحسن تجربة استخدام بيانات moss باللغة الإنجليزية، ويمكنك تجربة بيانات Ultrachat وWizardLM.
بيانات التدريب بتنسيق jsonl. تنسيق البيانات لكل صف كما يلي. حقل المحادثة مطلوب ويمكن إضافة أو حذف حقول أخرى وفقًا للاحتياجات الفعلية. يمكنك الرجوع إلى ملف data/dummy_data.jsonl في المشروع.
{
"conversation_id" : 44 ,
"category" : " Brainstorming " ,
"conversation" :[
{
"human" : "怎么能够有效地提升个人能力? " ,
"assistant" : "提升个人能力可以通过以下几个方面实现: nn 1. 学习新知识和技能:阅读相关书籍、参加课程和工作坊、观看教育视频等学习方式,可以帮助你掌握新的知识和技能,从而提升个人能力。 nn 2. 持续练习和实践:不断地练习和实践所学的知识和技能,可以帮助你更好地掌握和应用这些技能,提高你的表现和效率。 nn 3. 寻求反馈和改进:寻求他人的反馈和建议可以帮助你发现自己的不足之处,进一步完善和改进自己的能力。 nn 4. 建立良好的工作和生活习惯:建立良好的工作和生活习惯,如合理安排时间、注意健康、保持积极态度等,可以提高你的工作效率和生活品质,从而提升个人能力。 nn 5. 社交和交流:与他人交流和合作,可以帮助你更好地了解他人的观点和经验,从而提升自己的能力和见识。 "
},
{
"human" : "对于初学者来说,如何快速掌握编程技能? " ,
"assistant":"以下是几个建议,可以帮助初学者快速掌握编程技能:nn1. 学习基础知识:建议先学习编程语言的基础知识和语法,例如变量、数据类型、控制结构、函数等。可以通过在线课程、编程书籍、视频教程等方式学习。nn2. 实践编程:进行实际的编程练习是非常重要的,可以通过参加编程挑战、编写小项目等方式来进行实践。nn3. 寻求反馈:可以寻求他人的反馈和建议,例如在线编程社区、编程导师等,他们可以帮助你发现问题并及时纠正。nn4. 阅读优秀代码:阅读和分析优秀的代码可以帮助你学习其他程序员的编程思路和技巧,从而提高自己的编程能力。nn5. 不断学习和更新:编程技术和工具在不断更新和发展,因此需要不断学习新的知识和技能,例如学习新的编程语言、框架、工具等,以跟上技术的发展和变化。nn总之,学习编程需要耐心和坚持,并且需要不断地实践和学习。通过以上建议,可以帮助初学者快速掌握编程技能。"
},
{
"human" : "除了参加编程挑战和阅读代码,还有哪些方式可以提升自己的编程能力呢? " ,
"assistant":"除了参加编程挑战和阅读代码,还有以下几种方式可以提升自己的编程能力:nn1. 参与开源项目:加入一个开源项目,可以让你了解到实际的软件开发流程和团队合作方式,并且可以与其他开发人员合作,学习和分享编程技巧和经验。nn2. 进行代码重构:对已经编写的代码进行重构,可以帮助你了解更好的编程实践和设计模式,从而提高代码的可读性和可维护性。nn3. 练习算法和数据结构:算法和数据结构是编程中的重要基础,练习算法和数据结构可以帮助你了解不同的数据结构和算法,从而更好地解决实际问题。nn4. 学习软件工程和架构:学习软件工程和架构的知识,可以帮助你了解如何设计和构建可靠、可扩展和可维护的软件系统。nn5. 参加编程社区和论坛:参加编程社区和论坛可以让你与其他开发人员分享和讨论编程经验和技巧,了解最新的技术趋势和解决方案。nn总之,提升编程能力需要不断地学习和实践,并与其他开发人员和编程专家进行交流和合作,以获取更多的经验和知识。"
},
{
"human" : "你有没有推荐的编程挑战网站? " ,
"assistant":"当然,以下是一些值得推荐的编程挑战网站:nn1. HackerRank:HackerRank 是一个全球领先的技术招聘平台,提供数百种编程挑战和比赛,包括算法、数据结构、数学、SQL、AI 等多个技术领域。nn2. LeetCode:LeetCode 是一个在线编程学习和实践平台,提供数千道编程题目,主要涵盖算法和数据结构。nn3. Codeforces:Codeforces 是一个全球知名的编程竞赛网站,提供数百个比赛和练习题目,主要涵盖算法和数据结构。nn4. Codewars:Codewars 是一个在线编程学习和实践平台,提供数千道编程题目,主要涵盖算法、数据结构、面向对象编程等多个技术领域。nn5. Project Euler:Project Euler 是一个非营利性的在线编程挑战平台,提供一系列数学和计算机科学问题,需要用编程语言进行解答。nn以上这些编程挑战网站可以帮助你提高编程能力,并且可以与其他编程爱好者进行交流和竞争。"
},
{
"human" : "在学习编程的过程中,如何避免陷入困境和放弃呢? " ,
"assistant":"学习编程是一个需要长期坚持和不断学习的过程,以下是一些避免陷入困境和放弃的方法:nn1. 制定合理的学习计划:制定合理的学习计划,包括学习时间、学习内容、目标等,可以帮助你更好地管理时间和精力,避免学习过程中的松懈和分心。nn2. 寻找合适的学习资源:选择适合自己的学习资源,例如在线课程、编程书籍、视频教程等,可以让你更好地了解和掌握编程知识和技能。nn3. 寻求帮助和支持:在学习过程中,遇到问题和困难是很正常的,可以寻求他人的帮助和支持,例如参加编程社区、找到编程导师等。nn4. 进行实践和项目:实践和项目是学习编程的重要组成部分,可以帮助你更好地了解和掌握编程技能,同时也可以提高学习的兴趣和动力。nn5. 坚持并保持兴趣:坚持学习和保持兴趣是学习编程的关键。可以通过参加编程社区、参加编程竞赛、与其他编程爱好者交流等方式来保持兴趣和动力。nn总之,学习编程需要耐心和坚持,并需要不断学习和实践。通过以上方法可以帮助你避免陷入困境和放弃。"
}
],
}
يظهر توزيع بيانات Firefly-train-1.1M في الشكل أدناه:
للحصول على تنسيق البيانات، يرجى الرجوع إلى ملف data/pretrain/dummy_pretrain.jsonl في المشروع.
للحصول على تنسيق البيانات، يرجى الرجوع إلى ملف data/dummy_dpo.jsonl في المشروع.
إذا تم الإبلاغ عن خطأ أثناء التدريب، فيمكنك التحقق من الأسئلة الشائعة أولاً.
نقوم باستخراج المكونات المختلفة المستخدمة في التدريب للتوسيع والتحسين اللاحقين. للحصول على التفاصيل، راجع التنفيذ في دليل المكونات. يتم تخزين تكوين المعلمة أثناء التدريب في دليل Train_args لتسهيل الإدارة والتغييرات الموحدة. يمكنك عرض تكوينات التدريب لنماذج مختلفة في دليل Train_args، وتعديلها أو إضافتها حسب الحاجة.
يتم إصلاح إصدارات العديد من حزم بايثون الرئيسية ضمن ملف require.txt، ما عليك سوى تنفيذ البرنامج النصي التالي. يلاحظ:
pip install requirements.txt
إذا كنت بحاجة إلى تمكين Unsloth، فمن المستحسن تثبيت أو تحديث حزم Python التالية:
pip install git+https://github.com/unslothai/unsloth.git
pip install bitsandbytes==0.43.1
pip install peft==0.10.0
pip install torch==2.2.2
pip install xformers==0.0.25.post1
إذا كنت بحاجة إلى استخدام Unsloth لتدريب Qwen1.5، فقم بتثبيت الحزم التالية:
pip install git+https://github.com/yangjianxin1/unsloth.git
أثناء التدريب المسبق، نستخدم خسارة الانحدار التلقائي الكلاسيكية، أي أن الرمز المميز في كل مركز سيشارك في حساب الخسارة.
عند ضبط التعليمات، نقوم فقط بحساب فقدان جزء الاسترداد الخاص بالمساعد.
يقوم دليل Train_args بتخزين ملفات التكوين لنماذج مختلفة باستخدام طرق تدريب مختلفة، ويتم وصف المعلمات الرئيسية على النحو التالي:
يجب تعيين المعلمات التالية عند استخدام تدريب QLoRA:
فيما يتعلق بتكوين المعلمة للسرعة العميقة، يمكنك تعديلها حسب الحاجة.
التدريب المسبق الكامل على المعلمة، استبدل {num_gpus} بعدد بطاقات الرسومات:
deepspeed --num_gpus={num_gpus} train.py --train_args_file train_args/pretrain/full/bloom-1b1-pretrain-full.json
الضبط الدقيق لجميع تعليمات المعلمات، واستبدال {num_gpus} بعدد بطاقات الرسومات:
deepspeed --num_gpus={num_gpus} train.py --train_args_file train_args/sft/full/bloom-1b1-sft-full.json
التدريب المسبق لبطاقة QLoRA الفردية:
python train.py --train_args_file train_args/pretrain/qlora/yi-6b-pretrain-qlora.json
ضبط تعليمات QLoRA لبطاقة واحدة:
python train.py --train_args_file train_args/sft/qlora/yi-6b-sft-qlora.json
التدريب المسبق لـ Doka QLoRA:
torchrun --nproc_per_node={num_gpus} train.py --train_args_file train_args/pretrain/qlora/yi-6b-pretrain-qlora.json
ضبط تعليمات Doka QLoRA:
torchrun --nproc_per_node={num_gpus} train.py --train_args_file train_args/sft/qlora/yi-6b-sft-qlora.json
بطاقة QLoRA واحدة لتدريب DPO:
python train.py --train_args_file train_args/sft/qlora/minicpm-2b-dpo-qlora.json
إذا كنت تستخدم LoRA أو QLoRA للتدريب، فإن هذا المشروع يحفظ فقط الأوزان وملفات التكوين الخاصة بالمحول، وتحتاج إلى دمج أوزان المحول مع النموذج الأساسي. بالنسبة للبرنامج النصي، راجع script/merge_lora.py
نحن نقدم نصًا تفاعليًا لجولات متعددة من الحوار، يرجى مراجعة دليل البرنامج النصي/الدردشة للحصول على التفاصيل. هذا البرنامج النصي متوافق مع جميع النماذج المدربة في هذا المشروع للاستدلال. يجب أن يكون اسم القالب المعين في البرنامج النصي متوافقًا مع اسم القالب أثناء التدريب على النموذج.
cd script/chat
python chat.py
إن top_p ودرجة الحرارة وrepetition_penalty وdo_sample والمعلمات الأخرى في البرنامج النصي للإنشاء لها تأثير كبير على تأثير إنشاء النموذج، ويمكن تصحيحها وتعديلها وفقًا لسيناريوهات الاستخدام الخاصة بك.
يدعم البرنامج النصي للاستدلال استخدام النموذج الأساسي والمحول للاستدلال. العيب هو أنه في كل مرة يتم فيها تشغيل البرنامج النصي، يجب دمج الأوزان، الأمر الذي يستغرق وقتًا طويلاً.
يدعم استخدام 4 بت للاستدلال، ومتطلبات الذاكرة المنخفضة، وسيتم تقليل التأثير قليلاً.
في حالة حدوث OOM، يمكن تقليل المعلمات مثل per_device_train_batch_size وmax_seq_length للتخفيف من حدتها. يمكنك أيضًا تعيين gradient_checkpointing=true، مما قد يقلل بشكل كبير من استخدام الذاكرة، ولكن سرعة التدريب ستكون أبطأ.
توجد إصدارات من كل حزمة بايثون في ملف require.txt
pip install -r requirements.txt
يمكنك تحديد استخدام البطاقة رقم 0 ورقم 1 للتدريب بالطرق التالية:
CUDA_VISIBLE_DEVICES=0,1 torchrun --nproc_per_node={num_gpus} train_qlora.py --train_args_file train_args/qlora/baichuan-7b-sft-qlora.json
يتطلب تدريب Baichuan2 تثبيت torch==2.0 وإلغاء تثبيت xformers وapex، وإلا سيتم الإبلاغ عن خطأ
RuntimeError: No such operator xformers::efficient_attention_forward_generic - did you forget to build xformers with `python setup.py develop`?
يحتاج Qwen إلى إلغاء تثبيت flash-attn لتدريب QLoRA، وإلا سيتم الإبلاغ عن خطأ:
assert all((i.dtype in [torch.float16, torch.bfloat16] for i in (q, k, v)))
بعد الاستفسار، توجد هذه المشكلة على نطاق واسع في المشكلات الموجودة في قاعدة التعليمات البرمجية الرسمية لـ Qwen. إذا قمت بتدريب Qwen-Base وYi-Base، فمن المستحسن تعيين template_name = "افتراضي" لتجنب هذه المشكلة. إذا قمت بإجراء SFT على طرازي Qwen-Chat وYi-Chat، فلن تحدث هذه المشكلة. يمكنك تعيين template_name على "qwen" و"yi" على التوالي.
ملاحظة: هذه المشكلة غير موجودة في Qwen1.5
نظرًا لعوامل مثل محدودية معلمات النموذج ودرجة تنظيف بيانات التدريب، قد يكون للنموذج مفتوح المصدر لهذا المشروع القيود التالية:
بناءً على قيود النموذج أعلاه، نطلب عدم استخدام الكود والبيانات والنماذج الخاصة بهذا المشروع لأغراض تسبب ضررًا للمجتمع، ويجب أن تتوافق مع الترخيص التجاري للنموذج الأساسي.
إذا كنت تستخدم بيانات أو تعليمات برمجية أو نماذج من هذا المشروع، فيرجى الاستشهاد بهذا المشروع.
@misc{Firefly,
author = {Jianxin Yang},
title = {Firefly(流萤): 中文对话式大语言模型},
year = {2023},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {url{https://github.com/yangjianxin1/Firefly}},
}