OpenAI の Whisper を試してみた

# 1. はじめに
Twitter を眺めていたら OpenAI がリリースした Whisper という音声認識テキスト化のモデルがすごいらしいとのこと。
https://openai.com/blog/whisper/

Github を見るとセットアップから利用も簡単そうだったので早速試してみました。
https://github.com/openai/whisper

# 2. セットアップ
Github から GPU 搭載の Ubuntu で試すのがよさそうと思い、Oracle Cloud 上で環境を構築。
Oracle Cloud 以外の方はスキップしてください。

## 2-1. インスタンスの作成
Shape は VM.GPU3.1 (V100 x1)で作成し、 Ubuntu 22.04 (Canonical-Ubuntu-22.04-2022.08.10-0) を指定。
ちなみに、今日現在、NVIDIA Driver がインストールされた Ubuntu イメージは配布されていないのでドライバーは以下の手順でインストールします。

インスタンス作成時の cloud-init スクリプトに以下を記述して作成する。
```
#cloud-config
drivers:
    nvidia:
        license-accepted: true
```

インスタンスが起動したら、ubuntu@<Public IP> で ssh 接続する。


`apt-cache search nvidia-utils` でインストールできるドライバ一覧を表示する。
```
$ apt-cache search nvidia-utils
nvidia-utils-390 - NVIDIA driver support binaries
nvidia-utils-418 - Transitional package for nvidia-utils-430
nvidia-utils-418-server - NVIDIA Server Driver support binaries
nvidia-utils-430 - Transitional package for nvidia-utils-440
nvidia-utils-435 - Transitional package for nvidia-utils-455
nvidia-utils-440 - Transitional package for nvidia-utils-450
nvidia-utils-440-server - Transitional package for nvidia-utils-450-server
nvidia-utils-450 - Transitional package for nvidia-utils-460
nvidia-utils-450-server - NVIDIA Server Driver support binaries
nvidia-utils-455 - Transitional package for nvidia-utils-460
nvidia-utils-460 - Transitional package for nvidia-utils-470
nvidia-utils-460-server - Transitional package for nvidia-utils-470-server
nvidia-utils-465 - Transitional package for nvidia-utils-470
nvidia-utils-470 - NVIDIA driver support binaries
nvidia-utils-470-server - NVIDIA Server Driver support binaries
nvidia-utils-495 - Transitional package for nvidia-utils-510
nvidia-utils-510 - NVIDIA driver support binaries
nvidia-utils-510-server - NVIDIA Server Driver support binaries
nvidia-utils-515 - NVIDIA driver support binaries
nvidia-utils-515-server - NVIDIA Server Driver support binaries
```

とりあえず、一番新しい以下をインストール。
```
sudo apt install -y nvidia-utils-515-server
```

インストールが完了したら reboot をする。
```
sudo reboot
```

reboot ができたら再接続して、`nvidia-smi` コマンドを実行してインストールができていることを確認する。
```
$ nvidia-smi
Sun Sep 25 15:03:24 2022
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 515.65.01    Driver Version: 515.65.01    CUDA Version: 11.7     |
|-------------------------------+----------------------+----------------------+
| 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  Tesla V100-SXM2...  Off  | 00000000:00:04.0 Off |                    0 |
| N/A   34C    P0    37W / 300W |      0MiB / 16384MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+
```


## 2-2. Whisper のセットアップ

事前に必要な以下をインストールする。
```
sudo apt update && sudo apt install ffmpeg
sudo apt install python3-pip
```

Whisper をインストールする
```
pip install git+https://github.com/openai/whisper.git
```

これで `/home/ubuntu/.local/bin` にインストールされる。以下のように PATH を通しておく。
```
export PATH=$PATH:/home/ubuntu/.local/bin
```

# 3. 試す
では実際に試してみます。
適当な音声ファイルがなかったので、 Zoom で自分の音声をレコーディングして出力された m4a ファイルを食わせます。

実際に私がしゃべった内容:
> 2022年9月25日 今日は家族で多摩動物園に車で行ってきました。
> 秋晴れでとても気持ちよく、かわいい動物がたくさん見れてみんな大満足でした。


早速変換してみます。モデルとして、tiny, base, small, medium, laarge があるそうで、速度と精度に違いがある。
まずは Small モデルで実行してみます。
実行方法は簡単で、 whisper コマンドの引数にファイル名と言語、モデルのサイズを指定するだけです。
```
ubuntu@reserved-gpu-whisper-681393:~$ whisper audio1401572826.m4a --language Japanese --model small
100%|███████████████████████████████████████| 461M/461M [00:40<00:00, 12.1MiB/s]
[00:02.520 --> 00:10.840] 2022年9月25日 今日は家族で玉動物へに来るまで行ってきました
[00:10.840 --> 00:29.520] アキバルでとても気持ちよく可愛い動物もたくさん見れてみんな大満足でした
```
惜しい！私の滑舌が悪いのもありますが、以下3点はうまく変換されませんでした。

- 多摩動物園 → 玉動物
- 車で行ってきました → 来るまで行ってきました
- 秋晴れ → アキバル


medium モデルでも試してみました。
```
ubuntu@reserved-gpu-whisper-681393:~$ whisper audio1401572826.m4a --language Japanese --model medium
100%|█████████████████████████████████████| 1.42G/1.42G [03:14<00:00, 7.85MiB/s]
[00:02.480 --> 00:10.760] 2022年9月25日 今日は家族で多摩動物園に車で行ってきました
[00:10.760 --> 00:33.000] 秋晴れでとても気持ちよく、かわいい動物もたくさん見れてみんな大満足でした
```
句読点の入る場所も完璧です！

# 4. 最後に
興味本位で試してみたのですが、セットアップが簡単でしかも精度が高いことに驚いた。
今回は GPU で処理しましたが、CPU での処理時間や精度なども今後試してみたいと思います。