reason · 01多轮不变慢。
coding agent 每一轮都把整段对话重发一遍。ARLE 把上一轮的 KV 留在加速器上,前缀页经 radix cache 跨请求共享,每轮只 prefill 新增的 token。MacBook 上 12 轮 agent 形状的对话:每轮 180 ms,同一份权重上 mlx-lm 是 249 ms —— 实测,不是推算。
Claude Code、opencode、aider:每一轮都把整段对话重发一遍。ARLE 让 KV cache 跨轮常驻,每轮只 prefill 新增的部分 —— 第 20 轮和第 2 轮一样快。
$ arle serve --backend metal --model-path mlx-community/Qwen3.6-35B-A3B-4bitserving on http://127.0.0.1:8000 · /v1/messages · /v1/chat/completions $ ANTHROPIC_BASE_URL=http://localhost:8000 ANTHROPIC_API_KEY=local claude# turn 1: cold prefill of the system promptprefix-lookup prompt=4850 licensed_blocks=0# turn 2 … turn 12: only the new tokens prefillprefix-attach matched=8640 restored=8640 committed=8651
多数本地服务器是围着单条 prompt 设计的。agent 会话是一个循环:同一段系统提示加上越来越长的工具历史,重复二十遍。ARLE 围着这个循环设计。
coding agent 每一轮都把整段对话重发一遍。ARLE 把上一轮的 KV 留在加速器上,前缀页经 radix cache 跨请求共享,每轮只 prefill 新增的 token。MacBook 上 12 轮 agent 形状的对话:每轮 180 ms,同一份权重上 mlx-lm 是 249 ms —— 实测,不是推算。
Anthropic /v1/messages:流式事件、tool_use、extended thinking 块;OpenAI /v1/chat/completions:流式与工具调用。Claude Code 只需要一个环境变量;任何 model 字串都会路由到当前服务的模型。
从 HTTP 层到调度器到 KV cache 全部是 Rust。Metal 走 MLX C++ bridge,NVIDIA 走 FlashMLA、DeepGEMM、DeepEP 加 CUDA graph。brew install、一行 curl 或一个 Docker 镜像 —— 从 clone 到第一个 token 只要几分钟。
这一页的每个数字都能在 docs/experience/wins/ 找到带日期的快照:命令、环境、以及它击败的那条臂。推测解码逐比特对齐 greedy;恢复的前缀用 needle 阶梯对照冷 prefill 做门控。
一套运行时、三个表面、两个后端。serving、本地 agent、OPD 训练跑同一份 Rust 与模型代码;依赖严格向下流动,infer-core 不依赖任何后端。权威拓扑见 docs/codebase-map.md。
src/main.rs InferenceEngine · LoadedInferenceEngine · backends plug in here Engine<E,K> · scheduler · radix prefix cache BackendExecutor + KvPool seam · ForwardPlan IR — host-only 每个平台一行能跑的命令,然后给 agent 一个环境变量。预编译 tarball 与 SHA 见每次 GitHub Release;curl 安装脚本会先校验 SHA256 再解压。
$ brew install cklxx/tap/arle $ arle serve --backend metal --model-path mlx-community/Qwen3.6-35B-A3B-4bit
$ curl -fsSL https://github.com/acupof-ai/arle/releases/latest/download/install.sh \ | sh $ arle --doctor
$ docker run --rm --gpus all -p 8000:8000 \
-v $PWD/models:/models:ro ghcr.io/acupof-ai/arle:latest \
serve --backend cuda --model-path /models/Qwen3.6-27B $ ANTHROPIC_BASE_URL=http://localhost:8000 ANTHROPIC_API_KEY=local claude $ export OPENAI_BASE_URL=http://localhost:8000/v1 OPENAI_API_KEY=local # opencode、aider、openai SDK —— 任何说 OpenAI API 的工具
直接来自 docs/experience/wins/ 与 benchmarks/ 的带日期快照。解码与 prefill 分开报告,没有端到端混合数。
metal · M4 Pro 48 GB · Qwen3.5-0.8B-MLX-4bit · 12 轮 agent 对话,4.8K token 系统提示,每轮追加约 350 token · 两台服务器权重与请求字节完全一致
scripts/bench_multiturn_ttft.py --turns 12 --warmup 完整快照 ↗ metal · M4 Pro 48 GB · Qwen3.6-35B-A3B-4bit(MoE,约 3B 激活)· 512-in / 128-out · 单流 · 6 次中位数
arle serve --backend metal --model-path mlx-community/Qwen3.6-35B-A3B-4bit 完整快照 ↗ cuda · 1×H20 · Qwen3.6-27B-FP8 + 块草稿推测解码(DSpark)· 32K token 多轮 agent 提示 · 单请求解码
arle serve --backend cuda --spec-type dspark · bench-agent-32k 完整快照 ↗ cuda · 1×H20 · Qwen3.8-27B-NVFP4 对 Qwen3.6-27B-FP8 · 同一二进制两条臂背靠背 · 权重不存两份
arle serve --backend cuda --model-path unsloth/Qwen3.8-27B-NVFP4 完整快照 ↗ cuda · 4×H20 TP=4 · DeepSeek-V4-Flash · c=1 解码主体按 slot 捕获成一张 CUDA graph · 32K agent 提示
arle serve --backend cuda --tensor-parallel-size 4 完整快照 ↗ train · On-Policy Distillation · teacher 就是 serving 引擎,student 在自己的 rollout 上训练 · Qwen3.5-4B 与 Qwen3.5-27B
arle train opd 完整快照 ↗ 两种后端,一份运行时契约。权威矩阵见 docs/support-matrix.md。
| 后端 | 稳定度 | 系统 / 硬件 | 模型 | 量化 | API |
|---|---|---|---|---|---|
cuda | stable | Linux + NVIDIA Ampere+ · 1 到 8 卡(TP / EP) | Qwen3.5 / 3.6 / 3.8 · DeepSeek-V4-Flash · GLM-5.2 | BF16 · FP8 · NVFP4 · W4AFP8 · INT8/FP8 分页 KV | Anthropic + OpenAI |
metal | beta | Apple Silicon(M1+) | Qwen3.5 / 3.6 MoE(canonical)· Qwen3 dense · DeepSeek-OCR | MLX 4-bit · BF16 | Anthropic + OpenAI |
cpu | dev only | 便携冒烟 | Qwen3.5(小尺寸) | BF16 | Anthropic + OpenAI |
没有排队,没有委员会 —— 一个周末的 PR 就能改动头条数字,战线全部公开。从 CONTRIBUTING.md 开始。
Star 是小项目唯一的指标。如果 ARLE 让你的 agent 循环比原来快了,留一颗。它决定这件事能得到多少时间。
★ Star acupof-ai/arle仓库一览。每条都指回 acupof-ai/arle 的标准路径。