通过 libmtmd Pull 请求(来自Hacker News )的 llama.cpp 服务器视觉支持已于今天早些时候合并。 PR 最终为优秀的llama.cpp项目添加了对视觉模型的全面支持。本页对此进行了记录,但此处介绍了更详细的技术细节。以下是我在 Mac 上运行它的笔记。
llama.cpp
模型通常作为.gguf
文件分发。该项目引入了一种名为mmproj
的新变体,用于多模式投影仪。 libmtmd
是用于处理这些问题的新库。
您可以通过从源代码编译llama.cpp
来尝试,但我发现了另一个可行的选项:您可以从GitHub 版本下载预编译的二进制文件。
在 macOS 上,需要跳过一个额外的步骤才能使这些功能正常工作,我将在下面进行描述。
我从此GitHub 版本下载了llama-b5332-bin-macos-arm64.zip
文件并将其解压缩,这创建了一个build/bin
目录。
该目录包含一堆二进制可执行文件和大量.dylib
文件。 macOS 不允许我执行这些文件,因为它们已被隔离。运行此命令修复了llama-mtmd-cli
和llama-server
可执行文件以及它们所需的.dylib
文件:
sudo xattr -rd com.apple.quarantine llama-server llama-mtmd-cli *.dylib
现在我可以使用以下命令运行交互式终端 LLM 会话:
./llama-mtmd-cli -hf unsloth/gemma-3-4b-it-GGUF:Q4_K_XL -ngl 99
-ngl 99
标志指定应将 99 个层卸载到 GPU。我还没有尝试过修改或省略这个标志 – 我在 danielhanchen 的黑客新闻评论中看到它,它似乎有效。
第一次运行时,它从unsloth/gemma-3-4b-it-GGUF (Google DeepMind 的Gemma 3 4B的量化副本)获取四个文件,并将它们存储在~/Library/Caches/llama.cpp
中:
2.4G unsloth_gemma-3-4b-it-GGUF_gemma-3-4b-it-UD-Q4_K_XL.gguf 217B unsloth_gemma-3-4b-it-GGUF_gemma-3-4b-it-UD-Q4_K_XL.gguf.json 812M unsloth_gemma-3-4b-it-GGUF_mmproj-F16.gguf 203B unsloth_gemma-3-4b-it-GGUF_mmproj-F16.gguf.json
一旦他们下载完毕,交互式会话就会开始。您可以直接与模型聊天或使用/image path-to-image.jpg
命令将图像加载到上下文中。
我加载了一张鹈鹕照片并提示“描述它”,然后得到了这个:
这是一张引人注目的照片,照片中一只棕色鹈鹕站在沙滩上的浅水中。以下是我所看到的内容的细分:
主题:主要焦点是一只大棕色鹈鹕。它站立时翅膀完全展开,摆出一个戏剧性的姿势。
姿势:鹈鹕的姿势有点尴尬,几乎是滑稽的,它的腿牢牢地踩在湿沙上,翅膀张开。看起来它可能正准备起飞或者只是在享受水。
颜色和质地:鹈鹕呈浓郁的深棕色,翅膀和头部有较浅的斑纹。沙子呈柔和的米色,水反射阳光,营造出闪闪发光的效果。你可以看到沙子的纹理和水中的波纹。
灯光:灯光显得明亮、阳光明媚,投射阴影并突出鹈鹕羽毛的细节。
背景:背景模糊,表明景深较浅,从而将焦点保持在鹈鹕身上。这似乎是海滩场景。
总体印象:由于鹈鹕的姿势和水暗示的运动,图像具有动态感。这是一张构图精良的照片,捕捉到了野生动物在自然栖息地的瞬间。
您想让我放大某个特定细节,或者告诉您更多有关鹈鹕的信息吗?
对于在我的笔记本电脑上运行的 3.2GB 型号来说还不错!
运行 llama-server
更有趣的是llama-server
命令。这将启动一个在端口 8080 上运行的本地主机 Web 服务器来为模型提供服务,并具有 Web UI 和 OpenAI 兼容的 API 端点。
运行它的命令是相同的:
./llama-server -hf unsloth/gemma-3-4b-it-GGUF:Q4_K_XL -ngl 99
现在在浏览器中访问http://localhost:8080
开始与模型交互:
它错误地计算了合影中的鹈鹕数量,但同样,这是一个微型3.2GB 模型。
通过在端口 8080 上运行的服务器,您还可以访问 OpenAI 兼容的 API 端点。以下是使用curl
执行此操作的方法:
卷曲 -X POST http://localhost:8080/v1/chat/completions \ -H “内容类型:application/json ” \ -d ' { “消息”:[ {"role": "user", "content": "描述鹈鹕理想的企业度假胜地"} ] } ' |杰克
我刚刚为 LLM 构建了一个名为llm-llama-server的新插件,以使与此 API 的交互更加方便。你可以像这样使用它:
llm 安装 llm-llama-server llm -m llama-server '为鹈鹕发明主题公园游乐设施'
或者对于视觉模型使用llama-server-vision
:
llm -m llama-server-vision '描述该图像' -a /path/to/image.jpg
LLM 插件使用流 API,因此响应将在生成时流回给您。
标签: vision-llms 、 llm 、 llama-cpp 、 ai 、 local-llms 、 llms 、 gemma 、 generative-ai 、项目
原文: https://simonwillison.net/2025/May/10/llama-cpp-vision/#atom-everything