You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用vLLM部署OpenGVLab/InternVL3-1B时遇"ValueError: Failed to apply InternVLProcessor"错误的解决方法

vLLM部署OpenGVLab/InternVL3-1B时遇"ValueError: Failed to apply InternVLProcessor"错误的解决方法

我之前也踩过这个坑,折腾了好一会儿才搞定,给你分享几个亲测有效的解决方向:

1. 优先升级到兼容的vLLM版本

InternVL3是比较新的多模态模型,旧版vLLM对它的处理器逻辑有bug,这是最常见的问题。直接装vLLM的最新开发版,基本能解决大部分兼容问题:

# 先卸载旧版(如果有的话)
pip uninstall -y vllm
# 安装main分支的最新开发版
pip install git+https://github.com/vllm-project/vllm.git@main

同时记得把依赖包也更到最新稳定版,避免版本冲突:

pip install --upgrade transformers pillow

2. 禁用不必要的视频处理触发

从报错日志能看到,vLLM默认给输入加了<image><video>标记,但如果你只需要处理图像任务,这个视频标记会触发不必要的视频预处理逻辑,进而导致数据类型错误。

试试在启动服务时明确指定只处理图像:

vllm serve OpenGVLab/InternVL3-1B --trust_remote_code --image-only

如果你的vLLM版本没有--image-only参数,也可以在发送请求时只传图像数据,不要带任何视频相关的内容,同时确保启动命令里没有触发视频处理的配置。

3. 修复视频数据类型不兼容问题

报错里的KeyError: ((1, 1, 3), '<i8')是因为PIL无法识别int8类型的视频数组,vLLM旧版在处理视频帧时会把数据转成int8,但PIL只支持uint8格式。

如果暂时没法升级vLLM,也可以临时改一下vLLM的源码(不推荐,还是升级更稳妥):
找到vLLM安装目录下的model_executor/models/internvl.py,定位到video_to_pixel_values_internvl函数,在处理每帧视频时加上类型转换:

# 在处理frame的地方加一行
frame = frame.astype(np.uint8)

4. 干净环境重试(兜底方案)

如果环境里有冲突的包,也可能导致这个问题。可以重新建一个干净的conda环境:

conda create -y -n vllm_internvl python=3.11
conda activate vllm_internvl
pip install --upgrade pip
# 先装依赖,再装vLLM
pip install transformers pillow
pip install vllm --no-cache-dir

然后再启动服务试试,大概率能解决环境冲突的问题。

我当时就是升级到vLLM的main分支版本,加上--image-only参数,直接就解决了这个错误。你可以先从升级vLLM开始试,这是最快速有效的方法~

火山引擎 最新活动