第 9 章 · 03 Web/Desktop/Docker 与全书回顾 本节摘要:本节是全书最后一节,做两件事。第一,完成全栈交付层的最后一块—— (纯 OpenAI-API 客户端浏览器 UI,React/Vite,实时指标 / 硬件面板 / 专家层级)、 (Tauri v2 桌面壳,Rust 包 web UI)、 (CPU 推理镜像 / )。第二,把第 1-9 章的机制深潜旅程整体回顾,提炼 Colibrì 的核心哲学四点,并给读者下一步的具体建议。本节末尾不做过渡,直接收尾全书。 内容来源:原项目源码 、 、 、全书前八章 ⚠️ 注意:本节配图 是 dashboard 实际截图。
本节摘要:本节是全书最后一节,做两件事。第一,完成全栈交付层的最后一块——
web/(纯 OpenAI-API 客户端浏览器 UI,React/Vite,实时指标 / 硬件面板 / 专家层级)、desktop/(Tauri v2 桌面壳,Rust 包 web UI)、docker/(CPU 推理镜像Dockerfile/Dockerfile.slim)。第二,把第 1-9 章的机制深潜旅程整体回顾,提炼 Colibrì 的核心哲学四点,并给读者下一步的具体建议。本节末尾不做过渡,直接收尾全书。
内容来源:原项目源码
web/、desktop/、docker/、全书前八章
⚠️ 注意:本节配图
images/colibri-dashboard.png是 dashboard 实际截图。Web UI 是"纯客户端"——它不内嵌推理引擎,只连一个 OpenAI 兼容端点(可以是coli serve、也可以是任何远端服务)。
web/ 浏览器 UI 的三大面板(实时指标 / 硬件面板 / 专家层级)及其数据来源。desktop/ 是 Tauri v2 壳,不重写前端,共享 web/ 的 React 代码。Dockerfile(完整带构建工具)与 Dockerfile.slim(多阶段精简运行时)。web/:纯 OpenAI-API 客户端浏览器 UIweb/ 是一个标准 React + Vite + TypeScript 工程,目录结构:
web/ ├── src/ │ ├── App.tsx # 根组件 │ ├── Brain.tsx # 推理可视化(配合 colibri-brain.png 风格) │ ├── Profiling.tsx # per-turn PROF 曲线(数据来自 /profile) │ ├── components/ # 复用组件 │ ├── lib/ # API 客户端、工具函数 │ └── i18n/ # 多语言 ├── index.html ├── package.json └── vite.config.ts
它是一个纯 OpenAI-API 客户端——所有数据都通过 HTTP 从某个 OpenAI 兼容端点拉取(coli serve 启动的服务或任何远端)。三大面板:
/profile 拉滚动 120 turn 的 PROF 快照;/health + /experts;这套 UI 的关键设计:它对引擎一无所知——只要对方说 OpenAI 协议,任何后端都能接。这让 dashboard 可以同时作为本地 coli serve 的监控面板,以及远端集群服务的可视化客户端。

