课程4-笔记-书生浦语大模型实战营-4

1、XTuner安装
# 如果你是在 InternStudio 平台,则从本地 clone 一个已有 pytorch 2.0.1 的环境:
/root/share/install_conda_env_internlm_base.sh xtuner0.1.9
# 如果你是在其他平台:
conda create --name xtuner0.1.9 python=3.10 -y

# 激活环境
conda activate xtuner0.1.9
# 进入家目录 (~的意思是 “当前用户的home路径”)
cd ~
# 创建版本文件夹并进入,以跟随本教程
mkdir xtuner019 && cd xtuner019


# 拉取 0.1.9 的版本源码
git clone -b v0.1.9 https://github.com/InternLM/xtuner
# 无法访问github的用户请从 gitee 拉取:
# git clone -b v0.1.9 https://gitee.com/Internlm/xtuner

# 进入源码目录
cd xtuner

# 从源码安装 XTuner
pip install -e '.[all]'

注意:不管是internlm2--internlm-7b还是internlm--internlm-7b,cuda的版本应该为11.7,显卡驱动版本、torch版本、python版本也随之确定。我一开始装了最新的cuda12,最后排查问题总是怀疑版本不对降到了11.7,后面发现InternStudio官方开发机就只给了cuda11.7的镜像。

2、微调
2.1 准备配置文件
XTuner 提供多个开箱即用的配置文件,用户可以通过下列命令查看:

# 列出所有内置配置
xtuner list-cfg
配置文件名的解释:

xtuner copy-cfg internlm_chat_7b_qlora_oasst1_e3 .

模型名 internlm_chat_7b
使用算法 qlora
数据集 oasst1
把数据集跑几次 跑3次:e3 (epoch 3 )
拷贝一个配置文件到当前目录: # xtuner copy-cfg ${CONFIG_NAME} ${SAVE_PATH}

2.2 模型下载
还是用前两次课程下载的模型internlm2-chat-7b即可,对模型微调的结果会生成到其他目录,不会改变模型原始文件。

2.3 数据集下载
https://huggingface.co/datasets/timdettmers/openassistant-guanaco/tree/main

2.4 修改配置文件


其实这两处路径可以不修改,除非想换数据集,不改也不会重新下载,会引用到之前下载好的internlm2-chat-7b。微调完的新模型文件会生成到另一个目录,不会自动合并到原始模型上,模型的合并是需要手动处理的,后面有单独的小节介绍。

2.5 开始微调

可以看到每训练10个样本花费3分10秒,总共2166个样本训练3轮:

3 * (2166 / 10) * 3min10sec ≈ 34小时

eta也确实显示1 day 10 hours

 

期间显卡一直是满载的,显存16G都没到,QLoRA真省显存啊

 

最后终于训练成功了,训练期间每1000个样本训练完成会打印一次同一问题的回答,确实肉眼可见回答内容在不断丰富

 

训练完就得到了Adapter文件夹

 

后续的步骤跟课程保持一致

2.6 HuggingFace 模型转换
将得到的 PTH 模型转换为 HuggingFace 模型,即:生成 Adapter 文件夹

xtuner convert pth_to_hf ${CONFIG_NAME_OR_PATH} ${PTH_file_dir} ${SAVE_PATH}

在本示例中,为:

mkdir hf
export MKL_SERVICE_FORCE_INTEL=1
export MKL_THREADING_LAYER=GNU
xtuner convert pth_to_hf ./internlm2_chat_7b_qlora_oasst1_e3_copy.py ./work_dirs/internlm_chat_7b_qlora_oasst1_e3_copy/epoch_3.pth ./hf

此时,hf 文件夹即为我们平时所理解的所谓 “LoRA 模型文件”

3、部署与测试
3.1 将 HuggingFace adapter 合并到大语言模型
xtuner convert merge ./internlm2-chat-7b ./hf ./merged --max-shard-size 2GB
# xtuner convert merge \
# ${NAME_OR_PATH_TO_LLM} \
# ${NAME_OR_PATH_TO_ADAPTER} \
# ${SAVE_PATH} \
# --max-shard-size 2GB
3.2 与合并后的模型对话
# 加载 Adapter 模型对话(Float 16)
xtuner chat ./merged --prompt-template internlm2_chat

# 4 bit 量化加载
# xtuner chat ./merged --bits 4 --prompt-template internlm2_chat
注意:如果跟我一样使用的是internlm2-chat-7b模型,此处的对话模板也必须调整为internlm2_chat,否则可能会不停自动输出,无法交互。

3.3 运行demo
修改cli_demo.py中的模型为上一步merge的结果

这个回答实际上是第一轮微调1000个样本之后的了,最早的截图我找不到了~跟最后的结果比,仍然能看出不小的差异。

 

posted @ 2024-02-26 11:00  russellwang  阅读(8)  评论(0编辑  收藏  举报