楼层: 首页/ 软件技术/ Rust + AI 全栈/ 性能优化与问题排查
09

性能优化与问题排查

Performance & Debugging

Rust 已经够快了,但 AI 推理的性能无底洞——模型大小、量化等级、批处理、KV Cache,每个都是数量级的差距。这一章把常用手段和排查思路讲清楚。

推理性能优化四板斧

模型量化 → Q4_K_M
FP16 → Q4_K_M,内存降 4 倍,速度更快(带宽瓶颈)。
这是性价比最高的优化,没有之一。
连续批处理 → continuous batching
不等所有请求凑齐,来一个插一个,跑完的替换。吞吐量翻几倍。
vLLM 的核心创新,candle 也支持。
KV Cache 复用 → prefix caching
系统提示词部分所有请求共享,不重复算。
长 system prompt 场景省 30%+。
GPU 加速 → CUDA / Metal
candle 开 cuda feature,tch 用 CUDA build。
大模型 CPU 跑不动,GPU 是必需品。

后端性能优化

  • Release profile:opt-level=3 + lto=true + codegen-units=1。
  • 连接池:数据库连接复用,别每次新建。
  • 缓存:热点数据放 Redis,别每次查库。
  • 异步并发:IO 密集用 tokio,CPU 密集用 rayon。
  • 减少 clone:字符串和结构体少 clone,用引用和 Arc。

常见问题排查

问题排查思路
编译错误:trait bound 不满足读编译器给的 help,把缺失的 trait 加到 derive 或 where 子句。
编译错误:生命周期错误99% 是 spawn 出去的 future 不满足 'static,把数据 clone 或 move 进去。
运行时 panic设置 RUST_BACKTRACE=1 跑一次,看栈回溯。
推理慢先看有没有开 CUDA,再看量化等级,再看 batch size。
显存不足降量化等级(Q4→Q3),减小 max_seq_len,或者换 CPU。
输出乱码检查 tokenizer 和模型是否匹配,chat template 是否正确。

内存优化

  • 减小结构体:用 repr(C) 控制布局,用更小的整数类型(u8 代替 u64 能用就用)。
  • 对象复用:热路径上别反复 new Vec,用 Vec::clear() 复用缓冲区。
  • 减少 clone:Rust 的 clone 是深拷贝,热路径上用引用或 Arc。
  • 弱引用:缓存里用 Weak 防止循环引用导致内存泄漏。
记
本章小结

① 推理优化四板斧:量化、连续批处理、KV Cache、GPU。

② 后端优化:Release profile + 连接池 + 缓存 + 减少 clone。

③ 排查心法:RUST_BACKTRACE=1 看栈,criterion 做基准,flamegraph 找瓶颈。