背景
OpenAIがwhisperという音声認識&文字起こししてくれるアプリケーションを公開しました。
openai/whisper: Robust Speech Recognition via Large-Scale Weak Supervision
無料だし、なかなかいい感じという噂を聞いて試してみました。
環境はDockerで作る
Dockerで環境を構築しました。
CPUでも動くようですが、文字起こしのスピードが遅いとの記事を読みました。なので、GPUを使用する構成にしています。使用しているのは、GTX 1650のグラフィックメモリが4GBのものです。
ベースイメージのPyTorch(パイトーチって読むの?)は以下のNVIDIAページを参考にしました。
PyTorch Release Notes :: NVIDIA Deep Learning Frameworks Documentation
最終的なDockerファイルは以下です。
|
|
Dockerイメージのbuildでつまづいたところ
Dockerイメージをbuildすると、以下のメッセージでbuildが停止するという事象がありました。ユーザ側の入力を求められるようなのですが、入力しても先に進まないのです。
|
|
以下の記事を参考にして、対応しました。
Fix: tzdata hangs during Docker image build | by Grigor Khachatryan | Medium
具体的には、Dockerファイルに以下のtimezone設定を追加しました。
|
|
Dockerのbuild、run、whisperを使う
実際に使用したコマンドです。
使いやすいようにwhisper_gpuというタグをつけてbuild。
|
|
runします。落とし上げが面倒なので--rm
オプションは必須です。また、execでアタッチしたいので、コンテナは--name whisper_gpu
で名前指定しています。
|
|
docker execでコンテナに入ります。
|
|
以下のコマンドで音声ファイルを文字起こし。--model
で学習量を指定しますが、何も書かないとデフォルトのsmall
が指定されます。
ちなみに、ffmpegを入れているので音声ファイルは*.m4a
もちゃんと読み取ってくれます。
|
|
なお、以下のように--model large
を指定すると2.87Gの学習をメモリに展開するようで、torch.cuda.OutOfMemoryError: CUDA out of memory.
というメッセージが出力されて終了します。ビデオカードのメモリが不足しているんだと予想して諦めてます。ちなみに、medium
でも同じメッセージで動きませんでした。
|
|
GPUの文字起こし時間
GPUを使用すると、30分の音声ファイルを文字起こしするのに約10分ぐらいです。
速い!この速度なら、十分かなと思います。
GPUが動いているのを感じる
文字起こししている最中はGPUが元気に動きます。ゲームをやらずに、動画のエンコードぐらいしか使っていない自分にはこんなにGPUが動いているのを初めて見ました。
nvidia-smiすると、温度も上昇しているし、ファンが「ウィーン」と音を立てて回りだすのがわかります。
Pythonが2.5GBぐらいのGPUのメモリを使用しているのがわかります。
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 520.61.05 Driver Version: 520.61.05 CUDA Version: 11.8 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 NVIDIA GeForce ... On | 00000000:01:00.0 Off | N/A |
| 54% 65C P2 64W / 75W | 2540MiB / 4096MiB | 96% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| 0 N/A N/A 2902 G /usr/lib/xorg/Xorg 15MiB |
| 0 N/A N/A 117856 C /usr/bin/python 2520MiB |
+-----------------------------------------------------------------------------+
比較のため、通常の穏やかなnvidia-smi
。FANは54%。
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 520.61.05 Driver Version: 520.61.05 CUDA Version: 11.8 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 NVIDIA GeForce ... On | 00000000:01:00.0 Off | N/A |
| 30% 34C P8 4W / 75W | 17MiB / 4096MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| 0 N/A N/A 2902 G /usr/lib/xorg/Xorg 15MiB |
+-----------------------------------------------------------------------------+
参考にした記事
OpenAI Whisper のコマンドオプション - Qiita