接着上篇文章《轻量化大模型微调工具XTuner指令微调实战(上篇)》来接着写教程。
一、模型转换
模型训练后会自动保存成 PTH 模型(例如 iter_500.pth
),我们需要利用 xtuner convert pth_to_hf
将其转换为 HuggingFace 模型,以便于后续使用。具体命令为:
xtuner convert pth_to_hf ${CONFIG_NAME_OR_PATH} ${PTH} ${SAVE_PATH}# 例如:xtuner convert pth_to_hf ./config.py ./iter_500.pth ./iter_500_hfxtuner convert pth_to_hf ./qwen1_5_1_8b_chat_qlora_alpaca_e3.py /root/autodl-tmp/project/day11/xtuner/work_dirs/qwen1_5_1_8b_chat_qlora_alpaca_e3/iter_4000.pth /root/autodl-tmp/llm/hf
第1个参数CONFIG_NAME_OR_PATH:配置文件路径,也就是执行微调指令的配置文件。
第2个参数PTH:XTuner微调生成文件,给绝对路径。
第3个参数SAVE_PATH:模型转换保存的地方,需手动创建一个目录。
二、模型合并
如果您使用了 LoRA / QLoRA 微调,则模型转换后将得到 adapter 参数,而并不包含原 LLM 参数。如果您期望获得合并后的模型权重,那么可以利用 xtuner convert merge
:
xtuner convert merge ${LLM} ${ADAPTER_PATH} ${SAVE_PATH}
# 例如:xtuner convert merge internlm/internlm2-chat-7b ./iter_500_hf ./iter_500_merged_llmxtuner convert merge /root/autodl-tmp/llm/Qwen/Qwen1.5-1.8B-Chat /root/autodl-tmp/llm/hf /root/autodl-tmp/llm/Qwen1.5-1.8B-Chat-hf
第1个参数LLM:微调时选择的原始的大模型;
第2个参数ADAPTER_PATH:模型转换时保存的路径;
第3个参数SAVE_PATH:模型合并成功保存的路径,需手动创建一个目录;
三、验证模型效果
1、安装和运行LMDeploy推理框架
安装和运行的教程请看《Ollama、vLLM和LMDeploy这三款主流大模型部署框架》 。
2、Python写一个chat对话
写一个python代码,名字为:chat_to_llm.py
#多轮对话
from openai import OpenAI#定义多轮对话方法
def run_chat_session():#初始化客户端client = OpenAI(base_url="http://localhost:23333/v1/",api_key="token-abc123")#初始化对话历史chat_history = []#启动对话循环while True:#获取用户输入user_input = input("用户:")if user_input.lower() == "exit":print("退出对话。")break#更新对话历史(添加用户输入)chat_history.append({"role":"user","content":user_input})#调用模型回答try:chat_complition = client.chat.completions.create(messages=chat_history,model="/root/autodl-tmp/llm/Qwen1.5-1.8B-Chat-hf")#获取最新回答model_response = chat_complition.choices[0]print("AI:",model_response.message.content)#更新对话历史(添加AI模型的回复)chat_history.append({"role":"assistant","content":model_response.message.content})except Exception as e:print("发生错误:",e)break
if __name__ == '__main__':run_chat_session()
LMDeploy默认的端口号是23333 ,api_key随便填写一个即可。
python chat_to_llm.py # 运行python文件
用数据集里的input与大模型对话 ,效果还不错。
注意:
1、之所以使用LMDeploy,是因为XTuner与LMDeploy都是一家公司出品,使用的对话模版是一致的。
2、若使用vLLM等其他推理框架,请确保对话模版要一致,可以将XTuner的对话模版转成vLLM需要的jinja2格式的文件。