Willkommen bei der Firefly-Gruppe zum Austausch großer Modelltechnologien. Folgen Sie unserem offiziellen Konto und klicken Sie auf die Schaltfläche „Gruppe beitreten“.
Willkommen, um unserem Zhihu zur Kommunikation und Diskussion zu folgen: Red Rain is Pouring
Firefly ist ein Open-Source-Schulungsprojekt für große Modelle, das Vorschulung, Feinabstimmung der Anweisungen und DPO für gängige große Modelle unterstützt, einschließlich, aber nicht beschränkt auf 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 usw. Dieses Projekt unterstützt vollständiges Parametertraining, effizientes LoRA- und QLoRA-Training sowie Vortraining, SFT und DPO . Wenn Ihre Trainingsressourcen begrenzt sind, empfehlen wir Ihnen dringend, QLoRA zur Feinabstimmung des Unterrichts zu verwenden, da wir die Wirksamkeit dieser Methode im Open LLM Leaderboard überprüft und sehr gute Ergebnisse erzielt haben.
„Die Hauptinhalte dieses Projekts sind wie folgt:
Die aktuelle Version wurde an die Vorlagen verschiedener Chat-Modelle angepasst und es gibt große Aktualisierungen des Codes. Wenn Sie die Vorgängerversion bevorzugen, können Sie den Code v0.0.1-alpha herunterladen
Die Bewertungsergebnisse stammen aus dem Open LLM Leaderboard von Hugging Face. Unsere Modelle werden mithilfe von QLoRA-Skripten trainiert, und für das Training werden nur 1 bis 2 V100 verwendet.
Modell | Durchschnitt | BOGEN | HellaSwag | MMLU | TruthfulQA |
---|---|---|---|---|---|
firefly-mixtral-8x7b | 70.16 | 68.09 | 85,76 | 71,49 | 55.31 |
Yi-34B-Chat | 69,97 | 65,44 | 84.16 | 74,9 | 55,37 |
Glühwürmchen-Lama-30b | 64,83 | 64,25 | 83,64 | 58.23 | 53.2 |
Falcon-40b-Anweisung | 63,47 | 61,6 | 84,31 | 55,45 | 52,52 |
Guanako-33b | 62,98 | 62,46 | 84,48 | 53,78 | 51.22 |
firefly-llama2-13b-v1.2 | 62.17 | 60,67 | 80,46 | 56,51 | 51.03 |
Glühwürmchen-Lama2-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-chat | 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 |
Lama-2-13b-Chat | 59,93 | 59.04 | 81,94 | 54,64 | 44.12 |
Vicuna-13b-v1.1 | 59.21 | 52,73 | 80.14 | 51.9 | 52.08 |
Guanako-13b | 59.18 | 57,85 | 83,84 | 48,28 | 46,73 |
? Mithilfe des Trainingscodes dieses Projekts und der oben genannten Trainingsdaten haben wir die folgenden Modellgewichte trainiert und als Open Source bereitgestellt.
Chinesisches Modell:
Modell | Basismodell | Trainingslänge |
---|---|---|
firefly-baichuan2-13b | baichuan-inc/Baichuan2-13B-Base | 1024 |
firefly-baichuan-13b | baichuan-inc/Baichuan-13B-Base | 1024 |
Glühwürmchen-qwen-7b | Qwen/Qwen-7B | 1024 |
firefly-chatglm2-6b | THUDM/chatglm2-6b | 1024 |
firefly-internlm-7b | internlm/internlm-7b | 1024 |
firefly-baichuan-7b | baichuan-inc/baichuan-7B | 1024 |
firefly-ziya-13b | YeungNLP/Ziya-LLaMA-13B-Pretrain-v1 | 1024 |
Glühwürmchen-Blüte-7b1 | bigscience/bloom-7b1 | 1024 |
Glühwürmchen-Blüte-2b6-v2 | YeungNLP/bloom-2b6-zh | 512 |
Glühwürmchen-Blüte-2b6 | YeungNLP/bloom-2b6-zh | 512 |
Glühwürmchen-Blüte-1b4 | YeungNLP/bloom-1b4-zh | 512 |
Englisches Modell:
Modell | Basismodell | Trainingslänge |
---|---|---|
firefly-mixtral-8x7b | mistralai/Mixtral-8x7B-v0.1 | 1024 |
Glühwürmchen-Lama-30b | Huggyllama/Lama-30b | 1024 |
firefly-llama-13-v1.2 | NousResearch/Llama-2-13b-hf | 1024 |
Glühwürmchen-Lama2-13b | NousResearch/Llama-2-13b-hf | 1024 |
firefly-llama-13b-v1.2 | Huggyllama/Lama-13b | 1024 |
Glühwürmchen-Lama-13b | Huggyllama/Lama-13b | 1024 |
? Derzeit organisiert dieses Projekt hauptsächlich die folgenden Befehlsdatensätze und organisiert sie in einem einheitlichen Datenformat:
Datensatz | einführen |
---|---|
Glühwürmchen-Zug-1,1M | Wir haben Daten zu 23 gängigen chinesischen NLP-Aufgaben gesammelt und viele Daten im Zusammenhang mit der chinesischen Kultur erstellt, wie z. B. Couplets, Gedichte, klassische chinesische Übersetzungen, Prosa, Jin Yong-Romane usw. Für jede Aufgabe werden mehrere Anweisungsvorlagen manuell geschrieben, um die hohe Qualität und Fülle der Daten sicherzustellen. Die Datenmenge beträgt 1,15 Millionen. |
moss-003-sft-data | Vom MOSS-Team der Fudan-Universität als Open-Source-Quelle bereitgestellte chinesische und englische Mehrrunden-Dialogdaten mit über 1 Million Daten |
Ultrachat | Englische Multi-Turn-Konversationsdaten, Open Source von der Tsinghua-Universität, mit mehr als 1,4 Millionen Daten |
WizardLM_evol_instruct_V2_143k | Der vom WizardLM-Projekt als Open Source bereitgestellte Feinabstimmungsdatensatz für englische Anweisungen verwendet die Evol-Instruct-Methode, um die Anweisungen weiterzuentwickeln und die Komplexität der Anweisungen zu erhöhen, um die Fähigkeit des Modells zu verbessern, komplexen Anweisungen zu folgen. Enthält 143.000 Daten. |
school_math_0.25M | Die vom BELLE-Projektteam als Open Source bereitgestellten mathematischen Betriebsanweisungsdaten enthalten 250.000 Daten. |
shareAI/CodeChat | Es enthält hauptsächlich Korpusbeispiele im Zusammenhang mit logischem Denken, Codefragen und -antworten sowie Codegenerierung. |
shareAI/ShareGPT-Chinesisch-Englisch-90k | Chinesisch und Englisch paralleler zweisprachiger hochwertiger Mensch-Maschine-Frage- und Antwortdatensatz, der Benutzerfragen in realen komplexen Szenarien abdeckt. |
ultrachat_200k | Die vom Zephyr-Projekt als Open Source bereitgestellten englischsprachigen Feinabstimmungsdaten für Befehle werden auf der Grundlage von Ultrachat-Daten bereinigt. |
ultrafeedback_binarisiert | Englischer Präferenzdatensatz, kann für die DPO-Schulung verwendet werden |
Die oben genannten Daten können je nach Bedarf ausgewählt, abgetastet oder kombiniert werden. Wenn Sie ein chinesisches Modell trainieren, wird empfohlen, es mit Moosdaten zu versuchen. Auf Englisch können Sie Ultrachat- und WizardLM-Daten ausprobieren.
Die Trainingsdaten liegen im JSONL-Format vor. Das Datenformat jeder Zeile ist wie folgt. Das Konversationsfeld ist erforderlich und andere Felder können je nach tatsächlichem Bedarf hinzugefügt oder gelöscht werden. Sie können auf die Datei data/dummy_data.jsonl im Projekt verweisen.
{
"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总之,学习编程需要耐心和坚持,并需要不断学习和实践。通过以上方法可以帮助你避免陷入困境和放弃。"
}
],
}
Die Datenverteilung von firefly-train-1.1M ist in der folgenden Abbildung dargestellt:
Informationen zum Datenformat finden Sie in der Datei data/pretrain/dummy_pretrain.jsonl im Projekt.
Informationen zum Datenformat finden Sie in der Datei data/dummy_dpo.jsonl im Projekt.
Wenn während des Trainings ein Fehler gemeldet wird, können Sie zunächst die FAQ überprüfen.
Wir extrahieren verschiedene im Training verwendete Komponenten zur späteren Erweiterung und Optimierung. Einzelheiten finden Sie in der Implementierung im Komponentenverzeichnis. Die Parameterkonfiguration während des Trainings wird im Verzeichnis train_args gespeichert, um eine einheitliche Verwaltung und Änderungen zu ermöglichen. Sie können die Trainingskonfigurationen verschiedener Modelle im Verzeichnis train_args anzeigen und sie nach Bedarf ändern oder hinzufügen.
Die Versionen mehrerer wichtiger Python-Pakete sind unter „requirements.txt“ aufgeführt. Führen Sie einfach das folgende Skript aus. Beachten:
pip install requirements.txt
Wenn Sie Unsloth aktivieren müssen, wird empfohlen, die folgenden Python-Pakete zu installieren oder zu aktualisieren:
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
Wenn Sie Unsloth zum Trainieren von Qwen1.5 verwenden müssen, installieren Sie die folgenden Pakete:
pip install git+https://github.com/yangjianxin1/unsloth.git
Während des Vortrainings verwenden wir den klassischen autoregressiven Verlust, d. h. der Token an jeder Position nimmt an der Verlustberechnung teil.
Bei der Feinabstimmung der Anweisung berechnen wir nur den Verlust des Wiederherstellungsteils des Assistenten.
Das Verzeichnis train_args speichert Konfigurationsdateien für verschiedene Modelle, die unterschiedliche Trainingsmethoden verwenden. Die Hauptparameter werden wie folgt beschrieben:
Bei Verwendung des QLoRA-Trainings müssen folgende Parameter eingestellt werden:
Die Parameterkonfiguration von Deepspeed können Sie nach Bedarf ändern.
Vollständiges Parameter-Vortraining, ersetzen Sie {num_gpus} durch die Anzahl der Grafikkarten:
deepspeed --num_gpus={num_gpus} train.py --train_args_file train_args/pretrain/full/bloom-1b1-pretrain-full.json
Feinabstimmung aller Parameteranweisungen, Ersetzen von {num_gpus} durch die Anzahl der Grafikkarten:
deepspeed --num_gpus={num_gpus} train.py --train_args_file train_args/sft/full/bloom-1b1-sft-full.json
Einzelkarten-QLoRA-Vortraining:
python train.py --train_args_file train_args/pretrain/qlora/yi-6b-pretrain-qlora.json
Feinabstimmung der Einzelkarten-QLoRA-Anweisung:
python train.py --train_args_file train_args/sft/qlora/yi-6b-sft-qlora.json
Doka QLoRA-Vorschulung:
torchrun --nproc_per_node={num_gpus} train.py --train_args_file train_args/pretrain/qlora/yi-6b-pretrain-qlora.json
Feinabstimmung der Doka QLoRA-Anweisung:
torchrun --nproc_per_node={num_gpus} train.py --train_args_file train_args/sft/qlora/yi-6b-sft-qlora.json
Einzelkarten-QLoRA für die DPO-Schulung:
python train.py --train_args_file train_args/sft/qlora/minicpm-2b-dpo-qlora.json
Wenn Sie LoRA oder QLoRA zum Training verwenden, speichert dieses Projekt nur die Gewichte und Konfigurationsdateien des Adapters und Sie müssen die Adaptergewichte mit dem Basismodell zusammenführen. Das Skript finden Sie unter script/merge_lora.py
Wir stellen ein interaktives Skript für mehrere Dialogrunden bereit. Weitere Informationen finden Sie im Skript-/Chat-Verzeichnis. Dieses Skript ist mit allen in diesem Projekt trainierten Modellen kompatibel. Der im Skript festgelegte Vorlagenname muss während des Modelltrainings mit dem Vorlagennamen übereinstimmen.
cd script/chat
python chat.py
Die Parameter top_p, Temperature, repetition_penalty, do_sample und andere im Generierungsskript haben einen großen Einfluss auf den Generierungseffekt des Modells und können entsprechend Ihren eigenen Nutzungsszenarien debuggt und geändert werden.
Das Inferenzskript unterstützt die Verwendung von Basismodell und Adapter für die Inferenz. Der Nachteil besteht darin, dass bei jedem Start des Skripts die Gewichte zusammengeführt werden müssen, was viel Zeit in Anspruch nimmt.
Unterstützt die Verwendung von 4 Bit für die Inferenz, geringer Speicherbedarf und der Effekt wird leicht reduziert.
Wenn OOM auftritt, können Parameter wie per_device_train_batch_size und max_seq_length reduziert werden, um das Problem zu lindern. Sie können auch gradient_checkpointing=true festlegen, wodurch die Speichernutzung erheblich reduziert werden kann, die Trainingsgeschwindigkeit jedoch langsamer ist.
Es gibt Versionen jedes Python-Pakets in der Datei „requirements.txt“.
pip install -r requirements.txt
Sie können die Verwendung der Karten Nr. 0 und Nr. 1 für das Training auf folgende Weise festlegen:
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
Für das Training von Baichuan2 ist die Installation von Torch==2.0 und die Deinstallation von Xformers und Apex erforderlich, andernfalls wird ein Fehler gemeldet
RuntimeError: No such operator xformers::efficient_attention_forward_generic - did you forget to build xformers with `python setup.py develop`?
Qwen muss flash-attn für das QLoRA-Training deinstallieren, andernfalls wird ein Fehler gemeldet:
assert all((i.dtype in [torch.float16, torch.bfloat16] for i in (q, k, v)))
Nach einer Untersuchung besteht dieses Problem häufig in der offiziellen Qwen-Codebasis. Wenn Sie Qwen-Base und Yi-Base trainieren, wird empfohlen, template_name="default" festzulegen, um dieses Problem zu vermeiden. Wenn Sie SFT für die Modelle Qwen-Chat und Yi-Chat durchführen, tritt dieses Problem nicht auf. Sie können template_name auf „qwen“ bzw. „yi“ setzen.
Hinweis: Dieses Problem besteht in Qwen1.5 nicht
Aufgrund von Faktoren wie der Einschränkung der Modellparameter und dem Grad der Bereinigung der Trainingsdaten kann das Open-Source-Modell dieses Projekts die folgenden Einschränkungen aufweisen:
Aufgrund der Einschränkungen des oben genannten Modells verlangen wir, dass der Code, die Daten und die Modelle dieses Projekts nicht für Zwecke verwendet werden dürfen, die der Gesellschaft Schaden zufügen, und dass sie der kommerziellen Lizenz des Basismodells entsprechen müssen.
Wenn Sie Daten, Code oder Modelle aus diesem Projekt verwenden, zitieren Sie bitte dieses Projekt.
@misc{Firefly,
author = {Jianxin Yang},
title = {Firefly(流萤): 中文对话式大语言模型},
year = {2023},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {url{https://github.com/yangjianxin1/Firefly}},
}