本記事は、Apple Silicon搭載のMac mini(M2 Pro)を対象とする。GPUアクセラレーションにはMetalを用い、Core MLは使用しない構成である。macOSはSonoma 14以降、XcodeとCommand Line Toolsがインストールされているものとする。
まず、開発環境を確認する。
xcode-select --install
brew install cmake ffmpeg gitffmpeg は音声ファイルを16bit PCM WAVに変換するために必要である。
Whisper.cppの取得とモデルの準備
Whisper.cppはGitHub上で公開されているC++実装である。リポジトリを取得し、作業ディレクトリに移動する。
git clone https://github.com/ggml-org/whisper.cpp
cd whisper.cpp次に、OpenAIのWhisperモデルをGGML形式に変換したファイルをダウンロードする。今回は精度を最優先とし、large-v3 モデルを使用する。
./models/download-ggml-model.sh large-v3完了後、models/ggml-large-v3.bin が存在することを確認する。
Metal対応でビルドする
Apple GPUを活用するには、Metalバックエンドを有効にしてビルドする必要がある。
rm -rf build
cmake -B build -DGGML_METAL=1
cmake --build build -j --config Releaseこの設定で、GPU演算をMetal経由で行うようになる。ビルドが完了すると、build/bin/whisper-cli が生成される。
音声ファイルの変換
Whisper.cppは16bitモノラルのWAV形式を前提としているため、MP3など他の形式を使用する場合は事前に変換する。
ffmpeg -i input.mp3 -ar 16000 -ac 1 -c:a pcm_s16le test.wavこれにより、16kHz・モノラルのtest.wavが生成される。
文字起こしの実行
Metal対応ビルドでは、GPU利用は自動で行われるため追加オプションは不要である。
次のコマンドを実行する。
./build/bin/whisper-cli \
-m models/ggml-large-v3.bin \
-f test.wav \
--output-txt \
--threads 8処理中、ログに以下のような行が出力されればMetalが正しく有効になっている。
ggml_metal_device_init: GPU name: Apple M2 Pro
whisper_backend_init_gpu: using Metal backendMETAL = 1 が確認できれば、GPUアクセラレーションが動作している。結果は test.wav.txt として同ディレクトリに出力される。
補足:Core MLとの違い
Whisper.cppではMetalとCore MLを同時に使うことはできない。MetalはGPU(Apple GPU)を直接利用する低レベルAPIであり、Core MLはApple Neural Engine(ANE)を介した高レベル実行環境である。
まとめ
M2 Pro Mac mini上でのWhisper.cpp(large-v3)実行は、Metalバックエンドを有効にするだけでGPUが自動的に検出される。Metalを利用することで、CPU実行時と比べて2〜3倍程度の速度向上が期待できる。