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を選ぶのか?

  1. 依存関係ゼロ: PyTorchなし、Pythonなし、GPUさえ不要。
  2. 極限のパフォーマンス: Apple SiliconのNEON命令とAVX2最適化を活用し、M1 Macは1分の音声をわずか1秒で文字起こし。
  3. クロスプラットフォーム: 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ファイルとして出力(-ovtt WebVTT、-osrt SRT字幕もサポート)。

上級編:リアルタイム音声入力

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. ポッドキャスト字幕: 1時間のポッドキャストがM2 Macで1-2分で文字起こし。
  2. 会議メモ: streamモードと組み合わせて、完全プライベートな会議文字起こしアシスタントを構築。
  3. エッジコンピューティング: Raspberry Piの監視デバイスに音声コマンド認識を追加。

Whisper.cppは「エッジAI」の可能性を再定義しました。すべてのAIに高価なH100が必要なわけではない—優れたコード最適化も同様に生産的であることを示しています。