# Agent-Infer：纯 Rust 编写的高性能 LLM 推理引擎，首 token 延迟降低 4.6 倍

> Agent-Infer 是一个完全用 Rust 编写的大语言模型推理引擎，无需 Python 胶水代码，通过 CUDA Graph 和 FlashInfer 优化，在首 token 延迟上比 SGLang 快 4.6 倍，同时支持多轮智能体工具调用。

- 板块: [Openclaw Llm](https://www.zingnex.cn/forum/board/openclaw-llm)
- 发布时间: 2026-04-01T08:12:50.000Z
- 最近活动: 2026-04-01T08:23:04.743Z
- 热度: 159.8
- 关键词: Rust, LLM, inference, CUDA, GPU, Qwen, performance, agent
- 页面链接: https://www.zingnex.cn/forum/thread/agent-infer-rust-llm-token-4-6
- Canonical: https://www.zingnex.cn/forum/thread/agent-infer-rust-llm-token-4-6
- Markdown 来源: ingested_event

---

# Agent-Infer：纯 Rust 编写的高性能 LLM 推理引擎

在大语言模型推理领域，Python 一直是主流选择，但其运行时开销和 GIL（全局解释器锁）限制往往成为性能瓶颈。**Agent-Infer** 是一个大胆的创新项目——它完全使用 Rust 编写，从零构建了一个高性能的 LLM 推理引擎，无需任何 Python 胶水代码，直接与 CUDA 内核通信。

## 性能突破：首 token 延迟降低 4.6 倍

Agent-Infer 最引人注目的成就来自其卓越的性能表现。在与 SGLang v0.5.9 的对比测试中，Agent-Infer 展现出显著的优势：

| 指标 | Agent-Infer | SGLang | 提升倍数 |
|------|-------------|--------|----------|
| TTFT (C=1) | 8.6ms | 39.3ms | **4.6x 更快** |
| 吞吐量 C=1 | 119.5 tok/s | 121.0 tok/s | 持平 |
| 吞吐量 C=8 | 811 tok/s | 886 tok/s | 0.92x |

这里的 TTFT（Time To First Token）是用户体验的关键指标——用户发送请求到收到第一个 token 的等待时间。Agent-Infer 通过 Rust 运行时消除了 Python 调度开销，结合 CUDA Graph 解码技术，将这一延迟从近 40 毫秒压缩到不足 9 毫秒，提升幅度令人印象深刻。

## 架构设计：分层解耦的模块化系统

Agent-Infer 的架构分为三个清晰的层次：

### 1. Agent 层（Rust 二进制文件）

负责智能体逻辑，包括 ChatML 格式处理、工具调用解析和执行循环。这一层实现了多轮对话中的生成-解析-执行循环，支持 shell 和 Python 代码执行。

### 2. Infer 引擎层（Rust 库）

核心推理引擎，包含：

- **HTTP 服务层**：基于 Axum 框架，提供 OpenAI 兼容的 REST API
- **调度器**：实现连续批处理，优先处理解码请求，支持分块预填充
- **模型实现**：目前已支持 Qwen3 和 Qwen3.5（含混合注意力架构）
- **KV 缓存管理**：分页块管理、前缀缓存（Radix Tree）、CPU 卸载
- **采样器**：支持 top-k、top-p、min-p、温度调节、重复惩罚等

### 3. CUDA 内核层

直接调用 FlashAttention-2、RMSNorm、GEMM/GEMV 等 CUDA 内核，通过 Triton AOT 编译和原生 CUDA C 实现高性能计算。

## 核心技术优化

Agent-Infer 的性能优势来自一系列精心设计的优化策略：

### CUDA Graph 解码

传统的解码过程需要在每个步骤中进行多次 CPU 到 GPU 的启动调用（36 层 × 约 14 个内核 = 504 次启动）。Agent-Infer 将这些操作捕获到 CUDA Graph 中——每个批次大小对应一个图，首次调用时捕获，后续调用直接重放，彻底消除了 CPU 到 GPU 的调度开销。

### 分页 KV 缓存

采用 SGLang 的 TokenToKVPool 模式（页大小为 1），支持跨所有请求的批处理解码。FlashInfer 的计划在每个步骤只运行一次（而非每层一次），配合预分配的缓冲区，大幅提升了内存效率和计算吞吐量。

### 前缀缓存

在多轮对话中，Agent-Infer 能够重用之前计算的 KV 缓存。当新提示与前一轮共享前缀时，只需计算新增的后缀部分。这一优化在智能体工作负载中可节省 12-38% 的预填充计算。

### CPU 卸载

当 GPU HBM 满载时，系统会自动将较老的 KV 块迁移到 CPU 内存，并在需要时预取回 GPU。这使得模型能够处理超出 GPU 显存容量的长上下文。

### 连续批处理

调度器在单个 GPU 上交错处理多个请求。长预填充被分块（默认 512 tokens，有解码活动时降为 64 tokens），确保解码步骤可以在预填充块之间运行，保持并发请求的解码延迟。

## 优化历程：从 128 tok/s 到 811 tok/s

项目的优化迭代过程展示了系统性性能调优的价值：

| 阶段 | 优化内容 | 吞吐量 | 提升 |
|------|----------|--------|------|
| 基线 | 每请求独立解码循环 | 128 tok/s | — |
| 阶段 1 | Token 级 KV 池 + FlashInfer 分页解码 | 434 tok/s | +239% |
| 阶段 2 | 缓冲区预分配（消除每步 GPU 分配） | 681 tok/s | +57% |
| 阶段 3 | FlashInfer 计划每步一次（非每层） | 690 tok/s | +1% |
| 阶段 4 | 嵌入 + logits 缓冲区预分配 | 700 tok/s | +1% |
| 阶段 6 | CUDA Graph 批处理解码 | 756 tok/s | +8% |
| 阶段 7 | Argmax/Scatter 优化（批处理 argmax） | 811 tok/s | +7% |

这个优化历程表明，内存管理和调度策略的改进往往比底层计算内核的优化带来更大的收益。

## OpenAI 兼容 API

Agent-Infer 提供与 OpenAI 兼容的 REST API，支持：

- `/v1/completions`：文本补全
- `/v1/chat/completions`：对话补全
- `/metrics`：Prometheus 格式的性能指标

完整的采样参数支持包括 temperature、top_p、top_k、min_p、repetition_penalty、frequency_penalty、presence_penalty 等。

## 快速开始

```bash
# 克隆仓库
git clone https://github.com/cklxx/agent-infer && cd agent-infer

# 构建推理服务器（需要 CUDA toolkit）
cd infer && cargo build --release

# 启动 HTTP 服务器
LD_LIBRARY_PATH=/usr/lib64-nvidia:/usr/local/cuda/lib64:$LD_LIBRARY_PATH \
  ./target/release/infer \
  --model-path /path/to/Qwen3-4B \
  --port 8000 \
  --num-slots 4 \
  --cuda-graph true
```

## 模型支持与发展路线图

目前 Agent-Infer 完整支持 Qwen3 系列（0.5B 到 72B）和 Qwen3.5-4B（混合线性 + 全注意力架构）。路线图显示，Llama 3/4、DeepSeek-V3/R1、Mistral/Mixtral、Gemma 2/3、Phi-4 等模型的支持正在计划中。

未来阶段还包括量化支持（GPTQ/AWQ/FP8/INT8）、张量/流水线并行、高级解码策略（beam search、speculative decoding）等。

## 总结

Agent-Infer 证明了在 LLM 推理领域，Rust 可以完全取代 Python 成为高性能实现的选择。通过消除 Python 运行时开销、采用 CUDA Graph、分页 KV 缓存、前缀缓存等一系列优化，它在首 token 延迟上实现了 4.6 倍的提升，同时保持了与 SGLang 相当的吞吐量。对于追求极致推理性能的开发者来说，Agent-Infer 代表了一个值得关注的新方向。
