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

使用python访问mindie部署的vl多模态模型

说明

今天使用mindie1.0部署了qwen2_7b_vl模型,测试过程出现一些问题,这里总结下。

问题1:transformers版本太低

报错信息:

[ERROR] [model_deploy_config.cpp:159] Failed to get vocab size from tokenizer wrapper with exception: ModuleNotFoundError: No module named 'transformers.models.qwen2_vl'

错误分析:qwen2_7b_vl需要transformers的版本至少为4.46.0,而我的版本是4.44。模型目录下config.json中声明的transformers版本好像是4.41, 这明显是错的。

解决办法:

pip config set global.index-url https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple
pip install transformers==4.46.0

问题2:mindie的vl接口格式和openai接口不兼容

报错信息:

Invalid base64 url

标准的openai接口传输图片格式如下:

              "content": [
                    {"type": "text", "text": text},
                    {
                        "type": "image_url",
                        "image_url": {
                            "url": f"data:image/jpeg;base64,{base64_str}"
                        }
                    }
                ]

而mindie支持的格式如下:

              "content": [
                    {"type": "text", "text": text},
                    {
                        "type": "image_url",
                        "image_url": f"{base64_str}"
                    }
                ]

问题3:

报错信息:

This model's maximum input ids length cannot be greater than 2048,the input ids length is 2831

问题分析:图片加文字的token超长了,需要增加mindie的配置文件的config.json中的maxSeqLen和maxInputTokenLen、maxIterTimes。

完整代码

import os
import requests
import base64
import json
import time

def test_multimodal_model(image_path, text, model_url, model_name):
    # 将图片转换为base64编码
    with open(image_path, "rb") as image_file:
        encoded_image = base64.b64encode(image_file.read()).decode('utf-8')
    
    # 构建请求数据
    payload = {
        "model": model_name,
        "messages": [
            {
                "role": "user",
                "content": [
                    {"type": "text", "text": text},
                    {
                        "type": "image_url",
                        "image_url":  f"{encoded_image}"  #f"/path/to/pic.jpg"
                    }
                ]
            }
        ],
        "max_tokens": 300
    }
    
    # 发送请求
    headers = {
        "Content-Type": "application/json"
    }
    
    start_time = time.time()  # 记录开始时间
    response = requests.post(
        model_url,
        headers=headers,
        json=payload
    )
    end_time = time.time()  # 记录结束时间
    print(f"请求耗时: {end_time - start_time:.2f}秒")  # 打印耗时
    
    # 返回响应
    if response.status_code == 200:
        return response.text
    else:
        raise Exception(f"API请求失败: {response.status_code}, {response.text}<<<<")
    
# 测试函数
if __name__ == "__main__":
    name = "llm_model"
    model_url = "http://xx.xx.xx.xx:xx/v1/chat/completions"
    pic_path = "./huochepiao.jpg"
    text = "请描述图片内容"
    try:
        result = test_multimodal_model(pic_path, text, model_url, name)
        print(f"result:>>>{result}")
    except Exception as e:
        print(f"发生错误: {e}")
    

相关文章:

  • 【数据结构】二叉搜索树
  • Android Input——输入子系统(三)
  • C++ Primer Plus 编程练习题 第六章 分支语句和逻辑运算符
  • 544 eff.c:1761处loop vect 分析
  • C++ 基本语法
  • C#/.NET/.NET Core技术前沿周刊 | 第 33 期(2025年4.1-4.6)
  • 【动态规划】 深入动态规划 回文子串问题
  • 浅谈Apache
  • 汉得企业级 PaaS 平台 H-ZERO 1.12.0 发布!四大维度升级,构建企业数字化新底座
  • STL c++ list——模拟实现
  • vue.config.js配置代理(输出代理前后的地址)
  • EG8200Mini-104边缘计算网关!聚焦IEC104协议的工业数据转换与远程运维平台
  • 【锂电池SOH预测】PSO-BP锂电池健康状态预测,锂电池SOH预测(Matlab完整源码和数据)
  • 数据链路层以太网协议
  • XYCTF2025 web 全wp
  • 【C++】stack和queue
  • Linux平台搭建MQTT测试环境
  • 使用scoop一键下载jdk和实现版本切换
  • Python数据分析-NumPy模块-矩阵的运算
  • Vue3+Ts封装ToolTip组件(2.0版本)
  • 市场监管总局等五部门约谈外卖平台企业
  • 继71路之后,上海中心城区将迎来第二条中运量公交
  • 多家中小银行存款利率迈入“1时代”
  • 英国首相斯塔默住所起火,警方紧急调查情况
  • 英媒:英国首相住所起火,目前无人伤亡
  • 美国政府信用卡被设1美元限额,10美元采购花一两小时填表