问题背景
上次跟你讨论这个问题,还是是在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 commit:
3899b39ce(对应 0.3.41)
- 编译器:Intel oneAPI 2025.3.2
- 操作系统:Windows 11
- GPU:Intel Arc B580
模型与参数
- 模型:
Qwen3.5-4B-Uncensored-HauhaucS-Aggressive-Q4_K_M.gguf
- mmproj:
Qwen3.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 绑定未完全适配新框架的接口变化。
问题背景
上次跟你讨论这个问题,还是是在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。版本信息
3899b39ce(对应 0.3.41)模型与参数
Qwen3.5-4B-Uncensored-HauhaucS-Aggressive-Q4_K_M.ggufQwen3.5-4B-Uncensored-HauhaucS-Aggressive-mmproj-BF16.ggufvision-qwen3vln_gpu_layers = -1vision_use_gpu = truevision_image_min_tokens = 1024n_batch = 1024n_ubatch = 1024n_ctx = 8192完整错误堆栈
对照测试(关键证据)
我使用官方
llama-cli(commitb9912-c198af4dc,SYCL 后端)进行了两组对照测试,使用相同的模型文件和参数:1. 纯文本推理测试(命令如下)
结果:✅ 正常运行,模型成功生成扩写内容。
2. 图像多模态推理测试(命令如下)
结果:⚠️ 报格式错误
number of media markers in text (0) does not match number of bitmaps (1),但没有崩溃,只是安全退出并提示错误。由此得出结论:
llama.cpp+ SYCL 后端是稳定的,且官方 CLI 能够在格式错误时提前检查并安全退出。llama-cpp-python)在相同输入下直接触发内存访问违规,说明其在多模态 prompt 的构建或图像 token 注入环节缺少必要的校验或格式处理,导致底层函数接收到非法数据。回归范围
这与
llama.cpp上游的 MTMD 多模态重构时间点吻合,可能是 Python 绑定未完全适配新框架的接口变化。