项目申请书
项目名称: 基于LLAMA/Bloom/GLM的高效指令微调和RLHF训练 项目导师: CQU弟中弟 申请人: 陈佳亮 日期: 2023.06.02 邮箱: cjl99@zju.edu.cn
Project Target
使用 Mindspore,基于目前开源的基座模型 LLaMA/Bloom/GLM 做中文对话任务的调优,预期可以达到 ChatGPT 90%的效果。其中调优方法可以采用 Instruction Tuning 或 RLHF等。
Roadmap
我思考了我会如何实现这个项目,拆解了一下项目任务。对每个过程给出了预期目标、实现路径以及预期时间。我的想法是主要基于 LLaMA 和 GLM 模型。
1. 熟悉 MindNLP+OPS 开发框架
我想先通过训练和推理 BERT/GPT2/T5 这几个基础模型来熟悉一下 MindNLP + ops 的开发流程(从 Transformer + torch)中迁移过来。由于对BERT、GPT2、T5模型的细节已经有所了解,在这部分我应该会更关注整个训练推理框架的流水线,API使用等,为之后做准备。
熟悉的主要方法:
- 阅读代码和文档
- 通过调试跟踪代码运行过程
- 重点关注一下如何从huggingface加载数据集和权重 迁移教程
2. 实现模型推理和评估流程
2.1 推理 ChatGLM-6B
由于 ChatGLM-6B 对中文的支持应该是三个基模型中最好的,同时他的参数已经经过 RLHF 调整,直接使用效果就可能不错。所以我想先尝试一下 GLM 模型,把它作为项目的 Baseline。我会使用 ChatGLM-6B 的 预训练参数),构建一个评估Pipeline,得到和 ChatGLM-6B 一样的效果。有一个 Eval pipeline 对之后微调模型更有帮助。
具体过程大致可以分为:
- 精读论文 + 阅读 GLM 源码,深入了解 GLM 模型架构
- 预训练参数导入、简单测试模型推理效果
- 编写模型 Eval 代码 并和现有结果进行对比
对于评估模型,除了自己评估外,我目前找到的评价中文大语言模型的公开指标,具体如何选用可能需要再与导师沟通。
2.2 推理 Chinese Alpaca 模型
与2.1 类似的过程,这一部分我会基于Chinese-LLaMA 中给出的 LoRA 权重,实现 mindnlp 中的 llama+lora 微调模型的推理过程,并做类似的效果评估。
3. 复现 Instruction Tuning 过程
3.1 指令微调数据集收集和处理
我大致搜索了一下现有的指令微调数据集:
- alpaca英文数据翻译+修改后形成的数据集
- Alpaca_GPT4_zh,alpaca 英文指令的翻译版本
- BELLE 数据集(10M条)
- Chinese Open Instruction Generalist (COIG),翻译 + 考试 + Code 等等,来自论文 Chinese Open Instruction Generalist: A Preliminary Release
- Firefly(流萤): 中文对话式大语言模型用到的 1.1M条数据
- Baize-data,来自于 ChatGPT 与自己对话的数据,包含23种常见的中文NLP任务的指令数据。对于每个任务,由人工书写若干指令模板,保证数据的高质量与丰富度。
- nlp_chinese_corpus 其中包括了社区问答数据410M
- …
3.2 尝试指令微调
LLaMA + LoRA
这一部分应该是整个 project 最难的一部分,要使用自己的代码训练出类似效果的模型参数。LoRA 微调我看到 mindnlp 已经有实现了,我应该会先尝试使用 LoRA方式指令微调 LLaMA,参考先有的基于Transformer的指令微调的代码,这里参考的代码有很多就不一一列举了。我会训练出一个模型并验证其达到了与之前 Part2 模型类似的效果。
P-tuning v2 + ChatGLM-6B
清华放出了对于 ChatGLM-6B 模型进行 P-tuning-v2 微调的方案,但是 ChatGLM 本身已经经过微调,这个微调可能更适合于将模型迁移到其他领域,同时目前P-Tuningv2在 mindnlp 我没有找到实现,是否需要做有待商榷。
4. Others
我目前认为做完 Part3 应该基本完成了项目预期目标,下面列举了一些更深入的方向,如果顺利的话希望可以多多探索,如果还不够也请导师指正。
- RLHF/RAHF,这块知识我目前还不是很了解,但是也比较想学习,因为这是训练ChatGPT模型非常重要的一环。如果时间来得及,我更可能尝试这一块内容,争取能实现正确和完整的代码逻辑,并验证效果。
- 将模型连接一个可视化界面,类似于 llama.cpp,便于人与模型交互测试。
- 我希望能实现并尝试使用不同的PEFT方式(如Adapters、P-Tuning、AdaLoRA等)来微调并对比实验,我可能会参考 PEFT 仓库的实现,将代码迁移到mindnlp上。
Timeline
这里放出了我各个部分的时间安排,可能会在不影响产出的前提下动态调整。由于目前手头有一篇论文想赶一赶 DDL,最迟会从 7月中旬开始实现,不影响项目预期目标。
| subtask | time |
|---|---|
| 熟悉 MindNLP+OPS 开发框架 | 1 week |
| ChatGLM-6B 模型导入 + 推理 | 1 week (-2days) |
| 评估 ChatGLM-6B (数据收集+代码编写+测试) | 2 weeks (-2days) |
| LLaMA+LoRA 模型 推理 + 评估 | 1 week (-2days) |
| Instruction 数据收集 + 处理 | 1 week |
| Instruction Tuning 代码编写 | 1 week |
| Instruction Tuning 训练 + 评估 | 3 weeks (+/- 1 weeks) |
| Others: (RHLF) + 总结归纳 | 2 weeks |
| Total | 3 months |