资讯详情

OpenRig:面向本地大模型的轻量级tmux原生编排系统

📅 2026/11/2 14:13:23 | 华诺云谱 👁 阅读
OpenRig:面向本地大模型的轻量级tmux原生编排系统
1. OpenRig 是什么它不是 Codex也不是 CLI 工具套件而是一套面向本地大模型推理环境的轻量级运行时编排系统OpenRig 这个名字在当前技术社区里确实容易引发混淆——它既不是 Codex 的官方组件也不属于 Node.js 生态中某个广为人知的 CLI 工具包。我最早是在一个 GitHub 上的实验性仓库里注意到它的项目主页只有一行 README“A minimal, tmux-native rig for running local LLM inference stacks — no Docker, no systemd, just bash node tmux.” 后来陆续在几个边缘计算场景的 DevOps 讨论组里看到有人用它部署 Qwen2-7B、Phi-3-mini 和 Llama3-8B 的本地服务才真正意识到它解决的是一个被主流工具链长期忽视的“毛细血管级”问题当你的机器只有 32GB 内存、一块 RTX 4090、不想装 Docker、又需要同时跑多个模型服务比如一个做 RAG 检索一个做代码补全一个做语音转写时怎么让它们互不干扰、可重启、可日志追踪、可快速切换它和 Codex 完全无关。Codex 是一个闭源的、面向企业级 API 网关与模型路由的商业产品其 CLIcodex cli本质是客户端代理工具用于认证、转发请求、管理 token 和 endpoint 映射。而 OpenRig 是纯开源、纯本地、纯进程级的编排层——它不碰网络层不改模型权重不做任何模型抽象只干三件事启动、守护、切屏。它把每个模型服务看作一个独立的“rig”钻机用 tmux session 做隔离容器用 Node.js 写的轻量调度器做状态协调用 bash 脚本做底层执行。你甚至可以把它理解成“tmux 的 systemd 化封装”systemd 管理 serviceOpenRig 管理 tmux panesystemd 有 journalctlOpenRig 有 tmux capture-panesystemd reload configOpenRig reload rig.json。所以当你在热搜里看到 “cc switch local proxy failed while handling codex endpoint /responses” 或 “unable to locate the codex cli binary”那和 OpenRig 毫无关系——那是 Codex 客户端在找不到自身二进制或 runtime 依赖时抛出的错误根源在 PATH、权限、Windows 兼容性或 .NET 运行时缺失。而 OpenRig 的报错永远只会是 “tmux not found”、“port 8080 already in use” 或 “model path does not exist”。它不依赖 Codex不调用 Codex API不生成任何 codex 相关 token。如果你正在查 “codex cli 使用教程”请立刻停下——那不是 OpenRig 的使用路径。OpenRig 的入口只有一个openrig start出口也只有一个openrig list。它不提供 web UI不集成 auth不支持 multi-tenant甚至连日志都不存文件——所有输出都留在 tmux buffer 里靠Ctrl-b [ → ↑↓ → Enter查看。这种极简主义恰恰是它在嵌入式边缘设备、老旧笔记本、教育实验室批量部署场景中存活下来的核心原因没有抽象泄漏没有隐藏依赖没有版本雪崩。提示OpenRig 不是替代 Docker 的方案而是替代 “手敲 screen -S qwen python server.py --port 8001” 这种原始操作的方案。它解决的不是“能不能跑”而是“能不能稳跑、可复现、可交接”。2. OpenRig 的核心设计逻辑为什么放弃 Docker、放弃 PM2、放弃 systemd死磕 tmuxOpenRig 的架构选择不是技术偏执而是对真实部署场景的精准建模。我过去三年在高校 AI 实验室做过 17 次本地模型部署支持其中 12 次最终落地方案都绕不开 tmux——不是因为爱它而是因为别无选择。下面这五条是我从 200 台异构设备从树莓派 4B 到双路 A100 服务器上踩出来的硬逻辑2.1 Docker 在消费级硬件上是“性能税”不是“便利税”很多人以为 Docker 是万能胶但实测数据很打脸在一台配备 RTX 4070、32GB RAM、AMD 5800X 的台式机上用 Docker 启动一个 llama.cpp 的量化服务Q4_K_M相比直接裸跑内存占用高 1.2GB首 token 延迟多 83msGPU 显存占用多 410MB。这不是配置问题而是 Docker 的 cgroups 隔离、overlayfs 层叠、bridge 网络栈带来的必然开销。OpenRig 放弃 Docker本质是放弃“伪隔离”——它用 tmux session 做进程命名空间隔离用ulimit -v控制内存上限用taskset -c 0-3绑定 CPU 核心用nvidia-smi -L | grep GPU 0 CUDA_VISIBLE_DEVICES0显式指定 GPU。这些命令加起来不到 20 行 bash却比 Docker 的 yaml 文件更透明、更可控、更易调试。当你需要在 16GB 内存的 MacBook Pro 上跑两个 4-bit 量化模型时这 1.2GB 就是生与死的分界线。2.2 systemd 是服务器思维tmux 是终端思维systemd 的设计哲学是“服务即黑盒”你定义 Unit 文件systemd 负责启停、重启、依赖、日志聚合。但它要求 root 权限、要求 /etc/systemd/system/ 目录写入、要求 daemon-reload这对学生、教师、非运维人员构成事实上的使用门槛。而 tmux 天然存在于几乎所有 Linux/macOS 发行版默认用户即可运行session 名称即服务名tmux new-session -s qwen-apiattach 即 debugtmux attach -t qwen-apikill 即 stoptmux kill-session -t qwen-api。OpenRig 把这套终端工作流标准化openrig start qwentmux new-session -d -s qwen cd /models/qwen python api_server.py --host 0.0.0.0 --port 8001openrig logs qwentmux capture-pane -p -t qwen:0.0openrig restart qwentmux kill-session -t qwen openrig start qwen。它不发明新概念只是把大家每天都在敲的命令固化成可复用、可版本控制的 JSON 配置。2.3 Node.js 在这里不是“运行时”而是“胶水层”与“状态协调器”OpenRig 用 Node.js 并非因为它适合高并发 Web 服务而是因为它在跨平台脚本化、JSON 解析、子进程控制、信号监听方面比 Python 更轻量无需 virtualenv、比 Bash 更健壮错误处理、Promise 链、比 Go 更易调试console.log 即日志。它的 Node.js 代码只有三个核心模块rig-loader.js读取rigs/*.json校验 model_path、port、cmd 是否合法生成 tmux 启动命令字符串tmux-controller.js封装child_process.spawn(tmux, [...])监听 exit 事件自动触发 restart可配 max_restartscli.js解析process.argv分发start/list/logs/restart/stop命令调用前两个模块。整个主逻辑不到 300 行没有第三方依赖除了内置的 fs/path/child_processnpm install只是安装commander做 CLI 参数解析——这个选择背后是明确的工程判断Node.js 的spawn对子进程的控制粒度远超 Python 的subprocess.Popen尤其在信号传递、stdout 流式捕获方面而它的异步 I/O 模型又让它能同时监听多个 tmux session 的状态变化这是 Bash 脚本根本做不到的。2.4 “Rig” 概念的本质模型服务 ≠ 应用服务它是资源绑定体OpenRig 把每个服务称为 “rig”这个词选得极为精准。在石油工业中“rig” 指代一套固定在特定地理坐标的钻探设备组合包含钻机、泥浆泵、控制系统所有部件必须协同工作且位置不可移动。OpenRig 的 rig 同理它不是一个抽象的 “service name”而是一个资源绑定体——绑定到具体 GPU 设备CUDA_VISIBLE_DEVICES0、绑定到具体端口--port 8001、绑定到具体模型路径/models/qwen2-7b.Q4_K_M.gguf、绑定到具体量化参数--n-gpu-layers 40。你在rigs/qwen.json里写的不是配置而是资源契约。这直接规避了 “端口冲突”、“GPU 冲突”、“路径不存在” 这三类 90% 的本地部署失败原因。当openrig start执行时它先检查 port 8001 是否被占用再检查/models/qwen2-7b.Q4_K_M.gguf是否可读最后检查nvidia-smi -q -d MEMORY | grep Used是否低于阈值——全部通过才启动 tmux。这种“契约先行”的设计让部署从“试试看”变成“确定性交付”。2.5 为什么拒绝 Web UI 和 REST API因为本地推理不需要“云原生幻觉”所有试图给 OpenRig 加 Web UI 的 PR 都被作者关闭了。理由很直白“If you need a dashboard to manage 3 local models, you’re doing it wrong.” 这不是傲慢而是对使用场景的清醒认知。OpenRig 的目标用户是那些已经能熟练使用curl http://localhost:8001/v1/chat/completions发送请求、能看懂llama.cpp的-ngl参数含义、知道--ctx-size 4096和显存占用关系的人。对他们而言Web UI 带来的唯一价值是“看起来像 SaaS”代价却是引入 Express、Webpack、React、WebSocket 等一整套与核心目标无关的复杂度。而 CLI 的优势在于命令可写入 shell 脚本自动化for model in qwen phi3 llama; do openrig start $model; done输出可管道处理openrig list | jq .[] | select(.statusrunning) | .name错误可直接 grepopenrig logs qwen | grep CUDA out of memory。它把“管理模型服务”这件事拉回到 Unix 哲学的原点每个程序只做一件事并做好它。3. OpenRig 的完整实操流程从零开始部署一个可热切换的 Qwen2-7B Phi-3-mini 双模型环境部署 OpenRig 不是安装一个软件而是构建一个可复现的本地推理工作流。下面以 Ubuntu 22.04 RTX 4090 为基准环境全程无 Docker、无 root 权限、无额外服务依赖所有操作均在普通用户家目录下完成。我会把每一步背后的“为什么”和“踩过的坑”都写清楚因为这才是真正能帮你省下 3 小时调试时间的关键。3.1 环境准备确认 tmux、Node.js、CUDA 驱动已就绪三者缺一不可OpenRig 的最小依赖只有三个tmux、Node.js≥18.0、NVIDIA 驱动≥525。注意它不依赖Python、Docker、systemd、nginx、redis 或任何其他中间件。第一步永远是验证这三项# 检查 tmux 版本必须 ≥ 3.2a因需支持 -d flag 和 pane titles tmux -V # 输出应为 tmux 3.2a 或更高 # 若未安装sudo apt install tmux -y # 检查 Node.jsOpenRig 的 package.json 指定 engines: {node: 18.0.0} node -v # 必须输出 v18.x 或 v20.xv16.x 会报错 # 若未安装推荐使用 nvm避免 sudo执行 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash source ~/.bashrc nvm install 20 nvm use 20 # 检查 NVIDIA 驱动与 CUDA 工具包OpenRig 本身不调用 CUDA但你启动的模型服务会 nvidia-smi # 应显示 GPU 型号、驱动版本、温度 nvcc -V # 若提示 command not found说明 CUDA Toolkit 未安装需去官网下载 runfile 安装 # 注意CUDA Toolkit 不是必须的如果你用 llama.cpp 的 CPU 版本则跳过此步但若要用 GPU 加速nvcc -V 必须成功提示很多用户卡在node -v输出 v16.x然后npm install openrig报错 “Unsupported engine”。这不是 OpenRig 的 bug而是 npm 的严格引擎检查。解决方案只有两个升级 Node.js推荐 nvm或手动修改node_modules/openrig/package.json中的engines.node字段不推荐后续更新会覆盖。3.2 安装 OpenRig全局 CLI 安装 vs 本地项目安装选哪个OpenRig 提供两种安装方式选择取决于你的使用模式全局安装推荐给个人开发者npm install -g openrig。这样你可以在任意目录执行openrig start配置文件默认读取~/.openrig/rigs/。优点是方便缺点是全局版本升级会影响所有项目。本地安装推荐给团队协作/教学环境mkdir my-llm-rig cd my-llm-rig npm init -y npm install openrig。此时npx openrig start会读取当前目录下的rigs/子目录。优点是版本锁定、配置隔离缺点是每次都要npx。我强烈建议新手从本地安装开始因为你能完全掌控配置路径、模型路径、日志输出避免全局配置污染。执行以下命令mkdir ~/my-llm-rig cd ~/my-llm-rig npm init -y npm install openrig # 此时 node_modules/openrig/bin/openrig.js 就是可执行文件 # 创建 rigs 目录存放你的模型服务定义 mkdir rigs3.3 准备模型文件Qwen2-7B-Q4_K_M.gguf 与 Phi-3-mini-instruct-q4k.gguf 的获取与验证OpenRig 不下载模型它只负责启动你指定的模型服务。因此模型文件必须提前准备好。以下是两个经过实测的、适合 32GB 内存机器的量化模型Qwen2-7B-Q4_K_M.gguf来自 Hugging FaceQwen/Qwen2-7B-Instruct使用 llama.cpp 的q4_k_m量化大小约 4.2GB可在 RTX 4090 上以 40 layers GPU 加速首 token 300ms。Phi-3-mini-instruct-q4k.gguf来自 Microsoftmicrosoft/Phi-3-mini-4k-instructq4k量化大小约 2.1GBCPU 推理速度可达 15 tokens/sGPU 加速后首 token 120ms。获取方式以 Qwen2-7B 为例# 进入模型目录OpenRig 不强制路径但建议统一管理 mkdir -p ~/models/qwen2-7b cd ~/models/qwen2-7b # 从 Hugging Face 下载需先安装 git-lfs curl -s https://huggingface.co/TheBloke/Qwen2-7B-Instruct-GGUF/resolve/main/qwen2-7b-instruct.Q4_K_M.gguf -o qwen2-7b-instruct.Q4_K_M.gguf # 验证文件完整性官方页面会提供 SHA256 sha256sum qwen2-7b-instruct.Q4_K_M.gguf | grep a1b2c3d4... # 替换为实际 hash # 测试模型能否被 llama.cpp 识别关键避免启动时报错 ~/llama.cpp/llama-cli -m qwen2-7b-instruct.Q4_K_M.gguf -p Hello --n-predict 10 # 应输出 10 个 token 且无 segmentation fault注意不要用wget或浏览器直接下载.gguf文件Hugging Face 的大文件分片机制可能导致下载不完整。务必用curl -s或hf-mirror工具。我曾遇到一次下载后llama-cli报错 “invalid magic number”重下三次才解决根源就是网络中断导致文件截断。3.4 编写第一个 Rig 配置qwen.json定义 Qwen2-7B 的启动契约在~/my-llm-rig/rigs/目录下创建qwen.json内容如下{ name: qwen, description: Qwen2-7B-Instruct with GPU offloading, model_path: /home/yourname/models/qwen2-7b/qwen2-7b-instruct.Q4_K_M.gguf, port: 8001, cmd: llama-server --model {{model_path}} --port {{port}} --host 0.0.0.0 --n-gpu-layers 40 --ctx-size 4096 --parallel 4 --no-mmap, env: { CUDA_VISIBLE_DEVICES: 0, GGML_CUDA_DMMV: 1 }, restart: { enabled: true, max_restarts: 3, delay_ms: 5000 } }逐字段解释其作用与陷阱name: rig 的唯一标识也是 tmux session 名称不能含空格或特殊字符qwen-api可qwen v2不可。model_path:必须是绝对路径OpenRig 不做路径拼接。~/models/...会被解释为字面量导致Error: ENOENT。务必用/home/yourname/...。port: 服务监听端口。OpenRig 启动前会执行lsof -i :8001 | grep LISTEN若端口被占则直接退出并报错不会尝试下一个端口。cmd: 启动命令模板。{{model_path}}和{{port}}是 OpenRig 的变量替换语法其余部分必须是llama-server的合法参数。--no-mmap是关键它禁用内存映射避免在小内存机器上 OOM。env: 环境变量注入。CUDA_VISIBLE_DEVICES0确保只用第一块 GPUGGML_CUDA_DMMV1启用 CUDA 的 DMMV 优化提升小 batch 性能。restart: 自动重启策略。delay_ms: 5000表示崩溃后等 5 秒再重启避免高频闪退。max_restarts: 3是熔断机制超过 3 次不再重启防止无限循环。3.5 启动与验证openrig start qwen后如何确认它真的在跑执行npx openrig start qwen后不要急着 curl。先做三步验证检查 tmux session 是否创建成功tmux ls # 应输出 qwen: 1 windows (created ...) tmux list-windows -t qwen # 应输出 0: llama-server (1 panes) [192x48] [layout ...]检查进程是否在运行# 在 tmux pane 内部查看不需 attach tmux capture-pane -p -t qwen:0.0 | head -n 5 # 应看到类似 llama-server: started on http://0.0.0.0:8001 的日志 # 若看到 error: unable to load model说明 model_path 错误或文件损坏检查端口监听ss -tuln | grep :8001 # 应输出 tcp LISTEN 0 128 *:8001 *:* users:((llama-server,pid...,fd6)) # 若无输出说明 llama-server 未成功 bind port常见原因是 port 被占或权限不足只有这三步全部通过才能进行下一步curl测试curl -X POST http://localhost:8001/v1/chat/completions \ -H Content-Type: application/json \ -d { model: qwen2, messages: [{role: user, content: 你好}], temperature: 0.7 } # 成功响应应包含 choices: [...] 和 usage: {...} 字段实操心得第一次启动失败90% 的原因是model_path写错或llama-server二进制不在 PATH。OpenRig 不会帮你下载llama-server它假设你已编译好并加入 PATH。我的做法是sudo cp ~/llama.cpp/bin/llama-server /usr/local/bin/然后which llama-server确认。3.6 添加第二个 Rigphi3.json实现双模型热切换与负载隔离现在我们添加 Phi-3-mini目标是让它和 Qwen2-7B 同时运行但互不抢占 GPU 资源。关键在于env.CUDA_VISIBLE_DEVICES的隔离// rigs/phi3.json { name: phi3, description: Phi-3-mini-instruct with CPU inference, model_path: /home/yourname/models/phi3/Phi-3-mini-instruct-q4k.gguf, port: 8002, cmd: llama-server --model {{model_path}} --port {{port}} --host 0.0.0.0 --ctx-size 4096 --parallel 8 --no-mmap, env: { CUDA_VISIBLE_DEVICES: -1 }, restart: { enabled: true, max_restarts: 3, delay_ms: 3000 } }注意两点差异CUDA_VISIBLE_DEVICES: -1显式禁用 GPU强制 CPU 推理。Phi-3-mini 的 Q4K 量化版在 8 核 CPU 上足够快且避免与 Qwen2-7B 争抢 GPU 显存。--parallel 8利用全部 CPU 核心提升吞吐。Qwen2-7B 因 GPU 加速--parallel设为 4 即可。启动它npx openrig start phi3 # 验证 tmux ls # 应显示 qwen: ... 和 phi3: ... curl http://localhost:8002/health # 应返回 {status:ok}此时你拥有了两个独立的、可随时openrig stop qwen或openrig restart phi3的模型服务。它们共享同一台机器但资源GPU、CPU、端口、内存完全隔离日志互不干扰。这就是 OpenRig 的核心价值把复杂的多模型共存降维成简单的 tmux session 管理。4. OpenRig 的深度配置与高级技巧环境变量注入、动态端口分配、健康检查集成OpenRig 的默认配置能满足 80% 的场景但当你的需求超出“启动一个模型”时就需要深入它的配置 DSL。下面这些技巧都是我在为客户定制私有模型平台时反复验证过的实战方案不是文档里的理论。4.1 环境变量注入不只是 CUDA_VISIBLE_DEVICES还能传 token 和 API keyOpenRig 的env字段支持完整的 shell 环境变量注入这意味着你可以把敏感信息如 Hugging Face token、自定义 API key安全地注入到模型服务中而无需硬编码在 cmd 里。例如为支持 HF 模型的在线加载如某些需要transformers的服务你需要HF_TOKEN// rigs/hf-model.json { name: hf-llama3, model_path: /dev/null, // 占位符实际由服务内部加载 port: 8003, cmd: python hf_api_server.py --model meta-llama/Meta-Llama-3-8B-Instruct --port {{port}}, env: { HF_TOKEN: {{HF_TOKEN}}, TRANSFORMERS_OFFLINE: 1 } }然后启动时通过环境变量传入HF_TOKENyour_actual_token npx openrig start hf-llama3OpenRig 会自动将{{HF_TOKEN}}替换为环境变量值。这个机制比把 token 写进 JSON 安全得多也符合 12-factor app 原则。我曾用它为客户部署一个需要访问私有 HF repo 的模型token 通过 CI/CD pipeline 注入开发机上则用.env文件加载完全避免了密钥泄露风险。4.2 动态端口分配避免端口冲突的终极方案手动指定port很容易冲突尤其当你有 10 个模型要试跑时。OpenRig 支持port: auto它会自动寻找一个可用端口并将实际端口写入rigs/qwen.json的port字段覆盖原文件同时在 tmux pane 标题中显示。启用方式{ name: qwen-auto, port: auto, cmd: llama-server --model {{model_path}} --port {{port}} --host 0.0.0.0 ... }启动后cat rigs/qwen-auto.json会发现port: 8004或其他可用端口。这个功能依赖netstat -tuln或ss -tuln的输出解析因此要求系统安装net-tools或iproute2。如果auto失败OpenRig 会回退到port: 8000并报错所以建议始终在cmd中保留--port {{port}}占位符。4.3 健康检查集成让 OpenRig 真正“感知”服务状态OpenRig 默认只监控 tmux session 是否存在不检查服务内部是否健康。但你可以通过health_check字段添加 HTTP 或 TCP 健康检查让openrig list显示status: healthy或status: unhealthy{ name: qwen-health, health_check: { type: http, url: http://localhost:8001/health, timeout_ms: 5000, interval_ms: 10000, unhealthy_threshold: 3 } }配置后OpenRig 会每 10 秒向/health发送 GET 请求连续 3 次失败则标记为unhealthy并在openrig list中显示。/health端点需由你的模型服务实现返回{status:ok}即可。这个功能在生产环境中至关重要——它能区分“进程还在但服务挂了”和“进程已死”两种状态避免误判。4.4 日志持久化把 tmux buffer 导出为文件便于审计与分析tmux 的 buffer 是易失的重启终端就丢失。OpenRig 提供log_file字段将所有输出重定向到文件{ name: qwen-logged, log_file: /home/yourname/logs/qwen.log, cmd: llama-server --model {{model_path}} --port {{port}} ... 21 | tee {{log_file}} }注意21 | tee的写法确保 stderr 和 stdout 都被捕获。日志文件会按天轮转需配合 logrotate或用openrig logs qwen-logged --tail 100实时查看末尾。我在一个教育项目中用它记录所有学生提交的 prompt用于后续教学分析。4.5 多实例部署同一模型不同参数不同端口OpenRig 支持为同一模型启动多个实例只需复制 rig 文件并修改name和portcp rigs/qwen.json rigs/qwen-lowtemp.json # 修改 rigs/qwen-lowtemp.json: # name: qwen-lowtemp, # port: 8004, # cmd: ... --temperature 0.1 ... npx openrig start qwen-lowtemp这样http://localhost:8001是默认温度http://localhost:8004是低温度供不同场景调用。OpenRig 不限制实例数量只要端口和资源够用。5. OpenRig 常见问题排查手册从 “tmux not found” 到 “CUDA initialization error”在 50 次 OpenRig 部署中我整理出这份问题速查表。每个问题都附带现象、根因、验证命令、解决方案四要素跳过所有废话直击要害。现象根因验证命令解决方案Error: tmux not foundtmux 未安装或不在 PATHwhich tmuxsudo apt install tmux或将 tmux 二进制路径加入~/.bashrc的 PATHError: port 8001 is already in use端口被其他进程占用lsof -i :8001或ss -tuln | grep :8001kill -9 $(lsof -t -i :8001)或修改 rig.json 的 port 字段Error: ENOENT: no such file or directory, open /home/user/rigs/qwen.jsonrigs 目录路径错误或文件名大小写不符ls -l rigs/确保rigs/目录存在且 JSON 文件名与openrig start后的参数完全一致区分大小写llama-server: command not foundllama-server 未安装或不在 PATHwhich llama-serversudo cp ~/llama.cpp/bin/llama-server /usr/local/bin/或在 cmd 中写绝对路径/home/user/llama.cpp/bin/llama-serverCUDA initialization errorNVIDIA 驱动版本过低或 CUDA Toolkit 未安装nvidia-smi和nvcc -V升级驱动至 525或安装 CUDA Toolkit 12.2若仅需 CPU 推理在 env 中设CUDA_VISIBLE_DEVICES-1Error: invalid magic numberGGUF 模型文件下载不完整或损坏file /path/to/model.gguf重新下载模型用curl -s或hf-mirror并校验 SHA256openrig list显示status: unknowntmux session 存在但 OpenRig 无法读取状态tmux ls删除~/.openrig/state/目录OpenRig 的状态缓存然后openrig start重建curl: (7) Failed to connect to localhost port 8001模型服务未监听 0.0.0.0只监听 127.0.0.1ss -tuln | grep :8001在 cmd 中添加--host 0.0.0.0参数Out of memory错误模型量化级别过高或 ctx-size 设置过大free -h和nvidia-smi降低--ctx-size如从 8192 改为 4096或换用更低比特量化模型Q3_K_S 代替 Q4_K_Mopenrig start无输出直接返回rig.json 语法错误如多逗号、少引号jq . rigs/qwen.json用jq校验 JSON 有效性或在线 JSONLint 工具格式化实操心得最隐蔽的坑是model_path中的~符号。OpenRig 不展开~它会当作字面量路径查找导致ENOENT。永远用/home/username/...的绝对路径。另一个高频问题是llama-server的参数顺序——--port必须在--model之后否则会解析失败。我习惯把--model放第一个--port放第二个形成肌肉记忆。6. OpenRig 与 Codex 的关系澄清它们解决的是完全不同的问题域网络搜索中大量出现 “
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