Selamat bergabung dengan grup pertukaran teknologi model besar Firefly, ikuti akun resmi kami, dan klik tombol bergabung dengan grup.
Selamat mengikuti Zhihu kami untuk komunikasi dan diskusi: Hujan Merah Menurun
Firefly adalah proyek pelatihan model besar sumber terbuka yang mendukung pra-pelatihan, penyempurnaan instruksi, dan DPO untuk model besar arus utama, termasuk namun tidak terbatas pada 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, dll. Proyek ini mendukung pelatihan parameter penuh, pelatihan efisien LoRA, QLoRA , dan mendukung pra-pelatihan, SFT, dan DPO . Jika sumber daya pelatihan Anda terbatas, kami sangat menyarankan penggunaan QLoRA untuk menyempurnakan instruksi, karena kami telah memverifikasi efektivitas metode ini di Papan Peringkat LLM Terbuka dan mencapai hasil yang sangat baik.
?Isi utama proyek ini adalah sebagai berikut:
Versi saat ini telah disesuaikan dengan templat model obrolan yang berbeda, dan ada pembaruan besar pada kodenya. Jika Anda lebih menyukai versi sebelumnya, Anda dapat mendownload kode v0.0.1-alpha
Hasil evaluasi berasal dari Open LLM Leaderboard Hugging Face. Model kami dilatih menggunakan skrip QLoRA, dan hanya 1 hingga 2 V100 yang digunakan untuk pelatihan.
Model | Rata-rata | BUSUR | HellaSwag | MMLU | JujurQA |
---|---|---|---|---|---|
kunang-kunang-mixtral-8x7b | 70.16 | 68.09 | 85,76 | 71.49 | 55.31 |
Yi-34B-Obrolan | 69,97 | 65.44 | 84.16 | 74.9 | 55.37 |
kunang-kunang-llama-30b | 64.83 | 64.25 | 83.64 | 58.23 | 53.2 |
falcon-40b-instruksikan | 63.47 | 61.6 | 84.31 | 55.45 | 52.52 |
guanaco-33b | 62,98 | 62.46 | 84.48 | 53.78 | 51.22 |
kunang-kunang-llama2-13b-v1.2 | 62.17 | 60.67 | 80.46 | 56.51 | 51.03 |
kunang-kunang-llama2-13b | 62.04 | 59.13 | 81,99 | 55.49 | 51.57 |
vicuna-13b-v1.5 | 61.63 | 56.57 | 81.24 | 56.67 | 51.51 |
mpt-30b-obrolan | 61.21 | 58.7 | 82.54 | 51.16 | 52.42 |
wizardlm-13b-v1.2 | 60,79 | 59.04 | 82.21 | 54.64 | 47.27 |
vicuna-13b-v1.3 | 60.01 | 54.61 | 80.41 | 52.88 | 52.14 |
llama-2-13b-obrolan | 59.93 | 59.04 | 81,94 | 54.64 | 44.12 |
vicuna-13b-v1.1 | 59.21 | 52.73 | 80.14 | 51.9 | 52.08 |
guanaco-13b | 59.18 | 57.85 | 83,84 | 48.28 | 46.73 |
? Dengan menggunakan kode pelatihan proyek ini, dan data pelatihan di atas, kami melatih dan membuat bobot model berikut menjadi sumber terbuka.
model Cina:
Model | model dasar | panjang pelatihan |
---|---|---|
kunang-kunang-baichuan2-13b | baichuan-inc/Baichuan2-13B-Base | 1024 |
kunang-kunang-baichuan-13b | baichuan-inc/Baichuan-13B-Base | 1024 |
kunang-kunang-qwen-7b | Qwen/Qwen-7B | 1024 |
kunang-kunang-chatglm2-6b | THUDM/obrolan2-6b | 1024 |
kunang-kunang-internlm-7b | magang/internlm-7b | 1024 |
kunang-kunang-baichuan-7b | baichuan-inc/baichuan-7B | 1024 |
kunang-kunang-ziya-13b | YeungNLP/Ziya-LLaMA-13B-Pretrain-v1 | 1024 |
kunang-kunang-mekar-7b1 | ilmu besar/mekar-7b1 | 1024 |
kunang-kunang-mekar-2b6-v2 | YeungNLP/bloom-2b6-zh | 512 |
kunang-kunang-mekar-2b6 | YeungNLP/bloom-2b6-zh | 512 |
kunang-kunang-mekar-1b4 | YeungNLP/bloom-1b4-zh | 512 |
Model bahasa Inggris:
Model | model dasar | panjang pelatihan |
---|---|---|
kunang-kunang-mixtral-8x7b | mistralai/Mixtral-8x7B-v0.1 | 1024 |
kunang-kunang-llama-30b | pelukan/llama-30b | 1024 |
kunang-kunang-llama-13-v1.2 | Penelitian Nous/Llama-2-13b-hf | 1024 |
kunang-kunang-llama2-13b | Penelitian Nous/Llama-2-13b-hf | 1024 |
kunang-kunang-llama-13b-v1.2 | pelukan/llama-13b | 1024 |
kunang-kunang-llama-13b | pelukan/llama-13b | 1024 |
? Saat ini, proyek ini terutama mengatur kumpulan data instruksi berikut dan mengaturnya ke dalam format data terpadu:
Kumpulan data | memperkenalkan |
---|---|
kereta kunang-kunang-1.1M | Kami mengumpulkan data tentang 23 tugas umum NLP Tiongkok dan menyusun banyak data yang berkaitan dengan budaya Tiongkok, seperti bait, puisi, terjemahan Tiongkok klasik, prosa, novel Jin Yong, dll. Untuk setiap tugas, beberapa templat instruksi ditulis secara manual untuk memastikan kualitas dan kekayaan data yang tinggi. Jumlah data adalah 1,15 juta. |
moss-003-sft-data | Data dialog multi-putaran berbahasa Mandarin dan Inggris bersumber terbuka oleh tim MOSS Universitas Fudan, berisi lebih dari 1 juta data |
ultrachat | Data percakapan multi-putaran bahasa Inggris bersumber terbuka oleh Universitas Tsinghua, berisi lebih dari 1,4 juta data |
WizardLM_evol_instruct_V2_143k | Kumpulan data penyempurnaan instruksi bahasa Inggris yang bersumber terbuka oleh proyek WizardLM menggunakan metode Evol-Instruct untuk mengembangkan instruksi dan meningkatkan kompleksitas instruksi guna meningkatkan kemampuan model dalam mengikuti instruksi yang kompleks. Berisi 143 ribu data. |
sekolah_matematika_0,25 juta | Data instruksi operasi matematika yang bersumber terbuka oleh tim proyek BELLE berisi 250.000 data. |
bagikanAI/CodeChat | Ini terutama mencakup sampel korpus yang terkait dengan penalaran logis, pertanyaan dan jawaban kode, dan pembuatan kode. |
shareAI/ShareGPT-Mandarin-Inggris-90k | Kumpulan data tanya jawab manusia-mesin berkualitas tinggi dalam bahasa Mandarin dan Inggris, yang mencakup pertanyaan pengguna dalam skenario yang sangat kompleks. |
ultrachat_200k | Perintah bahasa Inggris menyempurnakan data yang bersumber terbuka oleh proyek Zephyr dibersihkan berdasarkan data ultrachat. |
ultrafeedback_binarized | Kumpulan data preferensi bahasa Inggris, dapat digunakan untuk pelatihan DPO |
Data di atas dapat dipilih, dijadikan sampel atau digabungkan sesuai kebutuhan. Jika Anda melatih model berbahasa Mandarin, disarankan untuk mencoba menggunakan data lumut. Dalam bahasa Inggris, Anda dapat mencoba data ultrachat dan WizardLM.
Data latih dalam format jsonl, format data tiap barisnya adalah sebagai berikut. Bidang percakapan wajib diisi dan bidang lainnya dapat ditambah atau dihapus sesuai kebutuhan sebenarnya. Anda dapat merujuk ke file data/dummy_data.jsonl di proyek.
{
"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总之,学习编程需要耐心和坚持,并需要不断学习和实践。通过以上方法可以帮助你避免陷入困境和放弃。"
}
],
}
Sebaran data firefly-train-1.1M ditunjukkan pada gambar di bawah ini:
Untuk format datanya, silakan lihat file data/pretrain/dummy_pretrain.jsonl di proyek.
Untuk format datanya, silakan lihat file data/dummy_dpo.jsonl di proyek.
Jika ada kesalahan yang dilaporkan selama pelatihan, Anda dapat memeriksa FAQ terlebih dahulu.
Kami mengekstrak berbagai komponen yang digunakan dalam pelatihan untuk perluasan dan pengoptimalan selanjutnya. Konfigurasi parameter selama pelatihan disimpan di direktori train_args untuk memfasilitasi manajemen dan perubahan terpadu. Anda dapat melihat konfigurasi pelatihan berbagai model di direktori train_args, dan memodifikasi atau menambahkannya sesuai kebutuhan.
Versi beberapa paket python utama diperbaiki di bawah persyaratan.txt. Cukup jalankan skrip berikut. Melihat:
pip install requirements.txt
Jika Anda perlu mengaktifkan Unsloth, disarankan untuk menginstal atau memperbarui paket Python berikut:
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
Jika Anda perlu menggunakan Unsloth untuk melatih Qwen1.5, instal paket berikut:
pip install git+https://github.com/yangjianxin1/unsloth.git
Selama pra-pelatihan, kami menggunakan kerugian autoregresif klasik, yaitu token di setiap posisi akan berpartisipasi dalam perhitungan kerugian.
Saat menyempurnakan instruksi, kami hanya menghitung hilangnya bagian pemulihan asisten.
Direktori train_args menyimpan file konfigurasi untuk model berbeda menggunakan metode pelatihan berbeda.
Parameter berikut perlu diatur saat menggunakan pelatihan QLoRA:
Mengenai konfigurasi parameter deepspeed, Anda dapat memodifikasinya sesuai kebutuhan.
Pra-pelatihan parameter lengkap, ganti {num_gpus} dengan jumlah kartu grafis:
deepspeed --num_gpus={num_gpus} train.py --train_args_file train_args/pretrain/full/bloom-1b1-pretrain-full.json
Menyempurnakan semua instruksi parameter, mengganti {num_gpus} dengan jumlah kartu grafis:
deepspeed --num_gpus={num_gpus} train.py --train_args_file train_args/sft/full/bloom-1b1-sft-full.json
Pra-pelatihan QLoRA kartu tunggal:
python train.py --train_args_file train_args/pretrain/qlora/yi-6b-pretrain-qlora.json
Penyempurnaan instruksi QLoRA kartu tunggal:
python train.py --train_args_file train_args/sft/qlora/yi-6b-sft-qlora.json
Pra-pelatihan Doka QLoRA:
torchrun --nproc_per_node={num_gpus} train.py --train_args_file train_args/pretrain/qlora/yi-6b-pretrain-qlora.json
Penyempurnaan instruksi Doka QLoRA:
torchrun --nproc_per_node={num_gpus} train.py --train_args_file train_args/sft/qlora/yi-6b-sft-qlora.json
Kartu tunggal QLoRA untuk pelatihan DPO:
python train.py --train_args_file train_args/sft/qlora/minicpm-2b-dpo-qlora.json
Jika Anda menggunakan LoRA atau QLoRA untuk pelatihan, proyek ini hanya menyimpan bobot dan file konfigurasi adaptor, dan Anda perlu menggabungkan bobot adaptor dengan model dasar. Untuk skripnya, lihat script/merge_lora.py
Kami menyediakan skrip interaktif untuk beberapa putaran dialog. Silakan lihat direktori skrip/obrolan untuk detailnya. Template_name yang disetel dalam skrip harus konsisten dengan template_name selama pelatihan model.
cd script/chat
python chat.py
Top_p, temperatur, repeat_penalty, do_sample, dan parameter lain dalam skrip pembuatan memiliki dampak besar pada efek pembuatan model, dan dapat di-debug dan dimodifikasi sesuai dengan skenario penggunaan Anda sendiri.
Skrip inferensi mendukung penggunaan model dasar dan adaptor untuk inferensi. Kerugiannya adalah setiap kali skrip dimulai, bobot harus digabungkan, yang membutuhkan waktu lama.
Mendukung penggunaan 4bit untuk inferensi, kebutuhan memori rendah, dan efeknya akan sedikit berkurang.
Jika OOM terjadi, parameter seperti per_device_train_batch_size dan max_seq_length dapat dikurangi untuk meringankannya. Anda juga dapat mengatur gradien_checkpointing=true, yang dapat sangat mengurangi penggunaan memori, namun kecepatan pelatihan akan lebih lambat.
Ada versi setiap paket python di persyaratan.txt
pip install -r requirements.txt
Anda dapat menentukan penggunaan kartu No. 0 dan No. 1 untuk pelatihan dengan cara berikut:
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
Pelatihan Baichuan2 memerlukan instalasi torch==2.0 dan menghapus instalasi xformers dan apex, jika tidak, kesalahan akan dilaporkan
RuntimeError: No such operator xformers::efficient_attention_forward_generic - did you forget to build xformers with `python setup.py develop`?
Qwen perlu menghapus instalasi flash-attn untuk pelatihan QLoRA, jika tidak, kesalahan akan dilaporkan:
assert all((i.dtype in [torch.float16, torch.bfloat16] for i in (q, k, v)))
Setelah diselidiki, masalah ini banyak terjadi pada masalah di basis kode resmi Qwen. Jika Anda melatih Qwen-Base dan Yi-Base, disarankan untuk menyetel template_name="default" untuk menghindari masalah ini. Jika Anda melakukan SFT pada model Qwen-Chat dan Yi-Chat, masalah ini tidak akan terjadi. Anda dapat mengatur template_name ke "qwen" dan "yi" masing-masing.
Catatan: Masalah ini tidak ada di Qwen1.5
Karena faktor-faktor seperti keterbatasan parameter model dan tingkat pembersihan data pelatihan, model sumber terbuka proyek ini mungkin memiliki keterbatasan berikut:
Berdasarkan batasan model di atas, kami mewajibkan kode, data, dan model proyek ini tidak boleh digunakan untuk tujuan yang merugikan masyarakat, dan harus mematuhi lisensi komersial model dasar.
Jika Anda menggunakan data, kode, atau model dari proyek ini, harap kutip proyek ini.
@misc{Firefly,
author = {Jianxin Yang},
title = {Firefly(流萤): 中文对话式大语言模型},
year = {2023},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {url{https://github.com/yangjianxin1/Firefly}},
}