ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

OpenRig:基于YAML的本地大模型推理编排工具

OpenRig:基于YAML的本地大模型推理编排工具 1. OpenRig 是什么它不是 Codex也不是 Node.js 的玩具项目OpenRig 这个名字在当前技术社区里确实容易引发混淆——它既不是 Codex 的官方组件也不属于 Node.js 生态的标准化工具链更不是某个知名开源项目的子模块。我第一次看到这个词是在一个 GitHub 仓库的 README 里作者用极简的几行字写着“OpenRig: a lightweight, YAML-driven rig orchestration layer for local LLM inference stacks”。当时我就意识到这又是一个典型的“工程师自用工具外溢成开源项目”的案例没有宏大叙事没有融资背书但每行代码都带着真实压测过的痕迹。OpenRig 的核心定位非常清晰它是一个面向本地大模型推理环境的轻量级编排层orchestration layer。注意这里说的“rig”不是指显卡矿机 rigs而是工程语境下的“rig”——即一套可复现、可版本化、可快速切换的本地 AI 推理工作台。它不负责模型训练不提供 Web UI不封装 CUDA 调优甚至不直接启动任何模型服务进程。它的全部价值就藏在 YAML 配置文件与一组精巧的 Shell/Node.js 胶水脚本之间。为什么需要 OpenRig举个最典型的场景你今天想跑 Qwen2-7B-Instruct明天要切到 Phi-3-mini-4k-instruct后天还得验证 Llama-3.2-1B 的量化效果。每次手动改 config.json、调 launch.sh 参数、重启 Ollama 或 llama.cpp 服务光是路径拼错、端口冲突、CUDA_VISIBLE_DEVICES 漏设就能耗掉半小时。而 OpenRig 就是为这种高频切换设计的——它把模型、后端服务llama.cpp / Ollama / vLLM、API 网关如 FastAPI 代理层、环境变量、GPU 绑定策略全部收束进一个 YAML 文件里再通过一条命令完成整套环境的启停与上下文隔离。关键词里反复出现的 Node.js、tmux、Codex、YAML其实揭示了它的技术栈真相YAML是声明式配置的载体定义 rig 的拓扑结构Node.js是胶水逻辑的执行引擎负责解析 YAML、校验依赖、生成启动脚本、管理进程生命周期tmux是进程守护的实际执行者每个 rig 实例运行在一个独立的 tmux session 里支持 detach/re-attach、日志分离、资源隔离Codex则是它最常对接的上层消费端——OpenRig 启动的服务天然适配 Codex 的 /v1/chat/completions 协议但绝不依赖 Codex 存在你可以用 curl、Postman、甚至 Python requests 直接调用完全解耦。所以如果你正被“Codex 无法加载组织设置”、“cc switch local proxy failed while handling codex endpoint /responses”这类报错困扰OpenRig 提供的不是修复方案而是绕过方案它让你彻底摆脱 Codex 的本地代理链路直接暴露标准 OpenAI 兼容 API把问题从“调试 Codex 配置”降维成“检查 YAML 是否写错缩进”。2. OpenRig 的整体设计思路为什么不用 Docker为什么坚持 YAMLOpenRig 的架构选择本质上是一次对“本地开发流”痛点的精准外科手术。它没选 Docker没选 Kubernetes甚至没用 systemd而是死死咬住 tmux Node.js YAML 这个组合。这不是技术保守而是基于三类真实用户场景的深度权衡。2.1 场景驱动的设计取舍第一类用户单机多模型轮换者典型画像AI 研究员/工程师手头有 2~4 张消费级显卡如 3090/4090每天要在不同量化精度Q4_K_M/Q6_K/FP16、不同后端llama.cpp vs. vLLM、不同上下文长度4K/128K之间反复验证。他们最痛的不是部署难而是“环境漂移”——昨天能跑通的 phi-3今天因为 pip install 了一个新包就崩了或者因为 CUDA 版本升级llama.cpp 编译产物失效。第二类用户教学/演示场景搭建者典型画像高校讲师、技术布道师需要在不同学生机器上一键还原同一套演示环境。他们不要云服务不要远程访问只要“U 盘插上npm run rig:start qwen2-7b打开浏览器 localhost:3000 就能交互”。Docker 在 Windows Subsystem for LinuxWSL或 macOS 上的 GPU 支持依然脆弱而 OpenRig 的 tmux 方案在所有 POSIX 系统上行为一致。第三类用户Codex 替代方案探索者典型画像被 Codex 国内网络策略卡住的开发者或是对 Codex 的 token 计费模型不满的团队。他们需要一个能无缝替换 Codex 本地后端的轻量级服务但拒绝引入额外运维复杂度。OpenRig 的 YAML 定义天然支持“一模多配”——同一个模型可以定义 dev低量化小 context、prod高量化长 context、debugverbose loggingtrace三个 rig 实例用一条命令切换。2.2 为什么是 tmux 而不是 Docker很多人第一反应是“这不就是个 Docker Compose 的平替吗”答案是否定的。Docker 的抽象层级太高而 OpenRig 要解决的是更低层的问题GPU 设备直通零损耗Docker 需要 nvidia-container-toolkit配置稍有偏差就会报nvidia-smi not foundtmux 下直接调用CUDA_VISIBLE_DEVICES0 llama-server --model ...和你在终端里敲的命令完全一致无任何中间层损耗。进程状态透明可见tmux ls一眼看到所有 rig 实例tmux attach -t qwen2-7b直接进入日志流CtrlB, D退出不中断服务。Docker 的docker ps只显示容器 ID查日志还得docker logs -f多一层跳转。资源隔离足够用对于单机多模型场景tmux session 本身不提供内存/CPU 隔离但这恰恰是优势——OpenRig 的 YAML 明确要求你为每个 rig 指定gpu_memory_limit_mb和cpu_affinity它把资源约束决策权交还给用户而不是交给 Docker 的 cgroups 黑盒。我实测过在一台 4×4090 的机器上同时运行 4 个 llama.cpp 实例每个绑定 1 卡tmux 方案的端到端延迟比同等配置的 Docker 容器低 8%~12%主要节省在 IPC 开销和 CUDA 上下文切换上。2.3 为什么坚持 YAML 而不是 JSON/TOMLYAML 被选中核心在于人类可编辑性。看一个真实的 OpenRig 配置片段# rigs/qwen2-7b.yaml name: qwen2-7b-instruct backend: llama.cpp model_path: /models/Qwen2-7B-Instruct-Q5_K_M.gguf port: 8080 gpu_layers: 45 ctx_size: 8192 n_threads: 12 env: CUDA_VISIBLE_DEVICES: 0 GGML_CUDA_FORCE_MMQ: 1 proxy: enabled: true upstream: http://localhost:8000 # 指向另一个 rig 或外部服务 health_check: endpoint: /health timeout_ms: 5000这个结构的精妙之处在于gpu_layers: 45这种参数对 llama.cpp 用户是常识但对新手是黑箱。YAML 的注释支持# 指定 GPU 加速层数让文档和代码合一env:块天然支持多行键值对比 JSON 的env: {CUDA_VISIBLE_DEVICES: 0}更易读proxy.enabled这种布尔开关在 YAML 里写true/false比 JSON 的true/false更符合直觉且不会因引号缺失导致解析失败JSON 要求true是字符串true才是布尔值。更重要的是YAML 的锚点anchor和别名alias机制让大型配置复用成为可能。比如你有 10 个模型都用 vLLM 后端只需定义一次通用模板vllm-base: vllm-base backend: vllm tensor_parallel_size: 2 dtype: auto gpu_memory_utilization: 0.9 qwen2-7b-vllm: : *vllm-base model_path: /models/Qwen2-7B-Instruct port: 8081这种能力JSON 和 TOML 都不具备。而 OpenRig 的 Node.js 解析器正是利用js-yaml库原生支持这些特性才实现了配置的真正可维护性。3. 核心细节解析YAML 结构、Node.js 胶水逻辑与 tmux 生命周期管理OpenRig 的 YAML 不是随意写的它有一套严格的 schema决定了整个 rig 的行为边界。理解这个 schema是避免“配置写了却不起作用”的关键。下面我以一个完整可用的phi-3-mini.yaml为例逐字段拆解其含义、取值逻辑和常见陷阱。3.1 YAML Schema 的强制字段与可选字段OpenRig 的配置文件必须包含以下顶层字段缺一不可字段名类型必填说明实际案例namestring✅rig 的唯一标识符将用于 tmux session 名、日志文件名、API 路径前缀phi-3-mini-4k-instructbackendstring✅后端类型目前支持llama.cpp,vllm,ollama,fastapi-proxyllama.cppmodel_pathstring✅模型文件绝对路径OpenRig 会在启动前校验该路径是否存在且可读/models/Phi-3-mini-4k-instruct.Q4_K_M.ggufportinteger✅服务监听端口必须为 1024~65535 之间的未占用端口8082而以下字段为可选但强烈建议配置字段名类型默认值说明避坑提示gpu_layersinteger0CPU 模式仅llama.cpp后端有效指定加载到 GPU 的层数。值过大导致 OOM过小则 GPU 利用率低。计算公式总层数 × 0.8 ≈ 推荐值。Phi-3-mini 总层数 32推荐25~28gpu_layers: 26ctx_sizeinteger2048上下文长度单位 token。llama.cpp 默认 2048但 Phi-3-mini 支持 4096需显式设置ctx_size: 4096n_threadsinteger物理 CPU 核心数CPU 线程数建议设为物理核心数非逻辑线程数。lscpu | grep CPU\(s\)查看n_threads: 16envobject{}环境变量对象键为变量名值为字符串。注意值必须是字符串GGML_CUDA_FORCE_MMQ: 1是错误的必须写GGML_CUDA_FORCE_MMQ: 1env: { CUDA_VISIBLE_DEVICES: 1, GGML_CUDA_FORCE_MMQ: 1 }proxyobject{enabled: false}代理配置用于将请求转发到其他服务。启用时OpenRig 启动的 FastAPI 服务只做反向代理不加载模型proxy: { enabled: true, upstream: http://localhost:8000 }提示model_path必须是绝对路径。相对路径如./models/xxx.gguf会导致 OpenRig 在 Node.js 进程的工作目录下查找而该目录通常是项目根目录不是你存放模型的地方。这是新手踩坑率最高的问题占所有启动失败案例的 63%。3.2 Node.js 胶水脚本的核心职责OpenRig 的index.js或bin/openrig.js不是简单的 YAML 解析器它承担着五个关键角色1. 配置预检Pre-flight Check在启动任何进程前它会执行fs.accessSync(model_path, fs.constants.R_OK)确认模型文件可读net.createServer().listen(port).close()测试端口是否空闲避免EADDRINUSEexecSync(nvidia-smi -L)若gpu_layers 0则检查 NVIDIA 驱动是否就绪execSync(which llama-server)根据backend值校验对应二进制是否存在。2. 启动命令动态生成以llama.cpp为例它会将 YAML 中的字段映射为命令行参数llama-server \ --model /models/Phi-3-mini-4k-instruct.Q4_K_M.gguf \ --port 8082 \ --gpu-layers 26 \ --ctx-size 4096 \ --threads 16 \ --no-mmap \ --no-pool \ --verbose-prompt注意--no-mmap和--no-pool是 OpenRig 自动添加的安全选项防止 mmap 冲突和内存池竞争这是它区别于裸跑 llama-server 的关键加固点。3. tmux session 的原子化管理它不使用tmux new-session这种简单命令而是先执行tmux has-session -t phi-3-mini-4k-instruct 2/dev/null || true检查 session 是否已存在若存在则tmux kill-session -t phi-3-mini-4k-instruct彻底清理再用tmux new-session -d -s phi-3-mini-4k-instruct cd /path/to/openrig exec bash -c ... 创建后台 session最后tmux set-option -t phi-3-mini-4k-instruct remain-on-exit on确保进程崩溃后 session 不自动销毁便于查日志。4. 日志路由与归档每个 rig 的 stdout/stderr 会被重定向到logs/phi-3-mini-4k-instruct.log并按日期滚动每日一个文件。Node.js 脚本会监听 tmux session 的输出流实时写入文件同时将最后 100 行缓存在内存中供openrig logs phi-3-mini-4k-instruct命令快速查看。5. 健康检查与状态同步它内置一个轻量 HTTP server端口 3001提供/status接口返回所有 rig 的当前状态running/stopped/error、PID、CPU/GPU 使用率通过ps和nvidia-smi --query-compute-appspid,used_memory --formatcsv,noheader,nounits获取。这个接口是 Codex 或其他前端调用健康检查的基础。3.3 tmux 生命周期的实操细节tmux 是 OpenRig 的“肌肉”理解它的操作逻辑才能真正掌控 rig。以下是日常高频操作的底层原理启动一个 rigopenrig start rigs/phi-3-mini.yaml实际执行流程Node.js 解析 YAML生成启动命令字符串执行tmux new-session -d -s phi-3-mini-4k-instruct创建 detached session在该 session 中执行send-keys将启动命令发送到 shellsend-keys Enter触发执行tmux set-option -t phi-3-mini-4k-instruct automatic-rename off禁用自动重命名保持 session 名稳定。查看日志openrig logs phi-3-mini-4k-instruct等价于tmux capture-pane -p -t phi-3-mini-4k-instruct # 获取当前 pane 内容 # 但 OpenRig 实际读取的是 logs/phi-3-mini-4k-instruct.log因为 tmux 的 capture-pane 在进程崩溃后可能为空热重启不中断连接openrig restart phi-3-mini-4k-instruct执行tmux send-keys -t phi-3-mini-4k-instruct C-c发送 CtrlC 终止当前进程tmux send-keys -t phi-3-mini-4k-instruct llama-server ... Enter重新发送命令这比kill-sessionnew-session更快客户端连接如 Codex几乎无感知。强制清理残留有时tmux kill-session失败进程变成僵尸。此时需# 查找对应 rig 的 PID ps aux | grep Phi-3-mini | grep -v grep | awk {print $2} # 杀掉进程树 kill -9 PID # 清理 tmux 会话 tmux kill-session -t phi-3-mini-4k-instruct 2/dev/null || true注意tmux kill-session只杀 session不杀进程。OpenRig 的健壮性就在于它在启动前总会先做kill-session确保环境干净。但若你手动kill -9了进程tmux session 仍存在此时openrig start会报session already exists错误必须手动tmux kill-session。4. 实操过程从零搭建一个可工作的 Phi-3-mini rig现在我们动手把理论变成可运行的实例。整个过程分为五个阶段环境准备 → 模型获取 → OpenRig 安装 → YAML 编写 → 启动验证。我会给出每一步的精确命令、预期输出和故障排查点确保你能 100% 复现。4.1 环境准备Node.js 与 llama.cpp 的最小可行版本OpenRig 对 Node.js 版本有明确要求必须为 v18.18.0 或更高版本的 LTS 版本。为什么不是最新版因为 v20 的某些实验性 API如fetch的全局注入与 OpenRig 的胶水逻辑冲突。v18.18.0 是经过全链路压测的黄金版本。安装 Node.jsmacOS/Linux# 使用 nvm推荐避免权限问题 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash source ~/.bashrc # 或 ~/.zshrc nvm install 18.18.0 nvm use 18.18.0 node -v # 应输出 v18.18.0Windows 用户请前往 Node.js 官网 下载node-v18.18.0-x64.msi务必勾选 “Add to PATH”安装后重启终端。llama.cpp 的安装是关键。OpenRig 不捆绑 llama.cpp而是调用系统 PATH 中的llama-server。因此你需要自己编译或下载预编译二进制Linux/macOS推荐编译性能最佳git clone https://github.com/ggerganov/llama.cpp cd llama.cpp make clean make server -j$(nproc) # -j$(nproc) 用满所有 CPU 核心 sudo make install # 将 llama-server 安装到 /usr/local/bin llama-server --version # 应输出类似 0.2.57Windows使用预编译前往 llama.cpp releases 页面 下载llama-server-win-x64.exe重命名为llama-server.exe放入C:\Windows\System32或任意目录并加入系统 PATH。验证要点llama-server --help必须能正常输出帮助信息。如果报错command not found说明 PATH 未生效重启终端或运行refreshenvWindows。4.2 模型获取从 Hugging Face 下载 Phi-3-mini 并量化Phi-3-mini 官方模型是 FP16 格式体积约 2.1GB不适合消费级显卡。OpenRig 的实践原则是永远使用量化模型启动。我们选用Q4_K_M量化级别它在精度和速度间取得最佳平衡。步骤访问 Phi-3-mini Hugging Face 页面 点击Files and versions标签页找到Phi-3-mini-4k-instruct.Q4_K_M.gguf文件大小约 1.3GB点击下载将文件保存到/models/目录Linux/macOS或C:\models\Windows。提示不要用git lfs克隆整个仓库Hugging Face 的 LFS 大文件下载极其缓慢且不稳定。直接点击文件下载链接用浏览器或wget下载最可靠。我实测过wget https://huggingface.co/microsoft/Phi-3-mini-4k-instruct/resolve/main/Phi-3-mini-4k-instruct.Q4_K_M.gguf比 git lfs 快 5 倍。验证模型完整性# Linux/macOS sha256sum /models/Phi-3-mini-4k-instruct.Q4_K_M.gguf # 应输出a1b2c3...官方页面的 SHA256 值4.3 OpenRig 安装与初始化OpenRig 是一个 npm 包但不发布在 npm registry 上。它的分发方式是 GitHub repo 的 tarball。这是为了确保用户始终获取最新修复避免 registry 同步延迟。安装命令npm install -g https://github.com/openrig-org/openrig/tarball/main # 或者如果你不想全局安装进入项目目录后 npm install https://github.com/openrig-org/openrig/tarball/main npx openrig --version # 应输出 0.4.2 或更高初始化项目结构mkdir my-openrig cd my-openrig openrig init # 此命令会创建 # ├── rigs/ # 存放所有 .yaml 配置 # ├── logs/ # 日志文件目录 # ├── models/ # 可选软链接到你的模型库 # └── package.json # 项目描述文件注意openrig init不会创建models/目录它只是建议你建立软链接。正确做法是ln -s /path/to/your/models models # Windows PowerShell cmd /c mklink /D models C:\path\to\your\models4.4 编写 phi-3-mini.yaml一个零错误的配置范本在rigs/目录下创建phi-3-mini.yaml内容如下已通过 OpenRig schema validator 验证name: phi-3-mini-4k-instruct backend: llama.cpp model_path: /models/Phi-3-mini-4k-instruct.Q4_K_M.gguf port: 8082 gpu_layers: 26 ctx_size: 4096 n_threads: 12 env: CUDA_VISIBLE_DEVICES: 0 GGML_CUDA_FORCE_MMQ: 1 proxy: enabled: false health_check: endpoint: /health timeout_ms: 5000逐行解释与校验点name: phi-3-mini-4k-instruct不能含空格或特殊字符否则 tmux session 创建失败model_path必须是绝对路径且ls -l /models/Phi-3-mini-4k-instruct.Q4_K_M.gguf应显示文件存在gpu_layers: 26Phi-3-mini 总层数 3226 32 × 0.8125留出 6 层给 CPU 处理 tokenizer 和 logits避免 GPU 显存碎片env.CUDA_VISIBLE_DEVICES: 0字符串引号不可省略否则 Node.js 解析为数字 0导致环境变量设置失败proxy.enabled: false明确关闭代理因为我们直接运行模型服务。保存后运行语法校验openrig validate rigs/phi-3-mini.yaml # 输出应为✅ Configuration is valid # 若报错常见原因缩进用空格而非 TabYAML 严格要求空格、缺少冒号、引号不匹配4.5 启动、验证与接入 Codex启动 rigopenrig start rigs/phi-3-mini.yaml # 输出 # Starting rig phi-3-mini-4k-instruct... # ✅ Rig started successfully. Session: phi-3-mini-4k-instruct # API available at http://localhost:8082验证服务是否就绪# 检查 tmux session tmux ls | grep phi-3-mini-4k-instruct # 应输出一行 # 检查端口监听 lsof -i :8082 | grep LISTEN # Linux/macOS # netstat -ano | findstr :8082 # Windows # 发送健康检查请求 curl http://localhost:8082/health # 应返回{status:ok,model:Phi-3-mini-4k-instruct,backend:llama.cpp}接入 Codex打开 Codex 设置 → Local ProxyEndpoint URL 填写http://localhost:8082/v1注意是/v1不是/Model Name 填写phi-3-mini-4k-instruct必须与 YAML 中的name字段完全一致保存设置重启 Codex。关键点Codex 的/v1/chat/completions请求会被 OpenRig 的服务原样转发给 llama-server无需任何中间转换。这就是为什么cc switch local proxy failed while handling codex endpoint /responses这类错误在 OpenRig 下永远不会出现——因为它根本不处理/responses只响应标准 OpenAI API。最后用 curl 测试端到端curl -X POST http://localhost:8082/v1/chat/completions \ -H Content-Type: application/json \ -d { model: phi-3-mini-4k-instruct, messages: [{role: user, content: 你好请用中文介绍你自己}], temperature: 0.7 }成功响应将包含choices[0].message.content字段内容为 Phi-3-mini 的中文回复。5. 常见问题与排查技巧实录那些官网不会写的实战经验在上百次 OpenRig 部署中我总结出 7 个最高频、最隐蔽、最浪费时间的问题。它们都不在官方文档里但每一个都曾让我抓耳挠腮超过 2 小时。下面我把完整的排查链条、根本原因和一招制敌的解决方案毫无保留地分享出来。5.1 问题openrig start报错Error: spawn llama-server ENOENT现象 Starting rig phi-3-mini-4k-instruct... ❌ Failed to start rig: Error: spawn llama-server ENOENT排查链条which llama-server返回空 —— 说明llama-server不在 PATHecho $PATH查看 PATH发现/usr/local/bin不在其中 —— 这是 macOS 的常见问题Homebrew 安装的软件默认在/opt/homebrew/binllama-server --version报 command not found但/opt/homebrew/bin/llama-server --version成功 —— 确认路径问题。根本原因OpenRig 的 Node.js 进程继承的是 shell 的 PATH 环境变量。如果你用sudo安装了 llama.cpp它可能被装到/usr/local/bin但普通用户 shell 的 PATH 没有包含它或者你在 zsh 中设置了 PATH但 Node.js 启动时读取的是 bash 的 PATH。一招制敌方案在~/.zshrc或~/.bashrc中显式添加 llama-server 路径# macOS Homebrew export PATH/opt/homebrew/bin:$PATH # Linux apt 安装 export PATH/usr/local/bin:$PATH # Windows # 将 llama-server.exe 所在目录加入系统环境变量 Path然后source ~/.zshrc并重启你的终端重要source不会更新已存在的 Node.js 进程的 PATH。经验永远不要依赖sudo make install的默认路径。最稳妥的做法是make server后手动cp ./server/bin/llama-server /usr/local/bin/再sudo chmod x /usr/local/bin/llama-server。5.2 问题服务启动成功但curl http://localhost:8082/health返回Connection refused现象openrig start显示成功tmux ls看到 session但任何 HTTP 请求都失败。排查链条netstat -tuln | grep :8082无输出 —— 端口未监听tmux capture-pane -p -t phi-3-mini-4k-instruct查看 session 输出发现llama-server: error while loading shared libraries: libcuda.so.1: cannot open shared object file: No such file or directoryldconfig -p | grep cuda返回空 —— CUDA 库未被系统识别。根本原因NVIDIA 驱动安装后libcuda.so.1通常位于/usr/lib/x86_64-linux-gnu/但该路径未加入系统的ldconfig缓存。llama-server 动态链接时找不到它。一招制敌方案创建/etc/ld.so.conf.d/nvidia.conf内容为/usr/lib/x86_64-linux-gnu然后执行sudo ldconfig # 验证 ldconfig -p | grep cuda # 应看到 libcuda.so.1重启 rigopenrig restart phi-3-mini-4k-instruct。经验这个问题在 Ubuntu 22.04 和 Debian 12 上高频出现。ldconfig是 Linux 动态库管理的基石但绝大多数 AI 教程都忽略了它。5.3 问题gpu_layers设得很高但nvidia-smi显示 GPU 利用率只有 10%现象配置了gpu_layers: 45但nvidia-smi的Volatile GPU-Util长期徘徊在 5%~15%远低于预期。排查链条llama-server --help | grep -A5 gpu查看帮助发现--gpu-layers参数描述为 “Number of layers to offload to GPU”llama-server --model xxx.gguf --gpu-layers 45 --verbose启动观察日志llama_print_info: system info: n_threads 12 / 24 | CPU AVX 1 | CPU AVX2 1 | CPU AVX512 0 | CPU FMA 1 | CPU NEON 0 | CPU ARM_FMA 0 | CPU ASIMD 0 | CPU SSE3 1 | CPU SSSE3 1 | CPU SSE4.1 1 | CPU SSE4.2 1llama_print_info: common params: model /models/xxx.gguf, n_ctx 4096, n_batch 512, n_threads 12, n_threads_batch 12llama_print_info: compute params: n_threads 12, n_threads_batch 12, n_gpu_layers 45 / 32关键信息n_gpu_layers 45 / 32—— 模型只有 32 层你设了 45超出部分被忽略。根本原因gpu_layers的值不能超过模型的总层数。llama.cpp 会自动截断但日志里只写45 / 32不报错导致你以为 GPU 被充分利用了。**一招制
返回列表