You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Hi — opening this to check whether int8 quantization of PocketTTS is something that's been considered or evaluated for the FluidAudio CoreML port. I'm running into a memory budget issue on iPhone 13 Pro Max that the current fp32 release makes tight, and want to understand whether the path forward is selective int8, full int8, or something else entirely.
Context
Building a voice-first iOS app that runs Gemma 4 E2B (~1.5–2 GB resident via LiteRT-LM) alongside on-device TTS. iPhone 13 Pro Max has ~3 GB usable for third-party apps after iOS overhead. Current PocketTTS at ~650 MB on disk pushes us close to jetsam pressure when both engines are warm.
Two upstream signals suggest int8 might be viable:
Add int8 dynamic quantization support kyutai-labs/pocket-tts#147 (merged Apr 2026) — added quantize=True via torch.ao.quantization.quantize_dynamic on the FlowLM transformer's attention + FFN linear layers only, leaving flow_net and the Mimi VAE decoder at fp32. WER delta within noise (−0.022 ±0.024 for default config), 48% runtime memory reduction. Validated across 7 configs × 10 runs each.
KevinAHM/pocket-tts-onnx ships int8 ONNX exports of all four required models including mimi_decoder_int8.onnx and flow_lm_flow_int8.onnx, totaling ~120 MB. Existence proof that some int8 path produces audibly viable output, though I haven't verified ONNX RT vs CoreML quantization schemes produce equivalent quality.
I'm aware of the comment in PocketTtsModelStore.swift:39-43 explaining why ANE fp16 was rejected — Mimi decoder feedback-loop precision artifacts. The Kyutai PR's recipe explicitly avoids quantizing Mimi for the same reason, so a "selective int8" variant matching that recipe should sidestep the documented concern.
Questions
Has int8 been evaluated and rejected for reasons beyond the Mimi feedback loop? I.e. were there issues with cond_step or flow_decoder at int8 that aren't captured in the current ANE-fp16 comment?
Is there a PocketTTS variant lineage already planned that would address size? Noticed the repo has cond_step_v2.mlmodelc / cond_step_v3.mlmodelc alongside the fp32 default — wondering if any of those are precision experiments, or strictly graph-shape variants.
Would FluidAudio be receptive to a selective-int8 variant contribution following the Kyutai recipe (int8 weights on flowlm_step attention + FFN linears only, everything else fp32)? Estimated ~46% on-disk reduction on flowlm_step.mlpackage — total package ~650 MB → ~430 MB. Conservative target, no new precision risk beyond what Kyutai already validated.
Or is the right path full PyTorch re-conversion to match ONNX-export size more aggressively (~120 MB total)? My read is that's a much bigger lift — re-tracing autoregressive models with KV cache state, numerical equivalence validation, ABI-matching the existing Swift glue. Probably weeks of work where selective int8 is days. Wanted to check before assuming.
Thanks for the work on FluidAudio, the PocketTTS sessions API in particular is a nice fit for streaming voice assistants.
Hi — opening this to check whether int8 quantization of PocketTTS is something that's been considered or evaluated for the FluidAudio CoreML port. I'm running into a memory budget issue on iPhone 13 Pro Max that the current fp32 release makes tight, and want to understand whether the path forward is selective int8, full int8, or something else entirely.
Context
Building a voice-first iOS app that runs Gemma 4 E2B (~1.5–2 GB resident via LiteRT-LM) alongside on-device TTS. iPhone 13 Pro Max has ~3 GB usable for third-party apps after iOS overhead. Current PocketTTS at ~650 MB on disk pushes us close to jetsam pressure when both engines are warm.
Two upstream signals suggest int8 might be viable:
Add int8 dynamic quantization support kyutai-labs/pocket-tts#147 (merged Apr 2026) — added quantize=True via torch.ao.quantization.quantize_dynamic on the FlowLM transformer's attention + FFN linear layers only, leaving flow_net and the Mimi VAE decoder at fp32. WER delta within noise (−0.022 ±0.024 for default config), 48% runtime memory reduction. Validated across 7 configs × 10 runs each.
KevinAHM/pocket-tts-onnx ships int8 ONNX exports of all four required models including mimi_decoder_int8.onnx and flow_lm_flow_int8.onnx, totaling ~120 MB. Existence proof that some int8 path produces audibly viable output, though I haven't verified ONNX RT vs CoreML quantization schemes produce equivalent quality.
I'm aware of the comment in PocketTtsModelStore.swift:39-43 explaining why ANE fp16 was rejected — Mimi decoder feedback-loop precision artifacts. The Kyutai PR's recipe explicitly avoids quantizing Mimi for the same reason, so a "selective int8" variant matching that recipe should sidestep the documented concern.
Questions
Has int8 been evaluated and rejected for reasons beyond the Mimi feedback loop? I.e. were there issues with cond_step or flow_decoder at int8 that aren't captured in the current ANE-fp16 comment?
Is there a PocketTTS variant lineage already planned that would address size? Noticed the repo has cond_step_v2.mlmodelc / cond_step_v3.mlmodelc alongside the fp32 default — wondering if any of those are precision experiments, or strictly graph-shape variants.
Would FluidAudio be receptive to a selective-int8 variant contribution following the Kyutai recipe (int8 weights on flowlm_step attention + FFN linears only, everything else fp32)? Estimated ~46% on-disk reduction on flowlm_step.mlpackage — total package ~650 MB → ~430 MB. Conservative target, no new precision risk beyond what Kyutai already validated.
Or is the right path full PyTorch re-conversion to match ONNX-export size more aggressively (~120 MB total)? My read is that's a much bigger lift — re-tracing autoregressive models with KV cache state, numerical equivalence validation, ABI-matching the existing Swift glue. Probably weeks of work where selective int8 is days. Wanted to check before assuming.
Thanks for the work on FluidAudio, the PocketTTS sessions API in particular is a nice fit for streaming voice assistants.