Skip to content

[SYCL] 0.3.39 ~ 0.3.41 版本 ,Qwen-VL 多模态推理触发 access violation 崩溃 #150

Description

@allanmeng

问题背景

上次跟你讨论这个问题,还是是在0.3.39的版本。当时你判断可能是MTMD 和 SYCL 兼容性的问题。
当时也没法定位 llama.cpp 还是 llama-cpp-python 的问题,于是我又观察了几个版本
目前问题依然存在。(用 llama.cli 做了 纯文本 和 图转文 的测试)

问题描述

用 JamePeng 分支的 llama-cpp-python(含 vision handlers),配合 SYCL 后端(Intel oneAPI)在 Windows 11 上运行。模型加载正常,纯文本推理也正常,但进行图像描述等多模态任务时,进程在 llama_decode() 阶段崩溃,报 Windows fatal exception: access violation

版本信息

  • llama-cpp-python:JamePeng 分支,版本 0.3.39、0.3.40、0.3.41(均崩溃)
  • 正常版本0.3.38(在相同条件下正常运行)
  • 底层 llama.cpp commit3899b39ce(对应 0.3.41)
  • 编译器:Intel oneAPI 2025.3.2
  • 操作系统:Windows 11
  • GPU:Intel Arc B580

模型与参数

  • 模型Qwen3.5-4B-Uncensored-HauhaucS-Aggressive-Q4_K_M.gguf
  • mmprojQwen3.5-4B-Uncensored-HauhaucS-Aggressive-mmproj-BF16.gguf
  • Chat 格式vision-qwen3vl
  • 关键参数
    • n_gpu_layers = -1
    • vision_use_gpu = true
    • vision_image_min_tokens = 1024
    • n_batch = 1024
    • n_ubatch = 1024
    • n_ctx = 8192

完整错误堆栈

Windows fatal exception: access violation

Stack (most recent call first):
  File "F:\ComfyUI-aki-v3\python\Lib\site-packages\llama_cpp\_internals.py", line 749 in decode
  File "F:\ComfyUI-aki-v3\python\Lib\site-packages\llama_cpp\llama.py", line 1244 in eval
  File "F:\ComfyUI-aki-v3\python\Lib\site-packages\llama_cpp\llama_multimodal.py", line 1015 in __call__
  File "F:\ComfyUI-aki-v3\python\Lib\site-packages\llama_cpp\llama_multimodal.py", line 3492 in __call__
  File "F:\ComfyUI-aki-v3\python\Lib\site-packages\llama_cpp\llama.py", line 3224 in create_chat_completion
  File "F:\ComfyUI-aki-v3\ComfyUI\custom_nodes\comfyui-sg-llama-cpp\nodes.py", line 422 in execute
  ...
LlamaCPP Engine Error: Llama.eval(decode): Fatal Decode Error at Pos 0, Batch size 25: exception: access violation reading 0x00007FF8EF66F560

对照测试(关键证据)

我使用官方 llama-cli(commit b9912-c198af4dc,SYCL 后端)进行了两组对照测试,使用相同的模型文件和参数:

1. 纯文本推理测试(命令如下)

llama-cli.exe -m <model_path> --prompt "请扩写以下内容,使其更加生动详细:\n今天天气很好,我去公园散步,看到很多花。" -ngl -1 --ctx-size 8192 --batch-size 1024 --ubatch-size 1024 --verbose-prompt

结果:✅ 正常运行,模型成功生成扩写内容。

2. 图像多模态推理测试(命令如下)

llama-cli.exe -m <model_path> --mmproj <mmproj_path> --image <image_path> --prompt "<image>\n用中文详细描述这张图片的内容" --chat-template vision-qwen3vl -ngl -1 --ctx-size 8192 --batch-size 1024 --ubatch-size 1024 --image-min-tokens 1024 --verbose-prompt

结果⚠️ 报格式错误 number of media markers in text (0) does not match number of bitmaps (1),但没有崩溃,只是安全退出并提示错误。


由此得出结论

  • 底层的 llama.cpp + SYCL 后端是稳定的,且官方 CLI 能够在格式错误时提前检查并安全退出。
  • Python 绑定(llama-cpp-python)在相同输入下直接触发内存访问违规,说明其在多模态 prompt 的构建或图像 token 注入环节缺少必要的校验或格式处理,导致底层函数接收到非法数据。

回归范围

  • 0.3.38:✅ 正常
  • 0.3.39:❌ 崩溃 测试过纯 CPU编译版本,正常运行
  • 0.3.40:❌ 崩溃
  • 0.3.41:❌ 崩溃

这与 llama.cpp 上游的 MTMD 多模态重构时间点吻合,可能是 Python 绑定未完全适配新框架的接口变化。

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions