timber
Timber 是一款专为经典机器学习模型打造的高性能推理工具,被誉为“传统机器学习的 Ollama"。它能够将 XGBoost、LightGBM、scikit-learn、CatBoost 及 ONNX 等主流框架训练好的模型,通过先进的预编译(AOT)技术,直接转换为无运行时依赖的原生 C99 代码。
在机器学习落地过程中,基于 Python 的推理往往面临速度慢、环境配置复杂以及部署包体积大等痛点。Timber 完美解决了这些问题:它将模型编译为独立的二进制文件,无需安装庞大的 Python 环境或任何第三方库即可运行。实测数据显示,其单次样本推理耗时仅约 2 微秒,速度比原生 Python 推理快达 336 倍,且生成的产物小巧至约 48 KB。
这款工具非常适合追求极致性能与便携性的后端工程师、嵌入式开发者以及需要大规模部署模型的算法团队。无论是资源受限的边缘设备,还是对延迟极其敏感的高并发服务场景,Timber 都能提供稳定高效的解决方案。其独特的亮点在于“一行命令完成加载与服务”,内置兼容 Ollama 的 HTTP 服务器,支持从本地文件或远程 URL 直接下载、编译并发布模型 API,极大地简化了从实验到生产的部署流程,让高性能推理变得触手可及。
使用场景
某金融科技公司的高频反欺诈团队需要在毫秒级内对每笔交易进行风险评分,当前系统基于 Python 运行 XGBoost 模型,但在流量高峰期常出现延迟抖动。
没有 timber 时
- 推理延迟高且不稳定:Python 解释器开销大,单次预测耗时约 600 微秒,高并发下 GC(垃圾回收)导致延迟毛刺,影响用户体验。
- 部署依赖复杂:生产环境必须安装特定版本的 Python、XGBoost 库及各类底层依赖,容器镜像体积庞大,启动缓慢。
- 资源利用率低:为维持低延迟,不得不过度配置 CPU 资源,导致服务器成本居高不下。
- 跨语言调用困难:核心交易引擎由 C++ 编写,通过 subprocess 或 RPC 调用 Python 服务增加了架构复杂度和故障点。
使用 timber 后
- 极致性能提升:timber 将模型编译为原生 C99 代码,单次预测仅需约 2 微秒,速度提升 336 倍,彻底消除延迟抖动。
- 零依赖独立运行:生成的推理产物仅为 48KB 的二进制文件,无需任何运行时环境,可直接嵌入现有 C++ 服务或作为独立微服务运行。
- 大幅降低成本:极高的吞吐量使得单台服务器可处理的请求量翻倍,显著减少了所需的计算节点数量。
- 架构简化统一:支持通过一条命令直接启动兼容 Ollama 的 HTTP 服务,或与 C++ 主程序静态链接,消除了跨语言调用的网络开销。
timber 通过将传统机器学习模型转化为原生机器码,让高频交易场景下的实时推理实现了微秒级响应与极简部署的完美平衡。
运行环境要求
- 未说明
不需要 GPU
未说明

快速开始
Timber
将经典机器学习模型编译为原生 C 语言代码,实现实时推理。
文档 · 变更日志 · PyPI · 技术论文 · 代理技能
Timber 接受经过训练的机器学习模型——XGBoost、LightGBM、scikit-learn、CatBoost、ONNX(树集成、线性模型、SVM)或 URDF 机器人描述——通过多遍优化编译器处理后,生成一个自包含的 C99 推理工件,且无运行时依赖。内置的 HTTP 服务器(兼容 Ollama API)允许您只需一条命令即可部署任何模型——无论是本地文件还是远程 URL。
单样本推理约 2 微秒 · 比 Python XGBoost 快约 336 倍 · 工件大小约 48 KB · 无运行时依赖
实际演示
只需指向任意 URL,Timber 就会自动下载、编译并部署,无需任何配置。
$ pip install timber-compiler
$ timber serve https://raw.githubusercontent.com/kossisoroyce/timber/main/examples/breast_cancer_model.json
✓ 下载 breast_cancer_model.json
✓ 检测到格式 xgboost
✓ 解析模型 50 棵树 · 30 个特征 · 二分类: logistic
✓ 优化 应用了 3/5 轮优化
✓ 生成 C99 169 行
✓ 编译二进制文件 47.9 KB
正在服务 breast_cancer_model
端点 http://localhost:11434
框架 xgboost · 50 棵树 · 30 个特征
POST http://localhost:11434/api/predict
GET http://localhost:11434/api/models
GET http://localhost:11434/api/health
立即预测:
$ curl -s http://localhost:11434/api/predict \
-H 'Content-Type: application/json' \
-d '{"model": "breast_cancer_model", "inputs": [[1.799e+01, 1.038e+01, 1.228e+02, 1.001e+03, 0.1184, 0.2776, 0.3001, 0.1471, 0.2419, 0.07871, 1.095, 0.9053, 8.589, 153.4, 0.006399, 0.04904, 0.05373, 0.01587, 0.03003, 0.006193, 2.538e+01, 1.733e+01, 1.846e+02, 2.019e+03, 0.1622, 0.6656, 0.7119, 0.2654, 0.4601, 0.1189]]}'
{"model": "breast_cancer_model", "outputs": [[0.9971]], "n_samples": 1}
或者从本地文件加载并按名称部署:
$ timber load fraud_model.json --name fraud-detector
$ timber serve fraud-detector
目录
适用人群
Timber 专为需要快速、可预测且可移植推理的团队打造:
- 欺诈与风险团队 — 在亚毫秒级交易路径中运行经典模型,无需 Python 开销
- 边缘与 IoT 部署 — 将约 48 KB 的 C 工件部署到网关、微控制器或 ARM Cortex-M 设备上
- 受监管行业 — 金融、医疗和汽车行业的团队,需要确定性、可审计的推理工件
- 平台与基础设施团队 — 完全消除关键路径中的 Python 模型推理栈
工作原理
┌─────────────────────────────────────────────────────────┐
│ timber load │
│ │
│ 模型文件 ──► 解析器 ──► Timber IR ──► 优化器│
│ (.json/.pkl/ (类型化 AST) (去除死叶 │
│ .txt/.onnx) 量化、分支排序) │
│ branch-sort) │
│ │ │
│ ▼ │
│ C99 生成器 │
│ │ │
│ ┌────────────────┼────────────────┐ │
│ ▼ ▼ ▼ │
│ model.c model.h model_data.c│
│ (推理) (公共 API) (树结构数据) │
│ │ │
│ └──► gcc / clang ──► model.so │
└─────────────────────────────────────────────────────────┘
│
▼
timber serve <name>
http://localhost:11434/api/predict
编译器流程:
- 解析 — 将原生模型格式读取为框架无关的 Timber IR
- 优化 — 去除死叶节点、阈值量化、常量特征折叠、分支排序
- 生成 — 生成确定性、可移植的 C99 代码,无动态内存分配且无递归调用
- 编译 — 使用
gcc/clang生成可通过ctypes加载的共享库 - 部署 — 兼容 Ollama 的 HTTP API 包装二进制文件,便于直接集成
快速入门
pip install timber-compiler
直接从 URL 提供任何模型——无需预先下载步骤:
timber serve https://yourhost.com/models/fraud_model.json
或者加载本地模型并按名称提供服务:
timber load fraud_model.json --name fraud-detector
timber serve fraud-detector
预测:
curl -s http://localhost:11434/api/predict \
-H "Content-Type: application/json" \
-d '{"model": "fraud-detector", "inputs": [[1.2, 0.4, 3.1, 0.9]]}'
{"model": "fraud-detector", "outputs": [[0.031]], "latency_us": 1.8}
就是这样。 无需配置模型服务器,也无需在关键路径中使用 Python 运行时。
或者从 URDF 文件提供机器人的正运动学:
timber serve robot.urdf
curl -s http://localhost:11434/api/predict \
-H "Content-Type: application/json" \
-d '{"model": "robot", "inputs": [[0.1, 0.2, 0.3, -0.4, 0.5, -0.6, 0.7]]}'
{"model": "robot", "outputs": [[0.082, -0.982, 0.170, 0.310, 0.959, 0.031, -0.283, 0.053, 0.272, 0.187, 0.944, 1.180, 0.0, 0.0, 0.0, 1.0]], "latency_us": 65.0}
支持的格式
| 框架 | 文件格式 | 备注 |
|---|---|---|
| XGBoost | .json |
所有目标;多分类、二分类、回归;XGBoost 3.1+ 的每类 base_score |
| LightGBM | .txt, .model, .lgb |
所有目标,包括多分类 |
| scikit-learn | .pkl, .pickle |
GradientBoostingClassifier/Regressor、RandomForest、ExtraTrees、DecisionTree、Pipeline |
| ONNX | .onnx |
TreeEnsembleClassifier/Regressor、LinearClassifier/Regressor、SVMClassifier/Regressor、Normalizer、Scaler |
| CatBoost | .json |
JSON 导出(save_model(..., format='json')) |
| URDF | .urdf |
机器人描述 → 正运动学;输出 4×4 齐次变换;输入为关节角度 |
性能
基准测试在 Apple M2 Pro · 16 GB 内存 · macOS 上运行,使用 XGBoost 二分类器,50 棵树,最大深度 4,30 个特征(sklearn
breast_cancer数据集),先预热 1,000 次迭代,再进行 10,000 次计时迭代。
| 运行时 | 单样本延迟 | 吞吐量 | 相比 Python 的加速倍数 |
|---|---|---|---|
| Timber(原生 C) | ~2 µs | ~500,000 / 秒 | 336× |
| ONNX Runtime | ~80–150 µs | ~10,000 / 秒 | ~5× |
| Treelite(编译后) | ~10–30 µs | ~50,000 / 秒 | ~20× |
| Python XGBoost | ~670 µs | ~1,500 / 秒 | 1×(基准) |
| Python scikit-learn | ~900 µs | ~1,100 / 秒 | 0.7× |
延迟是 进程内 的(不是 HTTP 往返)。网络开销会根据你的堆栈增加约 50–200 µs。
重现这些数据
python benchmarks/run_benchmarks.py --output benchmarks/results.json
python benchmarks/render_table.py --input benchmarks/results.json
完整的方法论、硬件采集脚本以及可选的 ONNX Runtime / Treelite / lleaves 对比,请参阅 benchmarks/。
运行时比较
| Timber | Python 服务 | ONNX Runtime | Treelite | lleaves | |
|---|---|---|---|---|---|
| 延迟 | ~2 µs | 数百 µs–ms | ~100 µs | ~10–30 µs | ~50 µs |
| 运行时依赖 | 无 | Python + 框架 | ONNX Runtime 库 | Treelite 运行时 | Python + LightGBM |
| 工件大小 | ~48 KB | 50–200+ MB 进程 | MB 级别 | MB 规模 | Python 环境 |
| 格式 | 5 种(树模型 + 线性模型 + SVM) | 各框架专用 | 仅 ONNX | GBDT | 仅 LightGBM |
| C 导出 | 是(C99) | 否 | 否 | 是 | 否 |
| LLVM IR 导出 | 是 | 否 | 否 | 否 | 否 |
| 边缘/嵌入式 | 是(Cortex-M4/M33、RISC-V) | 否 | 部分支持 | 部分支持 | 否 |
| MISRA-C 输出 | 是 | 否 | 否 | 否 | 否 |
| 差分隐私 | 是 | 否 | 否 | 否 | 否 |
API 参考
Timber 的服务器默认在 http://localhost:11434 上暴露一个 与 Ollama 兼容的 REST API。
| 端点 | 方法 | 请求体 / 参数 | 描述 |
|---|---|---|---|
/api/predict |
POST | {"model": str, "inputs": [[float]]} |
运行推理 |
/api/generate |
POST | 与 /api/predict 相同 |
Ollama 别名 |
/api/models |
GET | — | 列出所有已加载模型 |
/api/model/:name |
GET | — | 模型元数据及架构 |
/api/health |
GET | — | 健康检查 |
示例——批量推理:
curl -s http://localhost:11434/api/predict \
-H "Content-Type: application/json" \
-d '{
"model": "fraud-detector",
"inputs": [
[1.2, 0.4, 3.1, 0.9],
[0.1, 2.3, 1.0, 4.4]
]
}'
CLI 参考
timber load <path> --name <name> 编译并注册模型
timber serve <name> [--port N] 启动推理服务器
timber list 列出已注册模型
timber inspect <name> 显示模型 IR 摘要和架构
timber validate <name> 对源模型进行数值验证
timber bench <name> 基准测试延迟和吞吐量
timber pull <url> --name <name> 从 URL 下载并编译
timber remove <name> 从注册表中移除模型
示例
可运行的端到端示例位于 examples/:
python examples/quickstart_xgboost.py # 训练、编译并进行基准测试
python examples/quickstart_lightgbm.py
python examples/quickstart_sklearn.py
每个脚本都会训练一个模型,将其保存,然后运行 timber load,最后将预测结果与原始框架进行验证。
局限性
- ONNX — 支持
TreeEnsemble、LinearClassifier/Regressor、SVMClassifier/Regressor、Normalizer、Scaler;其他算子(如神经网络层)暂不支持。 - CatBoost — 需要 JSON 导出(
save_model(..., format='json'));不支持原生二进制格式。 - scikit-learn — 主要估计器和
Pipeline包装器受支持;不常见的自定义估计器可能需要自定义前端。 - Pickle — 请遵循标准的 pickle 安全规范;仅从可信来源加载工件。
- XGBoost — 主要支持 JSON 模型格式;不支持二进制 booster 格式。
- LLVM IR — 目前以文本形式(
.ll)输出;需要本地安装 LLVM/Clang 才能从中生成原生代码。 - MISRA-C — 内置合规性检查器覆盖了与生成代码最相关的规则;它不能替代经过认证的静态分析工具。
路线图
| 状态 | 项目 |
|---|---|
| ✅ | XGBoost、LightGBM、scikit-learn、CatBoost、ONNX 前端 |
| ✅ | 多遍 IR 优化器(死节点消除、量化、分支排序、缩放器融合) |
| ✅ | 支持 WebAssembly 目标的 C99 代码生成器 |
| ✅ | 兼容 Ollama 的多工作线程 FastAPI HTTP 推理服务器 |
| ✅ | 使用 OIDC 可信发布机制的 PyPI 打包 |
| ✅ | ONNX Linear/SVM/Normalizer/Scaler 运算符支持 |
| ✅ | ARM Cortex-M4/M33 和 RISC-V rv32imf/rv64gc 嵌入式部署配置文件 |
| ✅ | 符合 MISRA-C:2012 标准的输出模式,并内置合规性检查工具 |
| ✅ | 具有可配置目标三元组的 LLVM IR 后端 |
| ✅ | 差分隐私(拉普拉斯 + 高斯)推理模式 |
| ✅ | 更丰富的 bench 报告:P50/P95/P99/P999、CV%、JSON + HTML 输出 |
| 🔄 | 远程模型注册表(从托管模型库中使用 timber pull 下载模型) |
| 🔲 | 神经网络运算符支持(MLPClassifier) |
| 🔲 | ONNX 导出路径(Timber IR → ONNX) |
| 🔲 | Rust 后端代码生成器 |
开发
git clone https://github.com/kossisoroyce/timber.git
cd timber
pip install -e ".[dev]"
pytest tests/ -v # 436 个测试用例
ruff check timber/ # 代码风格检查
测试套件涵盖:解析器(sklearn、ONNX、XGBoost、LightGBM、CatBoost)、IR 层(序列化、深拷贝、所有阶段类型)、优化器 pass(正确性、幂等性、流水线融合数学)、C99/WASM/MISRA-C/LLVM IR 代码生成器(编译与数值精度)、差分隐私(统计正确性、所有数据类型)以及完整的端到端流水线。
完整开发指南请参阅 CONTRIBUTING.md。
引用
如果您在研究或生产中使用 Timber,请引用随附的技术论文:
@misc{royce2026timber,
title = {Timber: 将经典机器学习模型编译为原生推理二进制文件},
author = {Kossiso Royce},
year = {2026},
howpublished = {GitHub 仓库和技术论文},
institution = {Electricsheep Africa},
url = {https://github.com/kossisoroyce/timber}
}
完整论文可在 paper/timber_paper.pdf 获取。
社区与治理
- 贡献指南:
CONTRIBUTING.md - 行为准则:
CODE_OF_CONDUCT.md - 安全策略:
SECURITY.md - 变更日志:
CHANGELOG.md
如遇问题或有功能需求,请 提交 issue。如有疑问,欢迎 发起讨论。
支持本项目
Timber 由 Electricsheep Africa 开发并维护。如果 Timber 能为您的团队节省工程时间,请考虑支持其持续开发:
我们也在构建一个托管的编译模型库——如果您有高性能模型希望贡献,欢迎 联系我们。
许可证
Apache-2.0 — 完整许可文本请参阅 LICENSE。
版本历史
v0.5.02026/03/13v0.4.02026/03/04v0.2.02026/03/03相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
gemini-cli
gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器