llama.cpp载入Qwen3 30B VL模型(linux MI50下)
最近更新了下llama.cpp的版本,使用了b7710,也尝试在rocm7.1.1下编译,编译也能通过(参考之前的文章)
但是之前启动VL模型时一直没有图片选项,发现是没有加载多模态部分guff,同时尝试时也遇到一些坑。
这边一直在linux下使用LM studio,除了模型尝鲜测试外(比ollama适配更积极),还有一个用途是将其作为一个模型下载器,方便guff模型下载。
加载LM 下载VL模型命令如下:
./llama-server -m ~/.lmstudio/models/lmstudio-community/Qwen3-VL-30B-A3B-Instruct-GGUF/Qwen3-VL-30B-A3B-Instruct-Q4_K_M.gguf --mmproj ~/.lmstudio/models/lmstudio-community/Qwen3-VL-30B-A3B-Instruct-GGUF/mmproj-Qwen3-VL-30B-A3B-Instruct-F16.gguf --no-mmproj-offload --n-gpu-layers 9999 --main-gpu 0 --split-mode none --host 0.0.0.0 --port 8080
其中:
--mmproj 标识加载多模态部分
--no-mmproj-offload 标识不要加载到gpu中,默认用CPU+RAM计算。
--no-mmproj-offload参数在我的环境下必须加入,因为如果多模态部分加载到gpu,在使用使用图像进行对话时,llama.cpp会直接报错,预计是和显卡的解码有关(ollama不会有问题)。
测试比较惊讶的是llama.cpp运行该模型输出速度来到了80t/s,这个速度非常惊人了。
另外这边也想到目前MI50 32G尴尬的一个点,想在ollama下使用Qwen3 30B VL Q8模型(刚刚超出32G一点点),但是会爆显存,如果ollama后续支持这个参数,能很好的避免爆显存问题。
附上GEMINI的解答:
-------------------------------------------------
--no-mmproj-offload- 多模态投影器 (mmproj):在像 Qwen-VL 这样的视觉语言模型 (VLM) 中,图像数据需要通过一个单独的小型神经网络(即投影器)进行预处理,将其转换成模型能够理解的向量表示。
- Offload (卸载):在
llama.cpp中,“卸载”通常是指将模型层从 CPU 内存移动到 GPU 显存以加速计算。 --no-mmproj-offload的作用:使用这个标志后,视觉投影器相关的计算将强制在 CPU/RAM 上运行,而不会占用宝贵的 GPU 显存。
- VRAM 不足:如果你的 GPU 显存非常紧张,不足以同时容纳主语言模型的大部分层和视觉投影器,使用此选项可以释放大约几 GB 的 VRAM。
- 优化主模型性能:将 mmproj 留在 RAM 中,可以将更多的 VRAM 留给主语言模型的文本生成部分,从而可能提高文本推理速度,尽管图像处理速度会略慢(通常从几百毫秒增加到几秒钟)。
--no-mmproj-offload 这个特定的命令行参数不能直接在 Ollama 的 ollama run 命令中使用。 llama.cpp 中完全相同的 CLI 参数来手动控制视觉模块(mmproj)是否卸载到 CPU。 - 自动判断:Ollama 会自动检测可用的 GPU 显存,并尝试将尽可能多的模型层(包括视觉模块)加载到 GPU 上。它旨在默认提供最佳性能。
- 环境变体:Ollama 的大部分高级配置是通过环境变量(Environment Variables)实现的,而不是命令行参数。
- 限制总 GPU 使用:使用
OLLAMA_MAX_VRAM环境变量可以限制 Ollama 认为可用的总显存量,从而迫使它将更多层保留在 CPU/RAM 中。 - 强制 CPU 运行 (不推荐):最激进的方法是完全禁用 GPU 硬件加速(例如对于 Vulkan 后端可以设置
GGML_VK_VISIBLE_DEVICES=-1),但这会将整个模型(包括核心语言模型)都移到 CPU 上,速度会慢得多。
llama.cpp 中 --no-mmproj-offload 功能的请求。您可以关注 Ollama 的 GitHub 仓库以获取最新功能更新。
浙公网安备 33010602011771号