AI智能摘要
GPT
这里是萌新AI,这篇文章介绍了使用 LLaMA-Factory 微调模型时遇到的一个关键问题:由于不同推理引擎使用的提示词模板不同,导致模型输出结果不一致。具体来说,LLaMA-Factory 框架使用自带的模板,而 vLLM 引擎则加载模型文件中的模板。文章通过对比示例指出了差异所在,并提供了两种模板的查找路径。最后,作者提到可以通过将 LLaMA-Factory 的模板转换为 jinja 格式,并在启动 vLLM 时指定使用,来解决这种不一致性问题。
URL
type
status
date
slug
summary
tags
category
icon
password
本篇博客主要记录LLaMa-Factory微调模型带来的问题。
📝 问题描述
LLaMa-Factory框架微调
提示词模版不同可能会影响最终模型生成文本信息不同。在微调时,LLaMa-Factory框架使用的是框架本身适配各种模型的提示词模版。虽然我们在框架中发现有各种模型版本的提示词模版,但仔细对比魔塔和HuggingFace社区提供的模型文件的提示词模版,就会发现两种提示词模版是有差异的。
根据上诉情况,我们不难猜出为什么在LLaMa-Factory框架微调好的模型,但在不同推理引擎cha t的时候,生成不同的输出。
具体示例如下:第一张图是HuggingFace引擎,第二张图是vllm引擎。从两张图可以发现模型输出差异性巨大(博主将温度系数和top-p都设置了最低值,防止多样性干扰。)


问题:出现上诉问题的原因是什么?
解答:LlaMA-Factory使用HuggingFace引擎进行推理时,使用的是LlaMA-Factory框架自身的提示词模版。但是,LlaMA-Factory使用vLLM引擎推力时,vLLM加载的是模型文件中的提示词模版。两种推理引擎使用的提示词模版不同,所以造成最终的模型输出不同。
问题:提示词模版在哪里找?
解答:LlaMA-Factory框架的提示词模版在LLaMA-Factory/src/llamafactory/data/template.py文件中。伙伴们可以直接搜索qwen即可找到。如下图:

我们从社区下载模型文件的提示词是在/Qwen/Qwen2.5-1.5B-Instruct/tokenizer_config.json文件中,直接搜索chat_template即可找到。如下图:

从两张图可以发现,提示词模版确实不同。
解决LlaMA-Factory框架微调和vLLM不一致方法
博主在vLLM中文站网站中找到,vLLM在启动服务时,可以指定模型使用的提示词模版,但是vLLM加载提示词模版使用的是jinja类型文件。所以,我们需要将LlaMA-Factory框架中qwen提示词模版转换为jinja类型的文件。
幸运的是,LlaMA-Factory框架帮我们实现了这个函数,我们只需要调用该函数即可。下面是我们需要自己敲的代码。
注意:博主使用LlaMA-Factory框架的版本是0.9.3,该版本merge后的模型文件夹中已经有我们需要的jinja格式文件。所以不需要我们手动转换。如下图:

- 开始测试
- 首先,启动vLLM服务
- 接着,代码远程调用模型服务。下面链接是使用langchain框架调用远程服务代码。请将ChatPromptTemplate.from_messages()中的system删掉。不使用消息历史。
- 再接着,相同输入查看模型输出。
- 最后,分析:从输出来看大体上是一样的,相较于通过LlaMA-Factory框架使用vLLM引擎的效果好多了。
📎 参考文章
以上便是本篇博客的主要内容,欢迎您在底部评论区留言,一起交流~
- 作者:不爱吃香菜的萌新
- 链接:https://hexo.levsongsw.com//largemoder/LLaMaFactory3
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。





