534
社区成员




一问一答的对话训练
角色指定
对话模板(仅在微调阶段):
为了能让LLM区分出, system, User和Assistant 不同的模型会有不同的模板
对话模板构建
微调时只对答案部分计算损失
不需要问答 陈述式
角色 system input 留空,仍然计算assistant部分的损失
LoRA: low-rank adaptation of large language models
在stable diffusion中为了画出心仪的风格/角色, 往往会在一个公开的底模上, 再套一个LoRA模型, 换一个LoRA, 就相当于换一个初始的风格或者初始的人物, 底座模型不用换
LLM的参数量主要集中在模型中的Linear, 训练这些参数需要很大的显存, LoRA模型就不用那么大的显存开销了
LoRA 通过在原本的 Linear 旁, 新增一个支路, 包含两个连续的小 Linear, 新增的这个支路通常叫做 Adapter(Adapter文件就是常说的LoRA模型文件)
Adapter 参数量远小于原本的 Linear, 能大幅降低训练的显存消耗
一个大语言模型微调工具箱。由 MMRazor 和 MMDeploy 联合开发
傻瓜化: 以配置文件的形式封装了大部分微调场景
轻量级: 对于 7B 参数量的LLM, 微调所需的最小显存仅为 8GB
支持的开源LLM
还支持工具类模型的对话
强大的数据处理引擎, 很方便的在更多开源的流行数据集上进行一键启动, 使开发者专注于数据内容
数据集映射函数
对话模板映射函数
多数据样本拼接, 充分利用gpu资源
自定义数据集 建议使用json格式
Flash Attention 和 DeepSpeed ZeRO 是 XTuner 最重要的两个优化技巧
优化前后, 不同的计算卡上的一个显存占用情况
Ubuntu + Anaconda + CUDA/CUDNN + 8GB nvidia显卡
git clone -b v0.1.9 https://github.com/InternLM/xtuner
从源码安装 XTunerpip install -e '.[all]'
XTuner 提供多个开箱即用的配置文件 xtuner list-cfg
拷贝一个配置文件到当前目录: xtuner copy-cfg ${CONFIG_NAME} ${SAVE_PATH}
*无 chat比如 internlm-7b 代表是基座(base)模型
model文件夹
数据文件夹
修改配置文件'
开始微调
训练:xtuner train ${CONFIG_NAME_OR_PATH}
也可以增加 deepspeed 进行训练加速:
# 单卡
## 用刚才改好的config文件训练
xtuner train ./internlm_chat_7b_qlora_oasst1_e3_copy.py
# 多卡
NPROC_PER_NODE=${GPU_NUM} xtuner train ./internlm_chat_7b_qlora_oasst1_e3_copy.py
# 若要开启 deepspeed 加速,增加 --deepspeed deepspeed_zero2 即可
将得到的 PTH 模型转换为 HuggingFace 模型,即:生成 Adapter 文件夹, hf 文件夹即为我们平时所理解的所谓 “LoRA 模型文件”
export MKL_SERVICE_FORCE_INTEL=1
xtuner convert pth_to_hf ./internlm_chat_7b_qlora_oasst1_e3_copy.py ./work_dirs/internlm_chat_7b_qlora_oasst1_e3_copy/epoch_1.pth ${SAVE_PATH}
xtuner train internlm_chat_7b_qlora_medqa2019_e3.py --deepspeed deepspeed_zero2
将 HuggingFace adapter 合并到大语言模型:xtuner convert merge ./internlm-chat-7b ./hf ./merged --max-shard-size 2GB
与合并后的模型对话:
xtuner chat --help
# 加载 Adapter 模型对话(Float 16)
xtuner chat ./merged --prompt-template internlm_chat
# 原模型
xtuner chat ./internlm-chat-7b --prompt-template internlm_chat
# 4 bit 量化加载
# xtuner chat ./merged --bits 4 --prompt-template internlm_chat
--prompt-template default,zephyr,internlm_chat,moss_s
ft,llama2_chat,code_llama_chat,chatglm2,chatglm3,qwen_ch
at,baichuan_chat,baichuan2_chat,wizardlm
基于 InternLM-chat-7B 模型,用 MedQA 数据集进行微调,将其往医学问答领域对齐
数据准备, 将数据转为 XTuner 的数据格式
目标格式:(.jsonL)
[{
"conversation":[
{
"system": "xxx",
"input": "xxx",
"output": "xxx"
}
]
},
{
"conversation":[
{
"system": "xxx",
"input": "xxx",
"output": "xxx"
}
]
}]
开始自定义微调xtuner train internlm_chat_7b_qlora_medqa2019_e3.py --deepspeed deepspeed_zero2
教会LLM模型调用 API接口以获取实时信息
MSAgent 数据集每条样本包含一个对话列表(conversations),其里面包含了 system、user、assistant 三种字段。其中:
插件本质就是python脚本, 调用 API 接口
xtuner 是从国内的 ModelScope 平台下载 MS-Agent 数据集,因此不用提前手动下载数据集文件。
xtuner list-cfg | grep msagent
xtuner copy-cfg internlm_7b_qlora_msagent_react_e3_gpu8 .
xtuner train ./internlm_7b_qlora_msagent_react_e3_gpu8_copy.py --deepspeed deepspeed_zero2
serper给LLM提供请求服务, LLM调用 serper提供的API接口以获取搜索得到的结果
去 serper.dev 免费注册一个账号,生成自己的 api key。这个东西是用来给 lagent 去获取 google 搜索的结果的。等于是 serper.dev 帮你去访问 google,而不是从你自己本地去访问 google 了。export SERPER_API_KEY=abcdefg
未 merge 情况(添加adapter, adapter后面跟上LoRA文件路径)xtuner chat ./internlm-chat-7b --adapter internlm-7b-qlora-msagent-react --lagent --prompt-template internlm_chat
也可merge模型
--lagent 增加web api启动参数