(EngineCore_DP0 pid=124290) Exception in thread Thread-1 (process_input_sockets):
(EngineCore_DP0 pid=124290) Traceback (most recent call last):
(EngineCore_DP0 pid=124290) File "/usr/lib/python3.10/threading.py", line 1016, in _bootstrap_inner
(EngineCore_DP0 pid=124290) self.run()
(EngineCore_DP0 pid=124290) File "/usr/lib/python3.10/threading.py", line 953, in run
(EngineCore_DP0 pid=124290) self._target(*self._args, **self._kwargs)
(EngineCore_DP0 pid=124290) File "/opt/model/.qwen/lib/python3.10/site-packages/vllm/v1/engine/core.py", line 875, in process_input_sockets
(EngineCore_DP0 pid=124290) request = self.preprocess_add_request(request)
(EngineCore_DP0 pid=124290) File "/opt/model/.qwen/lib/python3.10/site-packages/vllm/v1/engine/core.py", line 438, in preprocess_add_request
(EngineCore_DP0 pid=124290) self.mm_receiver_cache.get_and_update_features(
(EngineCore_DP0 pid=124290) File "/opt/model/.qwen/lib/python3.10/site-packages/vllm/multimodal/cache.py", line 555, in get_and_update_features
(EngineCore_DP0 pid=124290) feature.data = self.get_and_update_item(feature.data,
(EngineCore_DP0 pid=124290) File "/opt/model/.qwen/lib/python3.10/site-packages/vllm/multimodal/cache.py", line 590, in get_and_update_item
(EngineCore_DP0 pid=124290) assert mm_item is not None, f"Expected a cached item for {mm_hash=}"
(EngineCore_DP0 pid=124290) AssertionError: Expected a cached item for mm_hash='6b90c7bcd7106a42965b6138410f34cfe8abdb831d69a2f2cfa8a61a784cd4c1'
解决的思路
错误分析
错误类型:AssertionError: Expected a cached item for mm_hash='...'
含义:
- vLLM 在处理带有图片/视频等多模态输入的请求时
- 尝试从缓存中获取已预处理的特征(通过 hash 值查找)
- 但缓存中没有对应的数据
可能原因
- 内存不足 - 缓存被 OOM Killer 清理或驱逐
- 多进程缓存不同步 - 分布式部署时缓存未共享
- 缓存过期/清空 - 缓存策略导致数据被删除
- 并发竞态条件 - 高并发时缓存写入和读取不同步
- 图片预处理失败 - 上游处理失败但未正确捕获
- 版本兼容性问题 - vLLM 版本与模型不兼容
排查步骤
1. 检查内存使用情况
# 查看系统内存
free -h
nvidia-smi # GPU内存
# 查看进程内存
ps aux | grep vllm
top -p <pid>
2. 查看完整日志
# 查找相关错误
grep -i "error\|exception\|oom" <log_file>
# 查看是否有内存警告
dmesg | grep -i "out of memory"
3. 检查 vLLM 配置
# 检查启动参数中的缓存配置
--gpu-memory-utilization # 默认0.9,可能太高
--max-num-seqs # 并发请求数
--enable-chunked-prefill # 是否启用分块
--max-num-batched-tokens # 批处理token数
4. 查看模型和数据
# 检查输入是否包含图片
# 查看请求日志中的 multimodal 数据
解决方案
方案1:增加内存配置(推荐)
# 降低GPU内存使用率
--gpu-memory-utilization 0.8 # 从0.9降到0.8
# 减少并发数
--max-num-seqs 128 # 根据实际情况调整
# 启用CPU offload(如果支持)
--cpu-offload-gb 4
方案2:调整缓存策略
# 增加缓存大小(如果是配置问题)
export VLLM_CACHE_SIZE=10000
# 或在代码中设置
--multimodal-max-num-batched-tokens 8192
方案3:重启服务并监控
# 重启 vLLM 服务
pkill -9 -f vllm
# 重新启动,并添加详细日志
python -m vllm.entrypoints.openai.api_server \
--model <model_path> \
--gpu-memory-utilization 0.75 \
--max-num-seqs 64 \
--log-level debug
方案4:检查并发和重试逻辑
# 在客户端添加重试机制
import time
from tenacity import retry, stop_after_attempt, wait_exponential
@retry(
stop=stop_after_attempt(3),
wait=wait_exponential(multiplier=1, min=2, max=10)
)
def call_vllm_api(prompt, image):
# 你的API调用
pass
方案5:升级 vLLM 版本
# 检查当前版本
pip show vllm
# 升级到最新版本(可能已修复此bug)
pip install --upgrade vllm
# 或安装特定版本
pip install vllm==0.6.3
临时解决方案
如果需要快速恢复服务:
# 1. 重启 vLLM 进程
pkill -9 -f "vllm\|ray"
# 2. 清理共享内存
rm -rf /dev/shm/*
rm -rf /tmp/ray/*
# 3. 重新启动服务
# 使用更保守的配置
预防措施
# 在生产环境添加监控
1. 监控内存使用率 (RAM + GPU)
2. 监控缓存命中率
3. 设置告警阈值
4. 实现健康检查和自动重启
# 健康检查示例
def health_check():
try:
response = requests.post(
"http://localhost:8000/v1/chat/completions",
json={"model": "...", "messages": [...]},
timeout=30
)
return response.status_code == 200
except:
return False
关键建议
- 优先检查内存 - 这是最常见的原因
- 降低并发 - 减少
--max-num-seqs参数 - 添加重试逻辑 - 客户端实现自动重试
- 监控日志 - 持续观察是否还有其他错误
- 考虑升级 - 查看 vLLM GitHub issues 是否有相关修复
1424

被折叠的 条评论
为什么被折叠?



