Python入門トップページ


目次


WhisperX で音声認識と話者分離をしてみよう

Windows 編

GPU による音声認識・話者分離の高速化

前のページまでで CPU による音声認識や話者分離ができるようになりました.PC の性能にも大きく依存しますが,large モデルを用いて音声認識と話者分離まで実行すると,10分間の音声データについて12分程度の処理時間が必要でした.つまり,処理時間の方が長いことからリアルタイムに処理を行うことは不可能ですし,数時間の会議音声データを処理するためにさらに長い処理時間が必要となってしまうことになります.

ここでは NVIDIA 製 GPU を搭載した Windows PC をりようしてより高速な処理を行う方法について説明します.

GPU の状態確認

まず,nvidia-smi コマンドを用いて,GPU の状態を確認してみます.ここで,-l 3 オプションを付与すると,3秒ごとに情報が更新されます.コマンドを終了するには Ctrl + C を押してください.

(base) PS C:\Users\...\whisperx> nvidia-smi -l 3 ⏎
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 591.94                 Driver Version: 591.94         CUDA Version: 13.1     |
+-----------------------------------------+------------------------+----------------------+
| GPU  Name                  Driver-Model | 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 ...  WDDM  |   00000000:01:00.0 Off |                  N/A |
| N/A   44C    P0              1W /  135W |       0MiB /   8188MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

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

上の出力結果のように CUDA Version が表示されていることを確認してください.このバージョン番号はサポート上限を意味しています.また,ここでは NVIDIA GeForce RTX 4060 を利用することとします.

GPU 利用のための仮想環境構築

音声認識や話者分離を GPU の並列処理によって高速化したいのですが,CUDA (Compute Unified Device Architecture: NVIDIAが開発したGPU向けの並列演算プラットフォーム) のドライバを別途インストールすることなく,CUDA をサポートする pytorch をインストールするだけで並列処理が可能になります.今回は Python 3.10 と CUDA 12.4 の組合せで実行しましょう.

このために,新たな Python 仮想環境を whisperx_gpu という名前で作成し,その環境を有効にします.

conda create -n whisperx_gpu python=3.10 -y
conda activate whisperx_gpu

次に,whisperx をインストールしますが,pip install whisperx では CPU 版 torch などの関連パッケージも含め一括でインストールされていしまいます.今回は GPU 版の torch をインストールしたいので,次のとおり --no-deps オプションを付与して関連パッケージをインストールしないようにします.このとき,エラーが表示されても構わず進んでください.

pip install whisperx --no-deps

huggingface-hub はバージョン 1.0 未満にするよう警告が出ることがあるようなので,バージョンを1.0未満に指定してインストールします.(しかしながら,次のステップで結局アップデートされてしまうので,バージョン番号を指定しなくても問題ないように思われます.)

pip install "huggingface-hub<1.0"

続いて,torch 以外の関連パッケージをインストールします.ここでもエラーが表示されたとしても構わず進んでください.

pip install ctranslate2 faster-whisper transformers pandas nltk omegaconf pyannote-audio torchcodec

最後に CUDA 12.4 に対応した torch をインストールします.

pip install --force-reinstall torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124

インストールされたパッケージを確認しておきましょう.CUDA 12.4 に対応した torch,torchaudio,torchvision がインストールできていることに注意して下さい.

(whisperx_gpu) PS C:\Users\...\whisperx> pip list | Select-String whisper ⏎

faster-whisper                           1.2.1
whisperx                                 3.8.6

(whisperx_gpu) PS C:\Users\...\whisperx> pip list | Select-String torch ⏎

pytorch-lightning                        2.6.5
pytorch-metric-learning                  2.9.0
torch                                    2.6.0+cu124
torch-audiomentations                    0.12.0
torch_pitch_shift                        1.2.5
torchaudio                               2.6.0+cu124
torchcodec                               0.13.0
torchmetrics                             1.9.0
torchvision                              0.21.0+cu124

(whisperx_gpu) PS C:\Users\...\whisperx> pip list | Select-String pyannote ⏎

pyannote-audio                           4.0.4
pyannote-core                            6.0.1
pyannote-database                        6.1.1
pyannote-metrics                         4.1
pyannote-pipeline                        4.0.0
pyannoteai-sdk                           0.4.0

(whisperx_gpu) PS C:\Users\...\whisperx>

GPU 利用の確認

環境が構築できたら,GPU を利用した演算が可能であるか簡単に確認してみましょう.次のようなコードをテキストエディタで作成し,任意のファイル名で(例えばcuda_test.pyで)保存します.

cuda_test.py
import torch
print(torch.cuda.is_available())

上のコードを実行して True が表示されたら成功です.次に進んでください.

(whisperx_gpu) PS C:\Users\...\whisperx> python .\cuda_test.py ⏎
True
(whisperx_gpu) PS C:\Users\...\whisperx>

GPU を利用した音声認識と発話分離

ここまで準備ができたら GPU を用いて高速に処理しましょう.このために必要なオプションは --device cuda だけです.large モデルと turbo モデルで実行してみましょう.

whisperx --model large --language ja voice.m4a --device cuda -o output_large_cuda
whisperx --model large --language ja voice.m4a --device cuda -o output_large_cuda_diarize --diarize
whisperx --model turbo --language ja voice.m4a --device cuda -o output_turbo_cuda
whisperx --model turbo --language ja voice.m4a --device cuda -o output_turbo_cuda_diarize --diarize

実行中に別のターミナルを起動して GPU の状態を確認してください.消費電力(81W),GPUメモリ使用量(5983MiB),GPUコア利用率(100%)がいずれも上昇していることが分かりました.

(whisperx_gpu) PS C:\Users\...\whisperx> nvidia-smi -l 3 ⏎
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 591.94                 Driver Version: 591.94         CUDA Version: 13.1     |
+-----------------------------------------+------------------------+----------------------+
| GPU  Name                  Driver-Model | 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 ...  WDDM  |   00000000:01:00.0 Off |                  N/A |
| N/A   56C    P0             81W /  112W |    5983MiB /   8188MiB |    100%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|    0   N/A  N/A           16844      C   ...isperx_gpu_diarize\python.exe      N/A      |
+-----------------------------------------------------------------------------------------+

CPU で処理した場合,large モデルの音声認識で8分20秒,発話分離も含めて12分00秒でしたが,GPUを利用することで,それぞれ50秒,1分08秒という圧倒的な結果になりました.GPU によっておよそ10倍の速度で実行できたことになります

ここで様々な処理時間を表にまとめておきます.(時間計測はそれほど正確ではなく,実験を何度も繰り返して平均時間を求めるようなこともしていません.あくまで一例として示しています.)

no
Model
CPU/GPU
diarize
large
turbo
1 aorus CPU Core i9 - 8分20秒 5分00秒
2 aorus CPU Core i9 yes 12分00秒 9分00秒
3 aorus GPU GeForce RTX 4060 Laptop - 50秒 35秒
4 aorus GPU GeForce RTX 4060 Laptop yes 1分08秒 50秒
5 Mac Studio M1 Max - 6分40秒 2分40秒
6 Mac Studio M1 Max yes 13分20秒 11分00秒
7 Mac Studio 32コアGPU - - 1分20秒
8 MacBookAir M2 - 9分10秒 3分35秒

目次に戻る