Rust in Everything
基于 candle 0.11.0

性能与部署

logits 对上、生成对上、量化也做了(04 到 08),这一部分回答剩下的两个问题:搬过来以后跑多快,交付出去的东西长什么样。体积、冷启动和峰值内存的基本对比已经在什么时候选 candle里量过,这里不重复,只往下拆。

  1. 速度:203 个 token 的 prefill 和 128 步 decode,torch CPU(1 和 8 线程)、MPS(f32、f16)对 candle CPU(有无 accelerate)、Metal(f32、f16、bf16)、GGUF(Q8_0、Q4_K_M);CPU decode 慢在线程交接(RAYON_NUM_THREADS=1、Device::with_context 各快 21% 和 14%,合用 24%),CPU prefill 慢在 where_cond mask,Q4_K_M 慢在没有向量化的 Q5_0,MPS 的 decode 慢在 Python 一侧的调度。
  2. 部署:一个读 stdin、流式输出的最小服务;九种 release profile 的大小、构建时间和速度(只有 strip 值得开);otool -L 只有系统框架;Linux 上缺什么,交叉编译卡在 onig;权重放旁边、mmap 还是 include_bytes!。
flowchart TB
  model["SmolLM2 推理"] --> speed["速度"]
  model --> ship["部署"]
  speed --> cpu["CPU 线程 mask"]
  speed --> gpu["Metal 对 MPS"]
  speed --> q["GGUF 格式"]
  ship --> prof["release profile"]
  ship --> link["链接与平台"]
  ship --> w["权重怎么带"]

Metal 着色器的编译和计时方法见源码卷的 Metal 第一次运行要好几秒和 Metal 上计时几乎为零;CPU 上的几个线程池见源码卷的 CPU 后端。

💬 关联讨论

发起讨论
加载中...