书生·浦语(InternLM)-openLesson-4-学习笔记

目录

XTuner 大模型单卡低成本微调实战

1、XTuner安装

2、微调

2.1 准备配置文件

2.2 模型下载

2.3 数据集下载

2.4 修改配置文件

2.5 开始微调

2.6 HuggingFace 模型转换

3、部署与测试

3.1 将 HuggingFace adapter 合并到大语言模型

3.2 与合并后的模型对话

3.3 运行demo

课程链接


XTuner 大模型单卡低成本微调实战

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 开始微调

这一步我比较兴奋,终于有一种自己在炼丹的感觉了。可惜的是P40不支持deepspeed加速,虽然P40似乎支持INT8,但是即使加速改为8bit依然会报不支持,因此我没有使用deepspeed加速,最终训练花费了34个小时。

可以看到每训练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个样本之后的了,最早的截图我找不到了~跟最后的结果比,仍然能看出不小的差异。

微调后:

课程链接

https://github.com/InternLM/tutorial/blob/main/xtuner/README.md

XTuner 大模型单卡低成本微调实战_哔哩哔哩_bilibili

  • 20
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值