用 Voxtral Mini 在 Rust 中构建实时语音识别
引言
2026 年,人工智能领域仍然被大型、黑盒云模型主导。 一些社区驱动的项目开始通过提供完全开源的实时推理来弥合这一差距,推理可以在笔记本电脑甚至浏览器标签页上运行。 Voxtral Mini 4B Realtime 项目就是最近的一个例子。它完全用 Rust 实现了 Mistral 的 Voxtral Mini 模型,使用 Burn ML 框架,并同时提供了本地命令行接口(CLI)以及可在 WebGPU 上运行的 WebAssembly(WASM)包。
本文将向你介绍关键概念、架构、基准测试以及在本地或浏览器中运行模型的步骤。
引擎:Voxtral Mini 4B Realtime
- 模型类型:语音转文字,因果编码器/解码器架构。
- 权重:4B 参数(约 9 GB SafeTensors)或 2.5 GB Q4‑GGUF 量化分片。
- 实现:纯 Rust + Burn ML。Burn crate 在 CubeCL 之上提供 JIT 风格的张量操作,可目标 Vulkan、Metal 或 WebGPU。
- 功能:
- 使用 wgpu(默认)实现 GPU 加速
- 原生分词器(Tekken)或兼容 WASM
- 配合 clap / indicatif 的 CLI 进度条
- 与 HuggingFace Hub 集成下载权重
- 使用 wasm‑pack 进行 WASM 编译,包含实时演示
Architecture 概要
音频 16kHz 单声道 → Mel‑spec (B,128,T)
↓
因果编码器 (32 层,1280 维,750 词窗口)
↓
卷积下采样 → 重塑 [B,T/16,5120]
↓
适配器 (3072 维)
↓
自回归解码器 (26 层,3072 维,GQA)
↓
Token ID → 文本
编码器生成 64 词的潜在表示块,而解码器维护 KV 缓存并在每个时间步发出一个词。自定义 WGSL 计算着色器将去量化与矩阵乘法融合,Q4‑GGUF 解码速度比朴素 f32 方案快 4 倍。
绩效快照
仓库自带一套基准测试,以下是在 16 核 NVIDIA DGX‑Spark 上的结果:
| 路径 | 编码(ms) | 解码(ms) | RTF | Tokens/秒 | 内存 |
|---|---|---|---|---|---|
| Q4 GGUF 本机 | 1 021 | 5 578 | 0.416 | 19.4 | 703 MB |
| F32 本机 | 887 | 23 689 | 1.543 | 4.6 | 9.2 GB |
| Q4 GGUF WASM (浏览器) | – | – | ~14 | ~0.5 | (浏览器) |
RTF 0.416 表示转录完成时间不到音频时长的一半——足够用于实时聊天或呼叫中心。Q4 方案同样小于 3 GB,能轻松部署到客户端。
Quick Start – 本地 CLI
- 安装 Rust 与 Cargo 并按需安装其它依赖:
curl https://sh.rustup.rs -sSf | sh # 若未安装 Rust sudo apt-get install libgl1-mesa-dev libvulkan-dev # 供 wgpu 使用 - 通过 HuggingFace Hub 下载权重(约 9 GB):
uv run --with huggingface_hub \ hf download mistralai/Voxtral-Mini-4B-Realtime-2602 \ --local-dir models/voxtral - 执行转录:
cargo run --release --features \"wgpu,cli,hub\" --bin voxtral-transcribe -- \ --audio audio.wav --model models/voxtral - 对于 Q4 量化路径(约 2.5 GB):
cargo run --release --features \"wgpu,cli,hub\" --bin voxtral-transcribe -- \ --audio audio.wav --gguf models/voxtral-q4.gguf --tokenizer models/voxtral/tekken.json
Quick Start – 浏览器 Demo (WASM + WebGPU)
- 安装构建工具(
rustup target add wasm32-unknown-unknown、npm i -g wasm-pack bun)。 - 编译 WASM 包:
wasm-pack build --target web --no-default-features --features wasm - 生成临时 HTTPS 证书(WebGPU 需要安全上下文):
openssl req -x509 -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 \ -keyout /tmp/voxtral-key.pem -out /tmp/voxtral-cert.pem \ -days 7 -nodes -subj \"/CN=localhost\" - 本地启动服务:
bun serve.mjs - 访问
https://localhost:8443,接受证书后点击 Load from Server。页面会流式加载 2.5 GB 模型分片,随后你可以使用麦克风录音或上传.wav文件。 - 也可以直接打开托管在 HuggingFace Space(https://huggingface.co/spaces/TrevorJS/voxtral-mini-realtime)的浏览器,以跳过手动配置。
常见问题与解决方案
- 左侧填充问题:原版
mistral-common对前 32 个静音词进行填充,无法满足 Q4 解码器的需求。该项目将填充长度提高到 76 个词(对应 38 个解码位置)。补丁位于src/audio/pad.rs。 - 内存预算:浏览器端受限于 2 GB ArrayBuffer,需将 GGUF 文件切分为 512 MB 块。可以使用
split -b 512m脚本生成。 - 工作组限制:WebGPU 每次调度最多 256 个工作组。仓库已修补
cubecl-wgpu,限制 reduce kernel 的大小。 - GPU 支持:系统需支持 Vulkan、Metal 或 WebGPU。若缺失,CI 将跳过 GPU 强度测试。
扩展项目
仓库旨在供实验使用:
| 领域 | 开始方式 |
|---|---|
| 添加新量化方案 | Fork gguf 模块,实现新的 Dequant trait |
| 替换编码器 | 修改 src/models/…/encoder.rs,重新基准测试 |
| 部署为服务器 | 将 CLI 逻辑封装到 Actix‑web 或 Axum,新增 HTTP 接口 |
| 集成更多分词器 | 将 C 版 tekken 扩展替换为纯 Rust 的 tokenizer |
结论
Voxtral Mini 4B Realtime 用 Rust 实现,展示了低延迟、高精度的语音识别完全可在客户端(甚至浏览器)完成。只需 2.5 GB 的量化模型,你即可获得 0.4 的实时因子,超越大多数商业 API,且保持 100 % 开源。无论你是在构建视频聊天助手、免提转录工具,还是教育演示,本项目都提供了坚实、完善的文档基础,助你起步。
祝你编码愉快,愿你的 token 始终高速、音频永远干净!
原创文章:
查看原文