Hotdry.
ai-systems

使用 Swift 在 Apple Silicon 上实现 PersonaPlex 全双工语音翻译:实时双向音频处理、低延迟 CoreML 推理与 Metal 加速

基于 NVIDIA PersonaPlex-7B 模型,在 Apple Silicon 上用 Swift/MLX 构建全双工 speech-to-speech 系统,提供低延迟双向音频管道、CoreML 优化参数与 Metal 性能调优清单。

PersonaPlex 是 NVIDIA 推出的 7B 参数全双工 speech-to-speech 模型,支持边听边说,实现自然对话中的打断、重叠与回声响应。其核心采用 Moshi 风格的双流 Transformer 架构,结合 Mimi 24kHz 语音编解码器与 Helium 语言骨干,端到端处理连续音频流,输出同时包含文本令牌和音频令牌。

在 Apple Silicon 上部署此类模型,需要充分利用 Metal GPU 加速与统一内存架构。本文聚焦单一技术点:用 Swift + MLX 构建实时双向音频处理管道,实现低延迟全双工推理。不同于传统 ASR → LLM → TTS 链路,PersonaPlex 单模型处理整个流程,社区已提供 4-bit 量化版本(约 5.3 GB),适配 M 系列芯片。

核心架构与双向音频管道

全双工的关键是并发监听与生成:用户音频增量编码输入模型,同时模型生成输出音频,支持~240ms 中断延迟与~170ms 首 token 时间。Swift 实现中,使用 AVFoundation 处理麦克风 / 扬声器 I/O,Silero VAD(32ms 块)检测语音起始。

实时双向管道清单:

  1. 输入流:AVCaptureSession 捕获麦克风,16kHz 预采样 → Silero VAD(CoreML 版,~0.27ms / 块) → 缓冲语音段(阈值:onset 0.6, offset 0.4)。
  2. Mimi 编码:24kHz 转码,ConvNet + Transformer 编码为令牌序列。
  3. 双流推理:MLX Swift 加载 PersonaPlex-7B(temporal Transformer + depformer),autoregressive 生成文本 / 音频令牌。KV-cache 增长控制在 4K 令牌(长对话 < 16GB 统一内存)。
  4. Mimi 解码:Transformer + ConvNet 转回 24kHz PCM,AVAudioEngine 流式播放。
  5. 输出流:支持中断 —— 用户语音检测后,模型状态更新,暂停生成。

管道延迟预算:VAD 2ms + 编码 50ms + 推理 68ms/step (M2 Max RTF 0.94) + 解码 30ms,总 E2E < 200ms。

CoreML 低延迟推理优化

虽 MLX 是默认(Metal shaders 最大吞吐),CoreML 适合多模型并发(如 VAD + 增强)。ivan-digital/qwen3-asr-swift 仓库提供混合后端。

CoreML 参数调优:

  • 量化:INT4/FP16,模型大小~315MB (Parakeet 示例),推理 RTF 0.03 (warm)。
  • 编译标志mlmodelc --optimize-for "Apple Neural Engine" --quantize INT4 生成 .mlpackage。
  • 批处理:maxBatchSize=4,短音频 RTF 提升 1.5x。
  • Neural Engine 优先:小模型 (VAD / 嵌入) 用 CoreML 释放 GPU 给 7B 主模型。
  • 阈值:minUptime=0.5s 避免噪声假阳,maxSpeechDuration=10s 切分长段。

示例代码(Swift):

import PersonaPlex
import SpeechVAD
import CoreML  // 混合

let vad = try await SileroVADModel.fromPretrained(engine: .coreml)
let plex = try await PersonaPlexModel.fromPretrained()  // MLX 4-bit

// 流式管道
let stream = plex.respondStream(userAudio: micBuffer, voice: .NATM0)
for try await chunk in stream {
    audioEngine.play(chunk.samples, at: 24000)
}

Metal 加速与性能调优

Apple Silicon 的 Metal Performance Shaders (MPS) 是 MLX 后端,利用统一内存零拷贝。

Metal 加速清单:

  1. MPS 配置MLXBackend.metalLibraryPath = "/path/to/custom.metallib"(xcodebuild 构建)。
  2. 量化精度:4-bit temporal/depformer,RTF 0.87 (68ms/step),M3 Max >1.2 RTF。
  3. KV-cache 管理:maxTokens=4096,evictRatio=0.2(长对话回滚)。
  4. 采样参数:audio-temp=0.6, repetition-penalty=1.05, topK=50,低温确保流畅。
  5. 并发:DispatchQueue.global (qos: .userInitiated),Metal 队列并行编码 / 解码。
  6. 监控点:Instruments > Metal System Trace,目标 GPU utilization 80-95%,内存 <80%(M2 64GB 极限 20min 对话)。

风险与回滚:

  • 内存溢出:KV-cache >6GB 时降级单向模式(监听暂停生成)。
  • 延迟峰值:>300ms 切换低精度 FP16,回滚 temp=0.4。
  • 兼容:macOS 14+, M1+,Xcode 15+。

基准(M2 Max 64GB):20s 输入 → 36s 输出 in 31s,RTF 0.94。PersonaPlex 支持 18 语音预设(NATF0-NATM4 等)+ 系统提示(customerService/teacher),零样本克隆几秒语音提示。

落地 CLI 示例(qwen3-asr-swift):

brew install speech
audio respond --input mic --voice NATM0 --system-prompt focused

输出 JSON:{"latency": 180ms, "transcript": "...", "audio": "response.wav"}。

此实现证明 7B 模型在消费级 Apple Silicon 上可达商用级全双工性能,适用于本地 AI 助手 / 翻译。扩展:集成 DeepFilterNet3 噪声抑制(CoreML RTF 0.12)提升鲁棒性。

资料来源

(正文约 950 字)

查看归档