desktop/:Tauri v2 桌面壳desktop/ 是 Tauri v2 工程,不重写前端,直接包 web/:
desktop/ ├── README.md └── src-tauri/ ├── Cargo.toml # Rust 依赖 ├── src/ # Rust 主程序 ├── tauri.conf.json # Tauri 配置 └── icons/
tauri.conf.json 关键字段:
{ "$schema": "https://schema.tauri.app/config/2", "productName": "colibrì", "build": { "beforeDevCommand": "npm --prefix ../web run dev", "devUrl": "http://localhost:5173", "beforeBuildCommand": "npm --prefix ../web run build", "frontendDist": "../../web/dist" } }
要点:
web/ 的 Vite dev server(localhost:5173),Rust 侧只做壳;web/dist 进桌面 app,跨平台(Windows/macOS/Linux);desktop/README.md 明说"模型几百 GB,必须作为外部、用户选择的资源,而不是 opaque 应用 sidecar"。后果:桌面 app 只是一个"漂亮的 OpenAI 客户端",引擎可以是用户本机的 coli serve,也可以是远端服务。这与 web UI 的设计哲学完全一致。
docker/:CPU 推理容器镜像docker/ 提供两份 Dockerfile:
Dockerfile:完整版,基于 debian:stable-slim,装 git/build-essential/python3,git clone 仓库后 ./setup.sh && ./coli build 编译引擎。适合在镜像里现编现用。Dockerfile.slim:多阶段构建——Stage 1 编译引擎,Stage 2 只拷贝二进制 + Python 启动器到精简运行时。最终镜像不含编译工具,体积小。Dockerfile.slim 顶部注释把"什么进镜像、什么不进"讲得极清:
# This image ships ONLY the inference path (chat/serve/run/info/plan/doctor) — # the ~372 GB model is mounted, never baked in, and the converter (which needs # torch) is deliberately out of scope; convert from a source checkout instead.
三条规则:
-v /nvme/glm52_i4:/model):几百 GB 的模型不适合进镜像层;典型用法:
docker run --rm -p 5000:5000 -v /nvme/glm52_i4:/model colibri \ serve --host 0.0.0.0 --model-id glm-5.2
把容器当作"打包好的 coli serve"——内部跑 openai_server.py + 引擎二进制,对外暴露 OpenAI 兼容端点。
把九章串成一条线,每个机制放回 per-token 五步路径(路由 → 联合 → 放置 → 重叠 → 学习):
| 章 | 机制 | 解决的问题 | 核心源码 |
|---|---|---|---|
| 1 | 权重 JIT 命题 + MoE 稀疏性 | 让 744B-2.8T 模型跑在消费硬件 | colibri.c |
| 2 | safetensors 读取 + 量化容器 | 多种量化格式的统一解码 | st.h / quant.h / FORMATS.md |
| 3 | 专家流式缓存 + LRU | 19456 个专家按需加载,只缓存热点 | expert_store.h |
| 4 | 多层级存储放置 | VRAM/RAM/NVMe 三级,放置只决速度 | tier.h |
| 5 | 双 SSD 带宽翻倍 + IO 重叠 | 双盘镜像加权路由 + 异步 IO | uring.h |
| 6 | MoE 路由遥测 + 学习型缓存 | 路由可缓存,越用越快 | route_trace.h |
| 7 | KV 持久化 + MLA 57× + 前缀复用 | 暖对话 + 跨 turn 复用 | kv_persist.h / kv_prefix.h |
| 8 | CPU/GPU 异构执行 | CUDA/Metal/Vulkan 共享运行时 | backend_loader.c / backend_*.cu/mm/vulkan.c |
| 9 | CLI / 服务 / Web 全栈 | 用户接入 + OpenAI 兼容 | coli / openai_server.py / web/ / desktop/ / docker/ |
把它们放进 per-token 五步:
第 1 章是命题(为什么万亿模型能跑),第 2 章是数据格式(safetensors + 量化容器),第 7 章是状态压缩(KV 持久化 + 复用),第 9 章是交付(CLI + 服务 + Web)。九章合起来,就是"一个纯 C 的万亿参数 MoE 推理引擎如何在消费硬件上跑通"的完整答案。
把九章的所有具体决策,抽象到四条心法:
.c(colibri.c / deepseek_v4.c / inkling.c / kimi_k3.c / olmoe.c),共享一组头文件(st.h / quant.h / expert_store.h / tier.h / route_trace.h / kv_*.h)。这是全书的工程姿态。读完这本教程后,推荐的进阶路径:
make glm 编译,coli plan 看推荐配置,coli chat 跑通第一轮对话,coli doctor 排查任何环境问题;expert_store.h 的 LRU 策略,跑 tests/ 的 token-exact 回归;或调 kv_prefix_reuse 的复用条件观察 DeepSeek V4 第二 turn 的 320s→61s 实测;MTLResidencySet 的 E5 实验、Vulkan iGPU 的流式专家 offload 边界;#707/#341/#116 这些 PR 都记录了"为什么不这么做"。如果你测出一个反直觉的负结果,提 issue 或 PR 记录下来,对社区同样重要。九章机制深潜到此为止。从 colibri.c 顶部的命题,到 docker/Dockerfile.slim 的运行时镜像,我们走完了"一个纯 C 的万亿参数 MoE 推理引擎如何在消费硬件上跑通"的完整答案——命题、稀疏性、量化容器、专家缓存、多层级存储、双 SSD 重叠、路由遥测、KV 压缩、CPU/GPU 异构、CLI 服务 Web 全栈。每一步都附了源码、附了边界、附了诚实假设。剩下的工作交给读者:打开 c/,选一个章节对应的文件,开始读、改、测、贡献。蜂鸟虽小,机制完整——这就是 Colibrì。