whisper.cpp v1.9.5 runs the encoder on Apple's Neural Engine, twice as fast as Core ML

2 hours ago

whisper.cpp v1.9.5 can run the Whisper encoder on the Apple Neural Engine through ANEForge, about twice as fast as Core ML. whisper-cli now exits with an error code when a file fails, and long recordings split across processors keep correct timestamps. Release notes: https://github.com/ggml-org/whisper.cpp/releases/tag/v1.9.5 ANEForge setup: https://github.com/ggml-org/whisper.cpp/blob/v1.9.5/README.md#aneforge-support Full diff: https://github.com/ggml-org/whisper.cpp/compare/v1.9.4...v1.9.5

Ask

Ask about this presentation

Answers are generated from this presentation.

Chapters

  1. 0:00whisper.cpp v1.9.5
  2. 0:16Twice as fast as Core ML
  3. 0:29whisper-cli exit codes
  4. 0:45Long-file timestamps
  5. 0:58Three more fixes
  6. 1:13ANEForge limits
Show transcript

whisper.cpp v1.9.5

whisper.cpp

whisper.cpp v1.9.5 runs the encoder on Apple’s Neural Engine

ANEForge, an optional backend that bypasses Core ML

README.md · ANEForge support

On an Apple Silicon Mac, whisper.cpp can now run the Whisper encoder directly on the Apple Neural Engine through ANEForge. It is opt-in, and with it switched off, whisper.cpp behaves exactly as before.

Twice as fast as Core ML

whisper.cpp

The encoder runs about twice as fast as Core ML

Core ML encoder
236.0 ms
ANEForge encoder
117.6 ms

One encoder pass, medium model, Apple Silicon

PR #3905 · whisper-bench, fp16 encoder

On the medium model, one encoder pass drops from about 240 milliseconds with Core ML to under 120. The gap holds from the tiny model up to medium, and the transcripts come out the same.

whisper-cli exit codes

whisper.cpp

whisper-cli now tells your scripts when a file fails

exit 0→exit 11
examples/cli/cli.cpp · PR #4080

whisper-cli used to exit with success even when an input file was missing, its audio couldn't be decoded, or the output couldn't be written. Now it finishes the batch and exits with code 11.

Long-file timestamps

whisper.cpp

Long recordings split across processors keep correct timestamps

beforesplit 1 - 00:-21:-44.-350
aftersplit 1 - 00:23:00.000
src/whisper.cpp · PR #4044

With the processors option on a long file, every timestamp past about 22 minutes could come out negative, mostly on Windows builds. An integer overflow caused it, and those timestamps are now correct.

Three more fixes

whisper.cpp

Cancelling, Docker and bad model files

  • +The abort callback now stops language auto-detection
  • +Vulkan Docker image: 1.75 GB down to 692 MB
  • +Malformed model files are rejected instead of crashing
src/whisper.cpp · .devops/main-vulkan.Dockerfile

Apps can now cancel a transcription while it is still detecting the language. The Vulkan Docker image drops from almost two gigabytes to under 700 megabytes, and a malformed model file now fails to load instead of crashing.

ANEForge limits

whisper.cpp

ANEForge speeds up the encoder only, on Apple Silicon

Setup: whisper.cpp README, ANEForge support
github.com/ggml-org/whisper.cpp
README.md · ANEForge support

The decoder is unchanged. You compile the encoder bundle on your own Mac, tied to its macOS build, and it relies on undocumented Apple interfaces that an update can change. The README's ANEForge section has the setup.