当前位置: 首页 > news >正文

【GPT入门】第53课 LlamaFactory微调效果与vllm部署效果不一致问题解决

【GPT入门】第53课 LlamaFactory微调效果与vllm部署效果不一致问题解决

  • 1.概要
  • 2.qwen对话模板与vllm模板不一致对比
    • 2.1 llamaFactory效果
    • 2.2 vllm效果
    • 2.3 open-webui 检查模型效果
  • 3. 对话模板不一致解决方法
    • 3.1 解决思路
    • 3.2 解决实践
  • 4.答疑
    • 4.1 vllm, lmdeploy为什么支持自定义模板?
    • 4.2 对话模板
    • 4.3 openwebui对自定义模板无效

1.概要

前言:每个llm都有一个对话模板,训练框架、推理框架也都有对话模板,但他们的对话模板很可能是不一致的,由于这个对话模板不一致的问题,导致各种异常问题,例如训练效果好,但部署时发现llm回答问题乱七八糟。未来解决这个问题,编写本文。例如,千问有 qwen qwen1.5, qwen2.5,他们的模板是不一样的,但在LLamamFactory中,他们被认为是同一套模板,并且LLamamFactory是使用编码的方式,而不是取llm的对应的模板配置。
下文概要:把LLamamFactory的qwen模板转为vllm的qwen模板,也就是不用官方的模板,解决跨组件的部署效果不一致的问题

2.qwen对话模板与vllm模板不一致对比

对比 /root/autodl-tmp/models/Qwen/Qwen2.5-0.5B-Instruct-merged-rzb 的效果

2.1 llamaFactory效果

  • huggingface加载
    在这里插入图片描述

  • vllm加载

    _compare_versions(op, got_ver, want_ver, requirement, pkg, hint)File "/root/autodl-tmp/conda_envs/xxzh/lib/python3.10/site-packages/transformers/utils/versions.py", line 44, in _compare_versionsraise ImportError(
ImportError: vllm>=0.4.3,<=0.10.0 is required for a normal functioning of this module, but found vllm==0.10.1.1.
To fix: run `pip install vllm>=0.4.3,<=0.10.0` or set `DISABLE_VERSION_CHECK=1` to skip this check.

在这里插入图片描述
更改vllm版本:
pip install vllm==0.10.0

2.2 vllm效果

  • 直接启动vllm
    启动命令:
    vllm serve /root/autodl-tmp/models/Qwen/Qwen2.5-0.5B-Instruct-merged-rzb
    在这里插入图片描述
    测试代码:
    vi test03.py
#多轮对话
from openai import OpenAI#定义多轮对话方法
def run_chat_session():#初始化客户端client = OpenAI(base_url="http://localhost:8000/v1/",api_key="suibianxie")#初始化对话历史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/models/Qwen/Qwen2.5-0.5B-Instruct-merged-rzb")#获取最新回答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()

python test03.py
在这里插入图片描述

效果: vllm的测试效果与 LlamaFactory训练效果一致。

2.3 open-webui 检查模型效果

openwebui 连接 vllm

 conda activate open-webuiexport HF_ENDPOINT=https://hf-mirror.comexport ENABLE_OLLAMA_API=FALSEexport OPENAI_API_BASE_URL=http://localhost:8000/v1open-webui serve

openwebui 连接 ollama,作为对比,补充笔记,本次没用到ollama

conda activate open-webuiexport HF_ENDPOINT=https://hf-mirror.comexport ENABLE_OLLAMA_API=Trueexport OPENAI_API_BASE_URL=http://127.0.0.1:11434/v1open-webui serve

打开 localhost:8080, 如果打不开,换chrome浏览器

在这里插入图片描述

3. 对话模板不一致解决方法

3.1 解决思路

  • 思路
    把LLamaFacotory的模板转为vllm支持的模板

  • vllm 指定模板介绍
    url: https://vllm.hyper.ai/docs/inference-and-serving/openai_compatible_server
    jinja格式官方说明: https://docs.jinkan.org/docs/jinja2/

在这里插入图片描述

  • LLamaFactory的template配置llm模板
    在这里插入图片描述

3.2 解决实践

  • 方法一: 定义模板文件
    mytest.py 生成的 jinja2模板复制到一个文件,调用vllm
vllm serve <model> --chat-template ./path-to-chat-template.jinja
  • 方法二:直接更新模型的chattemplate
    把方法一生成的json,更新到模型的 tokenizer_config.json的chat_template中, vllm,lmdeploy等部署框架直接使用该对话模板。

  • 实践方法一

vllm serve /root/autodl-tmp/models/Qwen/Qwen2.5-0.5B-Instruct-merged-rzb --chat-template /root/autodl-tmp/qwen_template.jinja

重新测试 python test03.py
在这里插入图片描述
发现效果是一样的

4.答疑

4.1 vllm, lmdeploy为什么支持自定义模板?

推理框架:以训练结果为依据,而不是以模型官方结果为依据
训练框架:训练模型,LLamaFactory是用来改变和调整模型
对话模板对齐原则:以训练模板对齐

4.2 对话模板

对话模板作用:控制模型输出的格式、样式,就是对数据做格式化,并不影响模型的能力。

4.3 openwebui对自定义模板无效

vllm serve --chat-template ./path-to-chat-template.jinja
该方法部署模型,openwebui无效
openwebui 每次访问模型,都覆盖原模板。

http://www.xdnf.cn/news/1344763.html

相关文章:

  • open webui源码分析6-Function
  • FPGA学习笔记——简单的IIC读写EEPROM
  • FPGA高端项目:图像采集+Aurora 8B10B+UDP图传架构,基于GTH高速收发器的光口转网口,提供工程源码和技术支持
  • IntelliJ IDEA 常用快捷键笔记(Windows)
  • SRE系列(二) | 从可用性到 SLI/SLO
  • 【数据结构】B 树——高度近似可”独木成林“的榕树——详细解说与其 C 代码实现
  • MySQL编程开发(了解)
  • 08高级语言逻辑结构到汇编语言之逻辑结构转换 continue break 完结汇编按逻辑结构
  • Redis---事务
  • 51单片机-驱动步进电机模块教程
  • C#_组合优于继承的实际应用
  • Kafka Broker 核心原理全解析:存储、高可用与数据同步
  • 如何从根源上理解并解决前端的CORS跨域问题
  • 【PSINS工具箱】MATLAB例程,二维平面上的组合导航,EKF融合速度、位置和IMU数据,4维观测量
  • Unreal Engine ClassName Rule
  • Python 中 SQLAlchemy 和 MySQLdb 的关系
  • IKE 与 ISAKMP 核心笔记
  • 微信扫码登陆 —— 接收消息
  • 复合设计模式
  • 加密货币与区块链:六大刑事重灾区
  • 深入理解 Spring Boot Starter:简化依赖管理与自动配置的利器
  • 110、【OS】【Nuttx】【周边】效果呈现方案解析:查找最新构建件
  • 深入理解 hash -r:解决 Linux 命令缓存难题的关键密钥
  • 自定义rabbitmq的ConnectionFactory配置
  • RabbitMQ深度剖析:从基础到高级进阶实战
  • 乐迪信息:AI摄像机+刮板机人员入侵检测:杜绝井下安全事故
  • 爬虫基础学习-配置代理、以及项目实践
  • 关于爬虫的基本步骤说明【爬虫七步骤】
  • jenkins实现分布式构建并自动发布到远程服务器上 jenkins实现自动打包编译发布远程服务器
  • Laravel分布式全链路追踪实战