はじめに
OpenAI Whisper を Windows ゲーミング PC の GPU を使って実行する手順を紹介します。様々な検証が可能なように、Docker を使って環境を用意してみます。
前提条件
- NVIDIA GPU を搭載したゲーミング PC (Windows 11 Home 23H2、12th Gen Intel Core i7-12650H 2.3GHz、32GB Memory、NVIDIA RTX 4060 8GB VRAM)
- NVIDIA Container Toolkit がインストールされていること (手順は別記事、WindowsゲーミングPCでGPUを使ったコンテナを実行する方法をご参照下さい)
手順
手順は次のようになります。
- CUDA バージョンの確認
- Whisper コンテナのビルド
- Whisper コンテナの起動
- 動作条件の確認
- Whisper の実行
CUDA バージョンの確認
WSL Ubuntu にてnvidia-smi
を実行し、CUDA バージョンを確認します。私の環境では、次の通り、CUDA 12.1 でした。
$ nvidia-smi
Mon Jan 15 22:15:44 2024
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 530.54 Driver Version: 531.97 CUDA Version: 12.1 |
|-----------------------------------------+----------------------+----------------------+
| 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 RTX 4060 L... On | 00000000:01:00.0 Off | N/A |
| N/A 32C P3 14W / N/A| 0MiB / 8188MiB | 0% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
+---------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=======================================================================================|
| No running processes found |
+---------------------------------------------------------------------------------------+
Whisper コンテナのビルド
github/openai/whisper/Setup の項目にWhisper は、Python 3.9.9、PyTorch 1.10.1 でトレーニングとテストを実施しているとのことです。また、Python 3.8 - 3.11 と最新の PyTorch で動作するでしょう、と記載があります。
私の環境は CUDA 12.1 ですので、nvidia/cuda:12.1.1-base-ubuntu22.04を利用しました。それぞれの環境似合わせて適切なコンテナイメージを nvidia/cudaより選択して下さい。
$ mkdir whisper1
$ cd whisper1
下記をDockerfile
として作成します。
FROM nvidia/cuda:12.1.1-base-ubuntu22.04 AS env_base
# Prepare env_base
RUN apt-get update && apt-get install --no-install-recommends -y \
git vim build-essential python3-dev python3-venv python3-pip
RUN pip3 install --upgrade pip setuptools && \
pip3 install torch torchvision torchaudio
# config whisper
FROM env_base AS whisper_base
# Install openai-whisper
RUN pip3 install -U openai-whisper
RUN apt-get update && apt-get install --no-install-recommends -y ffmpeg
上記を使って whisper が含まれた CUDA 処理が可能なコンテナをビルドします。
docker build . -t whisper1
上記を実行すると whisper1 という名前の image が作成されます。
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
whisper1 latest d34d27ba6d55 3 hours ago 8.94GB
Whisper コンテナの起動
場所を確認し、data
ディレクトリを作成します。Whisper コンテナと Windows でファイルをやり取りする場所となります。エクスプローラにて\\wsl.localhost\Ubuntu\home\ubuntu\whisper1\data
のようなディレクトリを探し、音声ファイルを保存します。
$ pwd whisper1
/home/ubuntu/whisper1
$ mkdir data
run.sh
を準備してコンテナを起動します。実行の際は、chmod 755 run.sh
を行なって./run.sh
などと実行して下さい。
#!/usr/bin/env bash
DOCKER_ROOT="/whisper1" # specidy docker directory
CONTAINER_IMAGE="whisper1" # set your image name
USER_COMMAND="/bin/bash"
# generate mount commands
DATA_VOLUME=" \
--volume $PWD/data:$DOCKER_ROOT/data"
# run docker with GPU
docker run -it --rm --gpus all \
$DATA_VOLUME $USER_VOLUME $DEV_VOLUME \
$CONTAINER_IMAGE $USER_COMMAND
動作条件の確認
コンテナ内にて/bin/bash
の状態となっているはずです。Python と Torch のバージョンが Whisper の動作条件を満たしていることを確認します。
$ python3 --version
Python 3.10.12
$ pip3 list|grep torch
torch 2.1.2
torchaudio 2.1.2
torchvision 0.16.2
念の為torch.cuda.is_available()
がTrue
を返すことも確認しましょう。
$ python3
Python 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> print(torch.cuda.is_available())
True
>>> exit()
Whisper の実行
/whisper1
にdata
がマウントされています。次を実行すると GPU を使った処理が行われます。--device cpu
とするとCPUのみで処理を行います。上で作成した環境は、GPU がデフォルトで動作する状態なので、--device
を入力しない場合は、GPU が動作します。
次のコマンドでは、出力先が同じく data となっています。抽出したテキストはいくつかの形式で出力されています。
whisper {your_file_name} --language Japanese --model medium --device cuda --output_dir data
おまけ、処理時間
以前作成した記事では、Apple Macbook Pro にて whisper を動作させてみました。同一ファイルを用いて参考までに、比較してみました。次の内容は、# OpenAI Whisperを使ってノーコードで自動文字起こしを実現する、しかもタダおよびGoogle ColabでOpenAI Whisperを使って自動文字起こしを実現するから部分出来に抜粋したものです。最後の2つが今回の環境で測定した結果です。
ファイル種別 | ファイルサイズ | audio尺 | モデル | 処理時間 | CPU/GPU |
---|---|---|---|---|---|
audio (m4a) | 3.3MB | 3分26秒 | small | 3分1秒 | M1 CPU |
audio (m4a) | 3.3MB | 3分26秒 | medium | 5分44秒 | M1 CPU |
audio (m4a) | 3.3MB | 3分26秒 | large | 12分41秒 | M1 CPU |
audio (m4a) | 3.3MB | 3分26秒 | large-v2 | 9分55秒 | M1 CPU |
audio (m4a) | 3.3MB | 3分26秒 | medium | 1分20秒 | Google Colab T4 16GB VRAM |
audio (m4a) | 3.3MB | 3分26秒 | medium | 29秒 | GeForce RTX4060 8GB VRAM |
audio (mp4) | 3.3MB | 3分26秒 | medium | 3分52秒 | Core i7-12650H |
また、VRAM 8GB ですと--model large-v2 --device cuda
や--model large-v3 --device cuda
は起動できませんでした。VRAM 10GB 程度は必要なようです。ということで、今回の比較は、medium を使った場合の結果を追加しています。
large-v3 を使おうとした際のエラーメッセージはこちらです。
torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 26.00 MiB. GPU 0 has a total capacty of 8.00 GiB of which 0 bytes is free. Of the allocated memory 6.90 GiB is allocated by PyTorch, and 354.72 MiB is reserved by PyTorch but unallocated. If reserved but unallocated memory is large try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF
所感
Apple Macbook Pro M1 や Google Colab の NVIDIA T4 16GB 環境よりも GeForce RTX4060 8GB の方が高速なようです。NVIDIA GeForce RTX 4060 Laptop GPU は CUDA コアが 3072、8GB GDDR6 となります。一方 Google Colab に搭載されているデータセンター向けの NVIDIA T4 は CUDA コアが 2560、16G GDDR6 となります。T4 は 2018 年にリリースされた Turing 世代、GeForce RTX 4060 はコンシュマー向けとはいえ Ada Lovelace 世代の方が半分以下の時間で動作するとは、びっくりでした。この 5年ほどで GPU の性能が大幅に向上していることがわかりました。