Whisper.cpp チュートリアル:CPUで動く究極の音声認識
OpenAI Whisperの高性能C++移植版。MacやRaspberry Piでリアルタイム音声テキスト変換を実現。
OpenAI Whisperが音声認識の王冠の宝石なら、Whisper.cppはその宝石を取り外してみんなのキーホルダーにセットしたものです。
Whisperの公式実装はPyTorchに依存しており—非常にVRAMを消費し遅いです。Georgi Gerganovのwhisper.cppは完全にC/C++で書き直され、依存関係ゼロで、iPhoneやRaspberry Piでもスムーズに動作します。
なぜWhisper.cppを選ぶのか?
- 依存関係ゼロ: PyTorchなし、Pythonなし、GPUさえ不要。
- 極限のパフォーマンス: Apple SiliconのNEON命令とAVX2最適化を活用し、M1 Macは1分の音声をわずか1秒で文字起こし。
- クロスプラットフォーム: Linux、Mac、Windows、iOS、Android、WebAssembly…思いつくものなら何でも動作。
インストールガイド(macOS/Linux)
1. リポジトリをクローン
git clone https://github.com/ggerganov/whisper.cpp.git
cd whisper.cpp
2. モデルをダウンロード
Whisper.cppは量子化されたggmlモデル形式を使用。スクリプトが自動的にダウンロードと変換を行います。
# 英語ベースモデルをダウンロード(~140MB)
bash ./models/download-ggml-model.sh base.en
# または多言語版をダウンロード(日本語対応)
bash ./models/download-ggml-model.sh small
3. コンパイル
make
以上です。コンパイル後、ディレクトリにmain実行ファイルが表示されます。
ハンズオン:音声からテキストへ
音声を含むtest.wavファイルを準備(16kHzサンプルレート必須)。
# 文字起こしを実行
./main -m models/ggml-small.bin -f test.wav -l ja
パラメータ説明:
-m: モデルファイルを指定。-f: 入力音声ファイル。-l ja: 言語を日本語に指定(指定しないと自動検出、指定した方が速い)。-otxt: txtファイルとして出力(-ovttWebVTT、-osrtSRT字幕もサポート)。
上級編:リアルタイム音声入力
Whisper.cppはマイクを使用したリアルタイム音声入力用のstreamツールを提供します。
# streamツールをコンパイル
make stream
# リアルタイム音声入力を開始
./stream -m models/ggml-small.bin -l ja --step 500 --length 5000
マイクに向かって話すと、テキストがリアルタイムでターミナルに表示されます!
技術的詳細:なぜこんなに速いのか?
Whisper.cppの魔法はGGMLテンソルライブラリ(llama.cppのコアでもある)にあります。
- 4ビット/8ビット量子化: モデルサイズとメモリ帯域幅要件を劇的に削減。
- SIMD最適化: ARM NEONとx86 AVX2用の手書きアセンブリレベル最適化。
- ハイブリッドコンピューティング: Apple Siliconでは、CPUとNeural Engineを混合で使用。
ユースケース
- ポッドキャスト字幕: 1時間のポッドキャストがM2 Macで1-2分で文字起こし。
- 会議メモ: streamモードと組み合わせて、完全プライベートな会議文字起こしアシスタントを構築。
- エッジコンピューティング: Raspberry Piの監視デバイスに音声コマンド認識を追加。
Whisper.cppは「エッジAI」の可能性を再定義しました。すべてのAIに高価なH100が必要なわけではない—優れたコード最適化も同様に生産的であることを示しています。