Surya 2 提示 llama-server 二进制找不到怎么解决?
【免费下载链接】suryaOCR, layout analysis, reading order, table recognition in 90+ languages项目地址: https://gitcode.com/GitHub_Trending/su/surya
在 CPU 或 Apple Silicon 机器上运行 Surya 2 的surya_ocr、surya_layout、surya_table时,可能直接看到这样的报错:
llama-server binary not found. Install with: macOS: brew install llama.cpp Linux: brew install llama.cpp OR download from https://github.com/ggml-org/llama.cpp/releases Or set LLAMA_CPP_BINARY in your env to the binary path.这个报错的解决路径很直接:装好 llama.cpp 的llama-server可执行文件,或者用环境变量指向你已经有的llama-server二进制。本文按“确认错误来源 → 修复 → 验证”的顺序给出完整操作。
先确认错误来源:为什么会提示找不到二进制
Surya 2 的 layout、OCR、table recognition 全部走同一个 VLM 推理后端:NVIDIA GPU 机器用vllm,CPU / Apple Silicon 机器用 llama.cpp(即llamacpp后端)。自动检测逻辑见 surya/inference/init.py:有 NVIDIA GPU 选vllm,否则(mps / cpu)选llamacpp,也可以用SURYA_INFERENCE_BACKEND环境变量强制指定。
所以这条报错通常只出现在没有 NVIDIA GPU 的机器上——后端自动选中了llamacpp,但系统里找不到它要 spawn 的llama-server可执行文件。
触发点在 surya/inference/backends/llamacpp.py:后端首次启动时按两步查找二进制:
- 检查
LLAMA_CPP_BINARY设置(见 surya/settings.py,默认值"llama-server")。如果它是一个已存在的文件路径,直接使用; - 否则在
PATH里查找名为llama-server的可执行文件(等价于shutil.which("llama-server"))。
两步都没找到才抛出上面的SpawnError。报错信息本身已经给出了两种官方修复方式,下面分别说明。
修复方式一:安装 llama-server 到 PATH(推荐主路径)
README.md 的 Inference backend prerequisites 一节给出了安装要求:Surya 首次使用会自动 spawn 服务器,CPU / Apple Silicon 机器需要 llama.cpp 提供的llama-server二进制:
# macOS(Metal 构建) brew install llama.cppLinux 机器二选一:
# 方式 A:用 brew 安装 brew install llama.cpp# 方式 B:从 llama.cpp 的 release 下载预编译二进制 # 下载地址(README 给出的官方 release 入口): # https://github.com/ggml-org/llama.cpp/releases代码文件头部的安装说明与 README 一致(见 llamacpp.py):macOS 用 brew 装的是 Metal 构建(MPS);Linux 可用 brew 或 release 下载。
安装完成后,确认llama-server能被PATH找到即可,后面“验证修复”一节有具体命令。
修复方式二:用 LLAMA_CPP_BINARY 指向已有二进制(可选分支)
如果你已经通过源码编译或其他方式拿到了llama-server,但没有装进PATH,可以直接用环境变量指向它。设置项定义在 surya/settings.py:
LLAMA_CPP_BINARY: str = "llama-server"# <llama-server 的绝对路径> 替换为你机器上二进制的实际位置 export LLAMA_CPP_BINARY=/path/to/llama-server注意解析顺序:LLAMA_CPP_BINARY指向一个存在的文件时会被直接采用,不再查PATH(llamacpp.py 中先os.path.isfile检查、成功后返回)。所以相对路径、绝对路径都可以,只要对当前工作目录可解析。
另外,README 也支持SURYA_INFERENCE_URL=http://host:port/v1直接指向一个已在运行的 OpenAI 兼容服务器——此时 Surya 只附加(attach)不 spawn,完全不需要本机二进制。如果你本来就自维护了一个llama-server,这也是可选方案,但它与“修好自动 spawn”是两条不同的路径,按你的环境选其一即可。
验证修复:二进制可见 + 实际跑一条命令
第一步,确认二进制可见:
which llama-server能返回一个可执行文件路径,说明PATH方式已生效;如果走的是LLAMA_CPP_BINARY,则确认它指向的路径存在:
echo $LLAMA_CPP_BINARY第二步,跑一条真实的 Surya 命令验证:
# DATA_PATH 可以是一张图片、一个 PDF,或一个包含图片/PDF 的目录 surya_ocr DATA_PATH首次成功启动时的完整流程是:Surya 从 HuggingFace Hub 的datalab-to/surya-ocr-2-gguf仓库下载surya-2.gguf和surya-2-mmproj.gguf(见 surya/settings.py),再 spawnllama-server,然后轮询/health直到返回 200 才认为就绪(/health探活逻辑见 surya/inference/backends/spawn.py)。启动超时的默认值是SURYA_INFERENCE_STARTUP_TIMEOUT=600.0秒(surya/settings.py),下载 + 模型加载都在这个窗口内完成,首次运行耐心等待。
服务器自身的日志会追加写入~/.cache/datalab/surya/llamacpp_server.log(llamacpp.py),命令跑完后可以tail这个文件确认llama-server正常启动并处理了请求。成功的标志是命令正常结束并写出results.json(schema 见 README 的 OCR 一节:以输入文件名为 key,每页含blocks、image_bbox等字段)。
如果启动后仍未就绪,Surya 会抛出一个SpawnError,其中附带llama-server日志的最后 100 行(见 spawn.py)——这说明二进制已经能找到、但服务启动失败,属于另一类问题,以那段日志为准继续排查。
边界情况:有 NVIDIA GPU 的机器不应触发此错误
llama.cpp分支只在机器没有 NVIDIA GPU、或你显式设置了SURYA_INFERENCE_BACKEND=llamacpp时才会走到。如果你的机器有 NVIDIA GPU(自动检测会选vllm,见 surya/inference/init.py),却仍然报同样的错误,说明环境变量显式指定了llamacpp,检查并去掉这个设置即可。
另外两点容易混淆的边界:
surya_detect是纯 torch 模型,不依赖推理后端,缺llama-server也能跑(README 的 Limitations 一节明确说明:Layout / OCR / table_rec 需要后端,detection 不需要)。- README 的
pip install surya-ocr只安装 Python 包,不包含llama-server二进制——这也是为什么装完 Surya 后首次使用仍会报本错误,必须额外完成上面两种修复之一。
【免费下载链接】suryaOCR, layout analysis, reading order, table recognition in 90+ languages项目地址: https://gitcode.com/GitHub_Trending/su/surya
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考