XTuner 提供多个开箱即用的配置文件,用户可以通过下列命令查看:
# 列出所有内置配置 xtuner list-cfg
假如显示bash: xtuner: command not found的话可以考虑在终端输入 export PATH=$PATH:'/root/.local/bin'
平台:Ubuntu + Anaconda + CUDA/CUDNN + 8GB nvidia显卡
在InternStudio平台上,按照笔记二的步骤得到pytorch 2.0.1 的环境,然后:
/root/share/install_conda_env_internlm_base.sh xtuner0.1.9
然后激活环境:
# 激活环境 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]'
开始安装,当安装完成之后,开始准备工作。创建一个微调 oasst1 数据集的工作路径,进入
mkdir ~/ft-oasst1 && cd ~/ft-oasst1
正式开始微调,第一步是准备配置文件,我们可以通过
xtuner list-cfg
查看XTuner提供的内置的配置文件。例如此时我们可以:
cd ~/ft-oasst1 xtuner copy-cfg internlm_chat_7b_qlora_oasst1_e3 .
其中,qlora指的是使用算法,oasst1指的是数据集,e3指的是数据集跑3次。
然后下载模型:
ln -s /share/temp/model_repos/internlm-chat-7b ~/ft-oasst1/
然后下载数据集:
cd ~/ft-oasst1 cp -r /root/share/temp/datasets/openassistant-guanaco .
然后修改其中的模型和数据集为本地路径
cd ~/ft-oasst1 vim internlm_chat_7b_qlora_oasst1_e3_copy.py
就可以开始微调了:
# 单卡 ## 用刚才改好的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 文件夹:
mkdir hf export MKL_SERVICE_FORCE_INTEL=1 export MKL_THREADING_LAYER=GNU 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 ./hf
此时,hf 文件夹即为我们平时所理解的所谓 “LoRA 模型文件”。
然后可以部署与测试:
将 HuggingFace adapter 合并到大语言模型:
xtuner convert merge ./internlm-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
与合并后的模型对话:
# 加载 Adapter 模型对话(Float 16) xtuner chat ./merged --prompt-template internlm_chat # 4 bit 量化加载 # xtuner chat ./merged --bits 4 --prompt-template internlm_chat
- 修改
cli_demo.py
中的模型路径
- model_name_or_path = "/root/model/Shanghai_AI_Laboratory/internlm-chat-7b" + model_name_or_path = "merged"
- 运行
cli_demo.py
以目测微调效果
python ./cli_demo.py
微调前:
微调后:
格式化的数据集长这样: