Performance
我得承认:我对性能有点执着。
不是那种“过早优化”式执着,我知道那条规则。但 Reso 的核心价值就是实时转写。一旦卡顿,它就失去意义。
我第一次把 Whisper.cpp 跑在 Apple Silicon 上时很兴奋。它能跑了!但我一看指标:
0.12x 实时速度。
翻译一下:8 秒音频要 66 秒才能转写完。
这显然不算实时。
第一个突破:CoreML
Whisper 由两部分组成:encoder(重)和 decoder(相对轻)。
真正压垮 CPU 的是 encoder。而 Apple Silicon 正好有 Neural Engine 来干这类事。
我找到了一个 CoreML 编译版的 Whisper encoder,接入并不复杂:
- CPU encoder:0.12x
- CoreML encoder:3.2x
好很多,但还不够。我想要 10x。
第二个突破:编译优化
真正离谱的地方在这里。
Whisper.cpp 是 C++ 写的。你在 Xcode 里构建 Swift 应用时,Swift 代码会被激进优化,但 C++ 依赖常常被当作第三方库,优化很有限。
后来我发现可以给 C++ 构建传自定义 compiler flags:
``bash``
-Xcc -O3 # Max optimization level
-Xcc -flto=thin # Link-time optimization
LTO(Link-Time Optimization) 是关键。它会跨文件分析整个编译结果并内联函数,减少很多额外开销。
加上这些参数后:
- Xcode 默认构建:3.2x
- 优化后构建:10.6x
我当时差点从椅子上站起来。
知识成本
这些信息没有明显文档告诉你。我是靠翻 GitHub issues、试 compiler flags、做几十次 profile 挖出来的。前后折腾了两周。
但结果值得:Reso 的转写已经比你开口说话还快。在 M2 Pro 上,8 秒音频大约 0.75 秒处理完。
为什么重要
速度不只是一个 feature,它会改变你如何使用工具。
当转写几乎即时,你就不再思考“它快不快”。你只负责说,文本自动出现。
这就是“你在使用一个工具”和“你几乎忘记它存在”之间的差别。
最好的工具会消失在体验里。
这不是营销,是我们自己踩过的坑。