简介
记录基于LLaMA2模型的精调方案。目前的方案有:
方案 | 描述 |
Chinese-LLaMA-Alpaca-2 | 模型在原版Llama-2的基础上扩充并优化了中文词表,使用了大规模中文数据进行增量预训练,进一步提升了中文基础语义和指令理解能力,相比一代相关模型获得了显著性能提升。 |
BELLE | 结合中文语料通过Self Instruct方式微调LLaMA2,对LLaMA支持的文档较少 |
FastChat | 根据对话数据,微调LLaMA2。文档对中文支持比较少 |
Chinese-LLaMA-Alpaca-2
考虑基于已经训练好的模型(chinese-alpaca-2-7b-16k),进行微调。
模型介绍如下:
模型chinese-alpaca-2-7b-16k可以直接从下述链接下载。https://huggingface.co/ziqingyang/chinese-alpaca-2-7b-16k
也可以基于“Llama-2-7B-hf”和“Chinese-Alpaca-2-LoRA-7B”合并得到。下载链接分别为:
https://huggingface.co/meta-llama/Llama-2-7b-hf
https://huggingface.co/ziqingyang/chinese-alpaca-2-lora-7b
合并方式,参考下述文章。
manual_conversion_zh · ymcui/Chinese-LLaMA-Alpaca-2 Wiki · GitHub
接下来进行"预训练"(可选),参考下述文章。model_name_or_path参数设置成chinese-alpaca-2-7b-16k。--dataset_dir参数为预训练数据的目录,可包含多个以txt结尾的纯文本文件。训练后需要进行合并操作。
pt_scripts_zh · ymcui/Chinese-LLaMA-Alpaca-2 Wiki · GitHub
txt内容类似如下:
接着进行"指令精调训练"。model_name_or_path参数设置成chinese-alpaca-2-7b-16k或做了lora合并后的模型目录。--dataset_dir: 指令精调数据的目录,包含一个或多个以json结尾的Stanford Alpaca格式的指令精调数据文件。训练后需要进行合并操作。
Stanford Alpaca格式如下:
web demo搭建(可选),参考文章如下。使用fastapi实现的简易的仿OPENAI API风格的服务器DEMO。api_calls_vllm_zh · ymcui/Chinese-LLaMA-Alpaca-2 Wiki · GitHub
BELLE
基于LLaMA2的微调的模型已经发布。基于LLaMA2的微调,未做详细描述。推测可以安装原先的LLaMA1方案进行微调。参考链接如下:BELLE/train at main · LianjiaTech/BELLE · GitHub
基座模型考虑使用“BELLE-Llama2-13B-chat-0.4M”,还需要进行与LLaMA2的合并。
https://huggingface.co/BELLE-2/BELLE-Llama2-13B-chat-0.4M
也支持“预训练”和“指令微调训练”。数据格式分别如下:
提供了一个webUI。
FastChat
只支持指令微调训练模型“vicuna-7b-v1.5-16k”,下载链接如下:
https://huggingface.co/lmsys/vicuna-7b-v1.5-16k
微调后需要进行合并,合并的相关细节项目没有做过多介绍。考虑自己集成peft进行合并
其他
模型微调的方法:
优点:
有机会全面提升在特定领域下的回答质量。
一旦训练成功后,回答问题所需的领域知识要求会下降,节约后期领域知识的收集成本。
训练成本可以接受。从开源社区看到使用 Low-Rank Adaptation of Large Language Models(LoRA)方式微调一个模型仅需要 V100 显卡花费 8 小时就可以收敛。
缺点:
需要收集并预处理大量的高质量领域数据。如果需要 Full Fine-Tuning(FFT) 的方法需要 10 万条以上的语料,如果使用 Parameter-Efficient Fine-Tuning(PEFT) 的方法也需要 5 万条以上的语料。
训练效果不明确。训练后,虽然提升了领域知识的回答能力,但在其他通用知识能力、推理能力会下降。在真实面对用户提问时,可能导致无法很好推理而让回答问题的能力变得更差。因为微调的方法是基于一个已有模型来训练,因此无论是变好还是变差都是基于已有模型而言的,如果找到好的已有模型就可以让微调模型有一个更高的起点。
开源的模型质量无法和 OpenAI 媲美。虽然训练成本有机会降低让训练成为可能,目前仍然没有学界或工业界报告能够产出和 OpenAI 相似能力的开源模型。
每次迭代时间较长。每次迭代(以月为单位)需要经历一遍或几遍数据准备、训练、测试流程,才有机会得到一个可用的模型。特别是数据准备,在没有实际训练过几遍之前,可能都无法准备出高质量的训练数据集。
参考
LLaMA的解读与其微调(含LLaMA 2):Alpaca-LoRA/Vicuna/BELLE/中文LLaMA/姜子牙_llama微调-优快云博客
GitHub - Instruction-Tuning-with-GPT-4/GPT-4-LLM: Instruction Tuning with GPT-4