一 数据集
-
【Awesome-Chinese-LLM中文数据集】
- 【awesome-instruction-dataset】
- 【awesome-instruction-datasets】
- 【LLaMA-Efficient-Tuning-数据集】
- Wiki中文百科(25w词条)wikipedia-cn-20230720-filtered
- BaiduBaiKe(563w词条) 百度网盘 提取码: bwvb
- Medical Dataset
二 预训练LLama2
2.1 扩充词表
因为在llama官方所提供的词表中,中文的部分只有700个,这也是llama中文能力聊胜于无的原因。为了训练自己的中文LLaMa,这里将引入新的中文分词器。
如果需要扩充词表,可以用sentencepiece训练新的词表。
具体可参考【GitHub - taishan1994/sentencepiece_chinese_bpe】
然后合并新的词表,参考代码【merge_tokenizers】
2.2 预训练
主要参考2个库。
LLaMA-Efficient-Tuning
具体参考文档,支持单GPU训练。
Chinese-LLaMA-Alpaca-2-预训练脚本
支持多机多卡训练
2.3 监督微调(sft)
中文SFT语料最近陆陆续续开源了很多(bell、MOSS、alpaca-zh等),但是坦白讲,质量都不高,大家可自行下载并需要进行清洗,清洗SFT数据是个耗时耗力的工作,但根据作者微调经验,一份高质量的SFT数据是相当重要的‼️(如果不清洗SFT数据,可能无法获得满意的SFT效果,建议大家在这块多花些时间) 中文SFT语料网上最近很多,大家自行下载。因为SFT语料一般较小,我们没必要提前分词,而是在构建Dataloader的时候进行分词构建batch送给模型。
分为参数高效微调和全部/部分参数微调。
参数高效微调一般是冻结原模型,通过adapter、lora、Prefix-tuning(前缀微调)等方法微调,peft库目前已经支持这些方法,一般用lora,结构简单。
微调代码库
(1)llama2官方微调教程:llama-recipes
#if running on multi-gpu machine
export CUDA_VISIBLE_DEVICES=0python llama_finetuning.py --use_peft --peft_method lora --quantization --model_name /patht_of_model_folder/7B --output_dir Path/to/save/PEFT/model
(2)Llama2-Chinese-模型微调
(3)LLaMA-Efficient-Tuning-sft监督微调
(4)Chinese-LLaMA-Alpaca-2-指令精调脚本
2.4 RLHF微调
llama2增加了RLHF(Reinforcement Learning from Human Feedback)基于人类反馈的强化学习。
RLHF训练流程如下图:
(1)先对模型进行微调,具体参考微调部分。
(2)训练一个奖励模型
原则上,我们可以直接用人类标注来对模型做 RLHF 微调。然而,这将需要我们给人类发送一些样本,在每轮优化后计分,这个流程需要耗费大量人工,且需要大量数据集,而人类阅读和标注的速度有限。更简单的办法就是用用人类标注集来训练一个奖励模型。奖励模型的目的是模拟人类对文本的打分。构建奖励模型有许多能用的策略: 最直接的便是预测标注 (比如根据好与坏,输出比分或者布尔值)。最佳实践是,预测结果的排序,即对每个 prompt (输入文本) 对应的两个结果yk,yj,模型预测人类标注的比分哪个更高。
(3)基于人类反馈的强化学习
有了微调的语言模型和奖励模型,可以开始执行 RL 循环了,主要分为以下三步:
- 生成对 prompt (输入文本) 的反馈。
- 用奖励模型来对反馈评分。
- 对评分,进行一轮策略优化的强化学习。
【llm大语言模型】一文看懂llama2(原理,模型,训练) - 知乎 (zhihu.com)