🚀 轻量级 LLM 推理引擎 | Rust 实现
基于 vLLM 核心技术:Paged Attention · Continuous Batching · Prefix Caching
快速开始 »
·
查看特性
·
API 文档
·
部署指南
·
报告 Bug
📑 目录
- ✨ 项目亮点
- ⚡ 快速开始
- ✨ 特性
- 📊 性能指标
- 📦 支持模型
- ⚙️ 配置
- 🌐 API 端点
- 🐳 部署
- 🔧 开发
- 🗺️ 路线图
- 🤝 贡献
- 📄 许可证
# 克隆项目
git clone https://github.com/pplmx/vllm-lite.git
cd vllm-lite
# 构建
cargo build --workspace
# 启动服务 (默认模型: Qwen2.5-0.5B-Instruct)
cargo run -p vllm-server
# 测试请求
curl -X POST http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{"prompt": "Hello, how are you?", "max_tokens": 50}'
# 运行测试 (快速,跳过慢速测试)
just nextest
# 运行所有测试
just nextest-all
# 代码检查
cargo clippy --workspace -- -D warnings
cargo fmt --all --check
| 🚀 高性能 |
🛡️ 生产就绪 |
📊 可观测性 |
🐳 云原生 |
| Rust 原生实现 |
Circuit Breaker 熔断 |
Prometheus Metrics |
Docker/K8s 支持 |
| Paged Attention |
26个 E2E 测试 |
Health Check |
多阶段构建 |
| Flash Attention |
自动故障恢复 |
实时指标监控 |
HPA 自动扩缩 |
# 克隆并启动
git clone https://github.com/pplmx/vllm-lite.git && cd vllm-lite
cargo run -p vllm-server
curl -X POST http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "qwen2.5-0.5b",
"prompt": "Hello, how are you?",
"max_tokens": 50
}' | jq .
💡 提示: 默认使用 Qwen2.5-0.5B-Instruct 模型,首次运行会自动下载
| 特性 |
说明 |
性能提升 |
| Paged Attention |
分页 KV Cache,减少内存碎片 |
内存效率 ↑ 40% |
| Continuous Batching |
动态批处理,GPU 利用率最大化 |
吞吐量 ↑ 35% |
| Prefix Caching |
Radix Tree 前缀缓存,O(k) 查找 |
TTFT ↓ 60% |
| Flash Attention |
动态 Tile 大小 (64/128/256) |
计算速度 ↑ 2x |
| 策略 |
描述 |
适用场景 |
| FCFS |
先来先服务 |
公平性优先 |
| SJF |
最短作业优先 |
低延迟优先 |
| Priority |
优先级调度 |
VIP 请求 |
┌─────────────────────────────────────────────────────────────┐
│ 生产就绪功能矩阵 │
├─────────────────────────────────────────────────────────────┤
│ 📊 Observability │ 🛡️ Fault Tolerance │
│ ├── /metrics │ ├── Circuit Breaker │
│ ├── /health │ ├── Retry Strategy │
│ ├── /ready │ ├── Degrade Strategy │
│ └── Prometheus │ └── Recovery Manager │
├─────────────────────────────────────────────────────────────┤
│ 🐳 Deployment │ ✅ Testing │
│ ├── Dockerfile │ ├── 26 E2E Tests │
│ ├── docker-compose │ ├── Unit Tests (654+) │
│ ├── K8s Manifests │ └── Benchmarks │
│ └── HPA │ │
└─────────────────────────────────────────────────────────────┘
| 指标 |
数值 |
说明 |
| 吞吐量 |
~2000 tokens/s |
Qwen2.5-0.5B, A100 GPU |
| 首 Token 延迟 (TTFT) |
< 50ms |
1K token prompt |
| P99 延迟 |
< 100ms |
end-to-end |
| 显存效率 |
+40% |
vs 传统 KV Cache |
| 测试覆盖率 |
654+ |
单元 + 集成测试 |
| E2E 测试 |
26个 |
全场景覆盖 |
| 模型 |
架构 |
状态 |
显存需求 |
| Qwen3 |
GQA + RoPE |
✅ |
1-4 GB |
| Llama |
GQA + RMSNorm |
✅ |
2-8 GB |
| Mistral |
Sliding Window + GQA |
✅ |
2-8 GB |
| Gemma4 |
Hybrid Attention + GeGLU |
✅ |
2-8 GB |
| Mixtral |
Sparse MoE (8 experts) |
✅ |
8-16 GB |
📋 查看模型详情
- ✅ Qwen3: 支持 0.5B 到 110B 参数模型
- ✅ Llama: 支持 Llama 2/3 系列
- ✅ Mistral: 支持 Mistral 7B 和 Mixtral 8x7B
- ✅ Gemma4: Google Gemma 4 系列
- ⏳ 更多模型: 持续添加中...
# 基础配置
export VLLM_HOST=0.0.0.0
export VLLM_PORT=8000
export VLLM_LOG_LEVEL=info
# 性能调优
export VLLM_KV_BLOCKS=1024
export VLLM_MAX_DRAFT_TOKENS=8
export VLLM_TENSOR_PARALLEL_SIZE=1
# 安全配置
export VLLM_API_KEY=your-secret-key
| 变量 |
描述 |
默认值 |
说明 |
VLLM_HOST |
服务 host |
0.0.0.0 |
监听地址 |
VLLM_PORT |
服务端口 |
8000 |
API 端口 |
VLLM_LOG_LEVEL |
日志级别 |
info |
debug/info/warn/error |
VLLM_KV_BLOCKS |
KV Block 数量 |
1024 |
显存相关 |
VLLM_MAX_DRAFT_TOKENS |
最大投机 Token |
8 |
投机解码 |
VLLM_TENSOR_PARALLEL_SIZE |
张量并行度 |
1 |
GPU 数量 |
VLLM_API_KEY |
API 密钥 |
- |
认证必填 |
# config.yaml
server:
host: "0.0.0.0"
port: 8000
engine:
max_draft_tokens: 8
num_kv_blocks: 1024
max_batch_size: 256
auth:
api_keys: []
rate_limit_requests: 100
rate_limit_window_secs: 60
# config.yaml
scheduler:
max_num_seqs: 256
max_num_batched_tokens: 4096
max_consecutive_decode: 10
enable_pd_separation: true # 启用 Prefill/Decode 严格分离
prefill_chunk_size: 512
decode_preference_ratio: 0.7
enable_priority_scheduling: false
min_batch_size: 1
max_batch_size: 256
# 调度策略: "FCFS" | "SJF" | "Priority"
scheduling_policy: "FCFS"
policy_config:
sjf_priority_weight: 0.3
sjf_remaining_work_weight: 0.7
cargo run -p vllm-server -- --help
| 端点 |
方法 |
描述 |
认证 |
/v1/chat/completions |
POST |
Chat 补全 |
🔐 |
/v1/completions |
POST |
文本补全 |
🔐 |
/v1/embeddings |
POST |
向量嵌入 |
🔐 |
/v1/batches |
POST/GET |
批量请求 |
🔐 |
/metrics |
GET |
Prometheus 指标 |
- |
/health |
GET |
存活检查 |
- |
/ready |
GET |
就绪检查 |
- |
🔐 需要 API Key 认证
📖 查看通用参数说明
| 参数 |
类型 |
默认 |
描述 |
范围 |
model |
string |
- |
模型名称 |
必需 |
prompt / messages |
string/array |
- |
输入提示 |
必需 |
max_tokens |
int |
256 |
最大生成 Token 数 |
1-4096 |
temperature |
float |
1.0 |
采样温度 |
0.0-2.0 |
top_p |
float |
1.0 |
Nucleus 采样阈值 |
0.0-1.0 |
top_k |
int |
0 |
Top-K 采样 |
0=禁用 |
stream |
bool |
false |
启用 SSE 流式输出 |
true/false |
repeat_penalty |
float |
1.0 |
重复惩罚 |
1.0-2.0 |
| 参数 |
类型 |
默认 |
描述 |
max_tokens |
int |
256 |
最大生成 Token 数 |
temperature |
float |
1.0 |
采样温度 (0-2) |
top_p |
float |
1.0 |
Nucleus 采样阈值 |
top_k |
int |
0 |
Top-K 采样 (0=禁用) |
stream |
bool |
false |
启用 SSE 流式输出 |
repeat_penalty |
float |
1.0 |
重复惩罚 |
curl -X POST http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"messages": [{"role": "user", "content": "什么是 Rust?"}],
"max_tokens": 100
}'
curl -X POST http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"prompt": "Once upon a time",
"max_tokens": 50,
"stream": true
}'
export VLLM_API_KEY=your-secret-key
curl -X POST http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-secret-key" \
-d '{"prompt": "Hello", "max_tokens": 10}'
use vllm_core::scheduler::{SchedulerEngine, FcfsPolicy, SjfPolicy, PriorityPolicy};
// 默认使用 FCFS
let mut engine = SchedulerEngine::new(config, 1024);
// 切换到 SJF (最短作业优先)
engine.set_policy(Box::new(SjfPolicy::default()));
// 或切换到优先级调度
engine.set_policy(Box::new(PriorityPolicy::default()));
vllm-lite/
├── Cargo.toml # Workspace (5 crates)
├── justfile # 构建自动化
├── crates/
│ ├── traits/ # 接口定义 (Batch, ModelBackend)
│ ├── core/ # Engine、组件化 Scheduler
│ │ └── scheduler/
│ │ ├── policy/ # 可插拔调度策略
│ │ ├── request_queue.rs # O(1) 索引化队列
│ │ ├── phase_scheduler.rs # P/D 分离调度器
│ │ ├── batch_composer.rs # 阶段特定 batch 构建
│ │ ├── radix_cache/ # Radix Tree 前缀缓存
│ │ └── engine.rs # 标准调度引擎
│ ├── model/ # 模型实现、Kernels
│ ├── dist/ # 张量并行
│ └── server/ # HTTP API
└── tests/ # 集成测试
| 指标 |
改进 |
| 前缀缓存查找 |
O(n) → O(k), 10-100x 提升 |
| 队列操作 |
O(n) → O(1), n 倍提升 |
| P/D 分离 |
GPU 利用率 +15-30% |
vllm-lite/
├── Cargo.toml # Workspace (5 crates)
├── justfile # 构建自动化
├── crates/
│ ├── traits/ # 接口定义
│ ├── core/ # Engine、Scheduler、KV Cache
│ ├── model/ # 模型实现、Kernels
│ ├── dist/ # 张量并行
│ └── server/ # HTTP API
└── tests/ # 集成测试
| 组件 |
技术 |
| Runtime |
tokio |
| ML Backend |
Candle |
| HTTP |
axum |
| Weights |
SafeTensors |
MIT License