-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Training Details
Yiming Cui edited this page Apr 15, 2023
·
15 revisions
整个训练流程包括词表扩充、预训练和指令精调三部分,其中训练代码参考了🤗transformers中的run_clm.py和Stanford Alpaca项目中数据集处理的相关部分。
由于原版LLaMA对中文的支持非常有限,本项目在原版LLaMA的基础上进一步扩充了中文词表。
- 在通用中文语料上训练了基于sentencepiece的20K中文词表并与原版LLaMA模型的32K词表进行合并
- 排除重复的token后,得到的最终中文LLaMA词表大小为49953
- 需要注意的是,在fine-tune阶段Alpaca比LLaMA多一个pad token,所以中文Alpaca的词表大小为49954
更多关于中文词表扩充的动机,可参考FAQ。
在预训练阶段,使用约20G左右的通用中文语料(与中文BERT-wwm、MacBERT、LERT、PERT中使用的语料一致)在原版LLaMA权重的基础上进一步进行预训练。该过程又分为两个阶段:
-
第一阶段:冻结transformer参数,仅训练embedding,在尽量不干扰原模型的情况下适配新增的中文词向量。
-
第二阶段:使用LoRA技术,为模型添加LoRA权重(adapter),训练embedding的同时也更新LoRA参数。
- 指令精调阶段的任务形式基本与Stanford Alpaca相同。训练方案同样采用了LoRA进行高效精调,并进一步增加了可训练参数数量。
- 在prompt设计上,精调以及预测时采用的都是原版Stanford Alpaca不带input的模版。对于包含input字段的数据,采用
f"{instruction}+\n+{input}"
的形式进行拼接。
指令精调阶段使用了以下数据,其中7B模型约2M数据、13B模型约3M数据。基本构成如下:
数据 | 量级 | 来源 | 说明 |
---|---|---|---|
中英翻译数据 | 500K | 外部链接 | 在原数据集的基础上进行了采样+规则筛选 |
pCLUE数据 | 300K | 外部链接 | 在原数据集的基础上进行了采样+规则筛选 |
Alpaca数据(英) | 50K | 外部链接 | 斯坦福原版Alpaca训练数据 |
Alpaca数据(中) | 50K | 本地链接 | 本项目使用ChatGPT接口将英文版翻译为中文(筛掉一部分) |
Self-instruction数据 | 1~2M | (暂无) | 本项目使用ChatGPT接口进行爬取,具体见以下脚本描述 |
本项目提供了一个动态生成不同领域和指令类型的prompt爬取脚本script/crawl_prompt.py
。
python script/crawl_prompt.py output-file
- 思路与Stanford Alpaca中的做法基本一致,一次批量生成20组数据(可自行修改模板),以降低爬取成本
- 生成的文件包含通过
gpt-3.5-turbo
爬取的数据(你必须拥有OpenAI API key才可以使用) - 虽然指令模板中要求输出JSON,但系统并不总是会返回合法的JSON,需要自行对返回数据进行清洗
- 由于爬取时间比较长,建议后台运行该脚本。多线程运行时注意OpenAI API的调用限制上限
实验设置 | 预训练-第一阶段 | 预训练-第二阶段 | 指令精调 |
---|---|---|---|
Batch Size | 1024 | 1024 | 512 |
Initial Learning Rate | 2e-4 | 1e-4 | 1e-4 |
Training Steps | 3K | 6K | 6K-10K |
Max Length | 512 | 512 | 512 |
Trainable Parameters (%) | 2.97% | 6.06% | 6.22% |
Training Device | 8 × A100 | 16 × A100 | 16 × A100 |
Distributed Training | DeepSpeed Zero-2 | DeepSpeed Zero-2 | DeepSpeed Zero-2 |
- 模型合并与转换
- 模型量化、推理、部署
- 效果与评测
- 训练细节
- 常见问题
- Model Reconstruction
- Model Quantization, Inference and Deployment
- System Performance
- Training Details
- FAQ