- Apple Silicon向けのMLXフレームワークでWhisper largeモデルを動かし、10分の音声文字起こしにおけるノートPCと高性能GPUの差を比較
- 標準条件ではM1 Pro MacBookが216秒、RTX 4090が186秒で、RTX 4090が約30秒、約16%高速だった
- RTX 4090でinsanely-fast-whisperを使うとwhisper-large-v3の文字起こしは8秒まで短縮され、モデルや実装の最適化がハードウェア比較を大きく変え得る
- macOS MPSでの実行は4分23秒かかり、M2 Ultra 76 GPUコアとM3 Max 40 GPUコアはM1より大幅に速く、互いにはほぼ同等の速度だった
- 消費電力の増加はRTX 4090搭載PCがアイドル時比で**+242W**、M1 Pro MacBookが**+38W**で、全体の結果は厳密なベンチマークではなく、MLXの性能感を見るための比較
MLXでWhisperベンチマークを実行
- AppleがApple Silicon向け機械学習フレームワークMLXを公開し、同梱されたサンプルのうちWhisperがベンチマークに使われた
- 既存のWhisperベンチマーク用リポジトリに新しいファイルを追加し、すでにダウンロード済みの
whisper largeモデルで同じ音声ファイルを文字起こしした
- 実行コードは
transcribe(audio=audio_file, model='large')を呼び出した後、開始時刻と終了時刻の差で全体時間を測定する
- 返される結果はセグメントのリストで、各セグメントには
avg_logprob、compression_ratio、start、end、text、tokensなどのフィールドが含まれる
- この結果構造は、RTX 4090でPython Whisperを実行した場合と同じ
基本結果: M1 ProとRTX 4090
- 10分の音声ファイル基準で、M1 Pro + MLXの実行時間は
0:03:36.296329、約216秒
- 同じファイルでのNvidia RTX 4090の実行時間は
0:03:06.707770、約186秒と測定された
- RTX 4090はM1 Proより約30秒速く、比率では約**16%**高速という水準
- 測定中はM1 Proのすべてのグラフィックコアが完全に使用され、他のプログラムを終了し、デスクトップ背景などの要素も無効化した
- ただし、Nvidia最適化モデルを使うとRTX 4090の文字起こし時間は8秒まで短縮される
テストハードウェア
-
MacBook
- 14インチMacBook M1 Pro、2021年モデル
- CPUコア8個: 性能コア6個、効率コア2個
- RAM 32GB
- GPUコア16個
-
PC
- Intel Core i7-12700KF 8×3.60GHz
- RAM 2×32GB 3200MHz DDR4 Kingston FURY Beast
- Kingston KC3000 PCIe 4.0 NVMe 1000GB SSD
- 読み込み7000MB/s、書き込み6000MB/s
- GeForce RTX 4090 24GB GDDR6X、Palit RTX 4090 GameRock OmniBlack
insanely-fast-whisperが変えた比較
- Hacker Newsのコメントで、同じ10分のファイルをinsanely-fast-whisperとRTX 4090で実行した結果が示された
- whisper-large-v3基準の文字起こしは8秒未満で終わり、文字起こし開始前のモデル読み込み時間まで含めると15秒だった
- その後、直接実行した
insanely-fast-whisper --file-name audio.mp3 --flash Trueコマンドでも8秒での文字起こしが確認された
- 出力ログにはFlash Attention 2関連の警告とGPUへの移動関連の警告があったが、文字起こしは完了し、
output.jsonが生成された
- macOSでは
--device mps --batch-size 4で実行でき、同じファイルの文字起こしに0:04:23かかった
M2 UltraとM3 Maxの更新
- Ivanが同じ音声ファイルをM2 Ultra 76 GPUコアとM3 Max 40 GPUコアで実行した
- 両システムはM1 Proよりはるかに高速な結果を出し、互いには同程度の速度だった
- 比較値は100%正確なベンチマークと見るのは難しく、他のプロセス、読み込み時間、コールドスタートとウォームスタートが結果に影響し得る
消費電力と測定上の限界
- アイドル状態とGPU実行状態の消費電力差はShellyプラグで測定した
- PCはRTX 4090実行時、アイドル時比で**+242W**増加した
- MacBookはM1 GPU 16コア実行時、アイドル時比で**+38W**増加した
- 消費電力測定も100%正確な数値というより、傾向を示す参考値に近い
- テスト全体は科学的な測定というより、MLXフレームワークがどの程度の性能を出せるのかを大まかに示す比較
実際の利用背景
- テスト目的はポッドキャスト検索エンジンpodpodgogo.comの運営と関連している
- 数万本のポッドキャストエピソードを文字起こしし、全文検索を可能にし、一部のデータマイニングも行っている
- 更新履歴
- 12月11日: ハードウェア仕様とモデル読み込みなしの追加テストを追加
- 12月12日: RTX 4090を最速のコンシューマー向けグラフィックカードとして整理し、M2/M3の数値を更新
- 12月13日: Hacker NewsでNvidia最適化Whisper関連のコメントを確認
1件のコメント
Hacker Newsの意見
Whisperを4090で極端に非効率に動かしたのでない限り、この結果は疑わしく見える
3090とM1 Max 32GBを持っている。Whisperは試していないが、LlamaとStable Diffusionの推論性能差は大きく、特にStable DiffusionでSDXLは3090が約9秒、M1 Maxは1分10秒ほどかかった
2つのモデル構造には共通点がほとんどなく、Stable DiffusionはCLIPの事前学習済みテキストエンコーダを使ってはいるが、それもエンコーダ・デコーダ型Transformerとはかなり違う
さらにこの記事は新しいApple MLXフレームワークを扱っているので、LlamaやStable Diffusionのテストではおそらく使っていなかった可能性が高い
ハードウェアの限界なのかMLXライブラリの最適化不足なのかは分からないが、これほど目立つユースケースを単に無視したとは考えにくい
畳み込みが高い精度とずっと大きなタイル集合を使うため、変換全体がGPUに収まらないときに高コストなコンテキスト切り替えが必要になる、という方がもっともらしい
なので同じソフトウェアと同じモデルでない限り、Whisper性能に関する直感は非常に慎重であるべき
たとえ同じでも、プラットフォーム別の最適化が望まれる点を考えると、比較の意味はなお限定的
これはOpenAI Whisperリポジトリを使っているように見える
きちんと比較するなら、4090上のfaster-whisperやinsanely-fast-whisperとMLXを比べるべき
faster-whisperは逐次実行で、insanely-fast-whisperは音声を30秒区間にまとめて処理する
本番環境でWhisperを使っているが、前の区間のテキストを含めると品質が良くなると考えているのでfaster-whisperを使っている
おおよそfaster-whisperはOpenAI/whisperより通常4〜5倍速く、insanely-fast-whisperはさらにfaster-whisperより3〜4倍速くなり得る
ここのモデルは量子化モデルではなく、まだfp16に見えるので、さらに速くなる余地がありそう
追記: まだCPU推論をサポートしていないと見た。追加されれば面白そう
5に設定したときの速度比較も知りたいし、理想的にはそのパラメータをユーザーに公開すべき
音質が非常に悪い音声を扱っていて文字起こし品質が重要なので、品質を犠牲にした速度比較は自分にはあまり意味がない
この記事の要点は、新しく公開されたApple MLXを活用していて、コードがApple専用の最適化を使っている点
https://news.ycombinator.com/item?id=38539153
Whisperにはもっと速い実装がある
追記: 釣られたついでに、記事で使われた10分のファイルをダウンロードして4090でinsanely-fast-whisperを走らせてみた。インストールはコマンド2つで済んだ
whisper-large-v3ではファイルの文字起こしは8秒未満で終わり、文字起こし開始前のモデル読み込み時間まで含めると15秒だった
この追加時間は当然、音声の長さには依存しない
すると4090はAppleの最高性能より6〜12倍速いことになる
すでに挿せるゲーミングPCがあるならM2 Ultraよりずっと安いし、4090搭載の完成品PCを新しく買ってもまだ安い
驚くことではないが、ハイエンドMacを持つ人たちが自分の機材は何でもうまくこなせると信じたがる希望的観測が多く見える
Apple Mシリーズチップは非常に印象的で大容量RAMも素晴らしいが、高性能機械学習ではNvidiaと競争するのは難しい
MacがあればそのMacの性能を使うし、ゲーミングPCがあればそのPCの性能を使う
両方あっても、結局は毎日使う機材で動くAIを使う可能性が高い
insanely-fast-whisperと比べるとどうなのか気になる: https://github.com/Vaibhavs10/insanely-fast-whisper
最適化を使わなければ1対1の比較ができるという点は分かるが、その最適化がMLXに移植されていないなら、やはり4090を使うほうがよさそう
最近MLXを見てみたが、Macでは確実に人気が出そうだし、Swiftバインディングが出ればiOSでもそうなりそう: https://github.com/ml-explore/mlx/issues/15
ただ現時点ではC++20のコンパイル問題が妨げになっている可能性もある
どんなハードウェアがベンチマークで勝っても、人気モデルならたいてい非常に手作業で最適化されたCUDA実装が出てきて、他を圧倒する
まれな例外もあるにはあるが、たとえばPyTorchがtorch.compileに力を入れたおかげで、AMD上のGPT-Fastが特定の狭いユースケースでうまく動く程度
Apple Siliconではそうした例外は一つも思い浮かばない
元のベンチマークのどちらにも軽く勝ちそうだが、バッチサイズは24よりずっと小さくする必要がありそう
最近の基準ではWhisperがリアルタイムの3〜4倍だとかなり遅い部類なので、このベンチマークはCPUでも勝てる可能性がある
これが他のモデルにも当てはまるのか、それともWhisperの逐次的な特性と整数演算のために選ばれたのか気になる
https://github.com/ml-explore/mlx-examples/tree/main/stable_...を見ると、そういう方向を示唆しているように見える
4コア時代には問題なかったが、現代的なコア数では筋が通らない
GPUのメモリ拡張性は、コンシューマ向けでもはるかに優れている
Mac M1でWhisperを実行するのは簡単だが、デフォルトではMLXを使わない
MLXを使うには何をインストールして設定すればいいのか調べるのに1〜2時間かかり、正体不明のPythonエラーやTorchエラーが出た
結局あきらめてGPU付きのVMを借りたところ、数分でWhisperを実行できた
MLXは使っていないがMetalは使っている
Xの作業に対して絶対的にどの選択肢が最高かという議論は多いだろうが、これほど低い消費電力でこれだけの性能が出る点が気に入っている
代わりにこのWhisper派生リポジトリを使えば、ほとんどのGPUで1時間の音声も1分以下で文字起こしされる: https://github.com/Vaibhavs10/insanely-fast-whisper
L4でctranslate2のバッチサイズを4のように低くしても、flash attention 2を使ったA100を除けば、そちらのベンチマークをすべて上回る
faster-whisperにバッチモードが結局入らなかったのは残念で、そのせいで人々がctranslate2を気軽に試せていないように思う
https://github.com/SYSTRAN/faster-whisperのようなリポジトリは、なぜ元の実装より速いのかすぐ理解できるし、他のものも量子化精度を下げることで速くなる一方、結果が悪くなるという形
だがこれは、なぜ速いのかが特に明確ではない
はるかに速いことを考えると、なおさら気になる
AppleのVision Proを考えると特に興味深い
モデルを電力効率よく動かせることは、ノートPCでは誰にとっても重要とは限らないが、すでに多くの電力を消費するヘッドセットには大きな利点
助けを求めたい
良いオープンソースの文字起こしと話者分離アプリやワークフローはあるだろうか?
https://github.com/thomasmol/cog-whisper-diarizationとhttps://about.transcribee.net/を見たが、どちらもクラッシュするなど、うまく動かなかった
MP3をWhisperが処理できる断片に分けてから、APIに一つずつ送って文字起こしさせる
今のところ期待どおりに動いていて、Pythonコード数行で済む