训练细节 (original) (raw)

整个训练流程包括词表扩充、预训练和指令精调三部分,其中词表扩充的代码参见merge_tokenizers.py;预训练和指令精调代码参考了🤗transformers中的run_clm.pyStanford Alpaca项目中数据集处理的相关部分。

准备工作:词表扩充

由于原版LLaMA对中文的支持非常有限,本项目在原版LLaMA的基础上进一步扩充了中文词表。

更多关于中文词表扩充的动机,可参考FAQ。如果欲了解扩充词表的具体方法,或者使用自己的词表对LLaMA tokenizer进行扩充,我们提供了代码merge_tokenizers.py供参考。该脚本运行方式如下:

python merge_tokenizers.py \
  --llama_tokenizer_dir llama_tokenizer_dir \
  --chinese_sp_model_file chinese_sp_model_file

其中

我们所使用的在中文通用语料上训练的20K中文词表也一并放出,可以在scripts/merge_tokenizer/chinese_sp.model下载。

预训练

指令精调

训练数据

指令精调阶段使用了以下数据,其中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

实验配置

以下是训练基础版7B模型的训练配置。更多详情请参考我们的技术报告

实验设置 预训练-第一阶段 预训练-第二阶段 指令精调
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 × A40(48G) 16 × A40(48G) 16 × A40(48G)
Distributed Training DeepSpeed Zero-2 DeepSpeed Zero-2 DeepSpeed Zero-2