接着上篇文章《大模型微调工具 XTuner 指令微调实战复杂吗?这里有门道……》来接着写关于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_hf
xtuner 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_llm
xtuner 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文件。
python chat\_to\_llm.py # 运行python文件
用数据集里的input与大模型对话 ,效果还不错。
注意事项
1.之所以使用LMDeploy,是因为XTuner与LMDeploy都是一家公司出品,使用的对话模版是一致的。
- 若使用vLLM等其他推理框架,请确保对话模版要一致,可以将XTuner的对话模版转成vLLM需要的jinja2格式的文件。
探秘 Hugging Face:何为 Hugging Face 及其核心组件全览
LLaMA Factory 如何对大模型进行微调、导出和量化!掌握这几步,轻松搞定!
大模型部署该选谁?Ollama、vLLM 和 LMDeploy,各有千秋!