スポンサーリンク

WSL2 Ubuntu 22.04 LTS に Whisper, Faster Whisper, Whisper WebUI をインストールする

forest_maze
記事内に広告が含まれています。
スポンサーリンク

はじめに

これまで、各種の生成 AI は WSL2 Ubuntu 23.10 の上で環境を構築し使用してきました。常々、「ちゃんと構築するなら 22.04 LTSだよなぁ」と考えていました。

まとまった時間が取れましたので、WSL2 Ubuntu 22.04 LTS の上で各種の生成 AI の環境を作り直す事にしました。ゼロから環境構築する際の参考になれば幸いです。

以下の記事で CUDA 11.7 のアンインストールと CUDA 11.8 & 12.1 のインストールの方法、NVIDIA cuDNN8 をインストールする方法について説明しました。

今回は、上記の環境をベースに、音声認識 AI の Whisper、Faster Whisper、Whisper WebUI を使用する環境の構築について説明します。

スポンサーリンク

前提となる環境

前提となる環境は、Windows11 WSL2 Ubuntu 22.04 LTS です。Python のバージョンは若干古く 3.10.12 になります。GPU は nVidia RTX3060 12GB で Driver は Ver.546.33 です。WSL2 の場合は、Windows 側にインストールした GPU ドライバーのバージョンとなり、WSL2 用のコマンド・ライブラリも同時にインストールされます。

これに CUDA 11-8 & 12.1 と cuDNN をインストールしています。cuDNN は CUDA 11-8 用です。

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.3 LTS
Release:        22.04
Codename:       jammy

$ python3 -V
Python 3.10.12

$ nvidia-smi
Sat Jan  6 20:35:57 2024
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 545.29.01              Driver Version: 546.33       CUDA Version: 12.3     |
|-----------------------------------------+----------------------+----------------------+
| 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 3060        On  | 00000000:08:00.0  On |                  N/A |
| 30%   38C    P8              13W / 170W |    666MiB / 12288MiB |      3%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+

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

$ /usr/local/cuda-11.8/bin/nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Wed_Sep_21_10:33:58_PDT_2022
Cuda compilation tools, release 11.8, V11.8.89
Build cuda_11.8.r11.8/compiler.31833905_0

$ /usr/local/cuda-12.1/bin/nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Mon_Apr__3_17:16:06_PDT_2023
Cuda compilation tools, release 12.1, V12.1.105
Build cuda_12.1.r12.1/compiler.32688072_0

$ dpkg -l | grep libcudnn8 | tr -s ' '
ii libcudnn8 8.9.7.29-1+cuda11.8 amd64 cuDNN runtime libraries
ii libcudnn8-dev 8.9.7.29-1+cuda11.8 amd64 cuDNN development libraries and headers

生成 AI は ~/GenerationAI 以下に directory を作成してインストールする事にします。

$ mkdir ~/GenerationAI && cd ~/GenerationAI

この環境をベースとして、各種の生成 AI をインストールします。

Whisper WebUI のインストール

Whisper WebUI は Hugging Face のリポジトリにあります。バージョン等の表記はありません。

インストールの大まかな手順は以下の通りです。

  • 必要な package のインストール
  • 環境を構築する directory の作成
  • Whisper WebUI のリポジトリを git clone
  • Python 仮想環境の構築
  • PyTorch のインストール
  • Whisper のインストールと動作確認
  • Faster Whisper のインストールと動作確認
  • Whisper WebUI の環境設定

順を追って説明します。

必要な package のインストール

Ubuntu 22.04 LTS 側に必要な package は、git と python3、python3-venv、ffmpeg です。

$ sudo apt install git python3 python3-venv ffmpeg --no-install-recommends

環境を構築する directory の作成

合成音声生成のソフトウェアは、Voicevox directory 以下に環境を作ります。

$ cd ~/Generation_AI
$ mkdir Whisper && cd Whisper

Whisper WebUI のリポジトリを git clone

clone した directory 内に Python 仮想環境を構築する為に、先に Whisper WebUI を clone しておきます。Hugging Face にホストされていますが、git で clone 出来ます。

$ git clone https://huggingface.co/spaces/aadnk/whisper-webui

Python 仮想環境の構築

clone した directory 内に Python 仮想環境を構築します。

$ cd whisper-webui
$ python3 -m venv .venv
$ source .venv/bin/activate
(.venv) $ pip install --upgrade pip setuptools

PyTorch のインストール

CUDA 12.1 用の PyTorch を使用する為、torch、torchvision、torchaudio はバージョン指定でインストールします。

(.venv) $ pip3 install torch==2.1.2+cu121 torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu121
...(snip)...
(.venv) $ pip list
Package            Version
------------------ ------------
certifi            2023.11.17
charset-normalizer 3.3.2
filelock           3.13.1
fsspec             2023.12.2
idna               3.6
Jinja2             3.1.3
MarkupSafe         2.1.3
mpmath             1.3.0
networkx           3.2.1
numpy              1.26.3
pillow             10.2.0
pip                23.3.2
requests           2.31.0
setuptools         69.0.3
sympy              1.12
torch              2.1.2+cu121
torchaudio         2.1.2+cu121
torchvision        0.16.2+cu121
triton             2.1.0
typing_extensions  4.9.0
urllib3            2.1.0

torch 等は CUDA 12.1 用の Ver.2.1.2 がインストールされました。

Whisper のインストールと動作確認

2024年1月時点の Whisper の最新版は v20231117 です。

pip でインストールします。

(.venv) $ pip install git+https://github.com/openai/whisper.git
...(snip)...
Successfully installed llvmlite-0.41.1 more-itertools-10.2.0 numba-0.58.1
 openai-whisper-20231117 regex-2023.12.25 tiktoken-0.5.2 tqdm-4.66.1
(.venv) $ which whisper
/home/hiro/Generation_AI/Whisper/whisper-webui/.venv/bin/whisper

Python 仮想環境内の .venv/bin に whisper コマンドがインストールされます。

簡単に動作確認します。以下のページで 'VOICEVOX:四国めたん' で生成した合成音声を認識させてみます。

モデルは、tiny、base、small、medium、large、large-v2、large-v3 の 7種類があります。

今回は large-v3 モデルを使用します。音声ファイルは wav -> mp3 に変換して使用しました。

(.venv) $ mkdir whisper_results

(.venv) $ cp ~/Generation_AI/Voicevox/voicevox_core/out.wav whisper_results/
(.venv) $ ffmpeg -i whisper_results/out.wav whisper_results/out.mp3
(.venv) $ ffprobe whisper_results/out.mp3
...(snip)...
Input #0, mp3, from 'whisper_results/out.mp3':
  Metadata:
    encoder         : Lavf58.76.100
  Duration: 00:00:04.85, start: 0.046042, bitrate: 32 kb/s
  Stream #0:0: Audio: mp3, 24000 Hz, mono, fltp, 32 kb/s

(.venv) $ time whisper --model large-v3 --output_dir whisper_results \
--language Japanese whisper_results/out.mp3
[00:00.000 --> 00:04.440] 初めて合成音声を生成しました。ちゃんと聞こえているかな?

real    0m18.130s
user    0m27.915s
sys     0m3.877s

最後の疑問符 (?) を含め認識されています。

whisper_results/ 以下には、音声認識結果が記録された 5つのファイルが作成されます。詳細は以下のリンク先を参照下さい。srt と vtt ファイルは Youtube でも使用されている形式のようです。

約4.8秒の音声の認識に約18秒を要しています。実行した際に GPU の負荷と VRAM の使用量が増加しますので、GPU を使用しているようです。

モデルは自動で~/.cache/whisper にダウンロードされます。2回目以降はダウンロードされた model が使用されます。

(.venv) $ ls ~/.cache/whisper
base.pt  large-v3.pt  medium.pt  small.pt  tiny.pt

各モデルで音声認識に要した時間と結果をまとめました。

モデルモデルサイズ MB認識時間 sec音声認識結果
tiny763.827[00:00.000 --> 00:03.000] 初めて合成音声を先生しました
[00:03.000 --> 00:05.000] ちゃんと聞こえているかな?
base1464.087[00:00.000 --> 00:06.440] 初めて合成音声を生成しました ちゃんと聞こえているかな
small4845.167[00:00.000 --> 00:06.400] 初めて合声音声を生成しました。ちゃんと聞こえているかな?
medium152910.104[00:00.000 --> 00:06.380] 初めて合成音声を生成しました ちゃんと聞こえているかな
large-v3308818.130[00:00.000 --> 00:04.440] 初めて合成音声を生成しました。ちゃんと聞こえているかな?
モデルによる生成時間と生成内容の比較 (Whisper)

短めの音声に大きいサイズのモデルを使用する場合には、モデルの読み込みに要する時間が長くなり無駄が多くなります。今回の約4.8秒の音声の場合には、small モデルが適正のようです。

長い音声を認識させる場合には、モデルの読み込みよりも音声認識に要する時間が長いので、large-v3 モデルを使用するのが良いかと思います。

Faster Whisper のインストールと動作確認

2024年1月時点の Faster Whisper の最新版は 0.10.0 です。

github に記載されていますが、Faster Whisper を動作させるには

  • Python 3.8 以上
  • cuBLAS for CUDA 11
  • cuDNN 8 for CUDA 11

が必要です。今回は予め導入済みです。

Whisper を構築した Python 仮想環境内に Faster Whisper もインストールします。

(.venv) $ pip install faster-whisper
...(snip)...
Successfully installed av-10.0.0 coloredlogs-15.0.1 ctranslate2-3.24.0
 faster-whisper-0.10.0 flatbuffers-23.5.26 huggingface-hub-0.20.2
 humanfriendly-10.0 onnxruntime-1.16.3 packaging-23.2 protobuf-4.25.2
 pyyaml-6.0.1 tokenizers-0.15.0

Faster Whisper には、whisper コマンドのようなものはありません。github にあるサンプルを修正して使用します。

faster-whisper.py という名称で保存します。音声認識させるファイル名とモデルを指定します。

#!/bin/env python
from faster_whisper import WhisperModel
import sys

args = sys.argv

if 3 != len(args):
    print(f'Usage : {args[0]} target_filename model_name')
    sys.exit(1)

target_filename = args[1]

model_size = args[2]

model = WhisperModel(model_size, device="cuda", compute_type="float16")

segments, info = model.transcribe(target_filename, beam_size=5, language="ja", initial_prompt="今日は、良い天気>です。")

for segment in segments:
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))

実行権限を付加して、Whisper と同じ mp3 を認識させてみます。

(.env) $ chmod +x faster-whisper.py
(.env) $ ./faster-whisper.py
Usage : ./faster-whisper.py target_filename model_name
(.env) $ time ./faster-whisper.py whisper_results/out.mp3 large-v3
[0.00s -> 4.78s] 初めて合成音声を生成しました。ちゃんと聞こえているかな?

real    0m5.188s
user    0m3.342s
sys     0m3.052s

large-v3 モデルを使用しましたが、約4.8秒の音声ファイルの認識に約5.2秒を要しています。Whisper よりも極端に短い時間で音声認識できています。

モデルは自動で~/.cache/huggingface/hub/ にダウンロードされます。2回目以降はダウンロードされた model が使用されます。

(.venv) $ ls ~/.cache/huggingface/hub/
models--Systran--faster-whisper-base
models--Systran--faster-whisper-large-v3
models--Systran--faster-whisper-medium
models--Systran--faster-whisper-small
models--Systran--faster-whisper-tiny

各モデルで音声認識に要した時間と結果をまとめました。

モデルモデルサイズ MB認識時間 sec音声認識結果
tiny752.575[0.00s -> 3.00s] はじめてご専用性を先生しました。
[3.00s -> 5.00s] ちゃんと聞こえているかな?
base1422.570[0.00s -> 4.78s] 初めて合成音声を生成しました。ちゃんと聞こえているかな。
small4642.837[0.00s -> 6.40s] 初めて合声音声を生成しました。 ちゃんと聞こえているかな?
medium14603.640[0.00s -> 6.40s] 初めて合声音声を生成しました。 ちゃんと聞こえているかな?
large-v329485.188[0.00s -> 4.78s] 初めて合成音声を生成しました。ちゃんと聞こえているかな?
モデルによる生成時間と生成内容の比較 (Faster Whisper)

tiny モデルのみ誤認識されていますが、それ以外のモデルでは問題なく認識されています。small より大きなモデルでは、疑問符も認識されている事から、Whisper よりも認識精度が高いと感じます。

Whisper とは異なり、large-v3 モデルでも音声認識に要する時間はあまり増加していません。使い勝手も Whisper よりも良いと思います。

Whisper WebUI の環境設定

Python 仮想環境内で Whisper と Faster Whisper を使用できるようになりましたので、Whisper WebUI の環境を設定します。

Whisper WebUI の github にある requirements.txt は以下の内容です。

git+https://github.com/huggingface/transformers
git+https://github.com/openai/whisper.git
transformers
ffmpeg-python==0.2.0
gradio==3.38.0
yt-dlp
torchaudio
altair
json5

# Needed by diarization
intervaltree
srt
torch
https://github.com/pyannote/pyannote-audio/archive/refs/heads/develop.zip

diarization (複数話者) については使用しませんので、Whisper WebUI に必要な部分のみを抜き出した requirements-add.txt を作成します。

git+https://github.com/huggingface/transformers
ffmpeg-python==0.2.0
gradio==3.38.0
yt-dlp
altair
json5

requirements-add.txt を pip で install します。

(.venv) $ pip install -r requirements-add.txt

Whisper WebUI の設定ファイルは config.json5 です。以下の diff の内容に変更します。

  • input_audio_max_duration を -1 (無制限)
  • whisper_implementation を faster-whisper
  • default_model_name を large-v3
  • auto_parallel を true
  • language を japanese

に変更しています。

--- config.json5.orig   2024-01-05 15:01:11.282022388 +0900
+++ config.json5        2024-01-02 21:22:52.570914000 +0900
@@ -56,7 +56,8 @@
     // * WEBUI options *

     // Maximum audio file length in seconds, or -1 for no limit. Ignored by CLI.
-    "input_audio_max_duration": 600,
+    //"input_audio_max_duration": 600,
+    "input_audio_max_duration": -1,
     // True to share the app on HuggingFace.
     "share": false,
     // The host or IP to bind to. If None, bind to localhost.
@@ -73,10 +74,12 @@
     // The default implementation to use for Whisper. Can be "whisper" or "faster-whisper".
     // Note that you must either install the requirements for faster-whisper (requirements-fasterWhisper.txt)
     // or whisper (requirements.txt)
-    "whisper_implementation": "whisper",
+    //"whisper_implementation": "whisper",
+    "whisper_implementation": "faster-whisper",

     // The default model name.
-    "default_model_name": "medium",
+    //"default_model_name": "medium",
+    "default_model_name": "large-v3",
     // The default VAD.
     "default_vad": "silero-vad",
     // A commma delimited list of CUDA devices to use for parallel processing. If None, disable parallel processing.
@@ -86,7 +89,8 @@
     // The number of seconds before inactivate processes are terminated. Use 0 to close processes immediately, or None for no timeout.
     "vad_process_timeout": 1800,
     // True to use all available GPUs and CPU cores for processing. Use vad_cpu_cores/vad_parallel_devices to specify the number of CPU cores/GPUs to use.
-    "auto_parallel": false,
+    //"auto_parallel": false,
+    "auto_parallel": true,
     // Directory to save the outputs (CLI will use the current directory if not specified)
     "output_dir": null,
     // The path to save model files; uses ~/.cache/whisper by default
@@ -98,7 +102,8 @@
     // Whether to perform X->X speech recognition ('transcribe') or X->English translation ('translate')
     "task": "transcribe",
     // Language spoken in the audio, specify None to perform language detection
-    "language": null,
+    //"language": null,
+    "language": "japanese",
     // The window size (in seconds) to merge voice segments
     "vad_merge_window": 5,
     // The maximum size (in seconds) of a voice segment

Whisper WebUI の起動

Whisper WebUI は app.py で起動します。

(.venv) $ python app.py
...(snip)...
Running on local URL:  http://127.0.0.1:7860

To create a public link, set `share=True` in `launch()`.

URL にアクセスすると Whisper WebUI が表示されます。config.json5 に設定した内容が反映されています。

Whisper WebUI 起動直後の画面

素の Whisper WebUI では、

  • ~/Generation_AI/Whisper/whisper-webui に移動し、
  • Python 仮想環境に入り、
  • app.py を起動する

という手順となり煩雑ですので、Stable Diffusion WebUI の webui.sh を参考に、Python 仮想環境に入って app.py を起動する script を作成しました。wp_webui.sh とします。

#!/usr/bin/env bash

venv_dir=".venv"
python_cmd="python3"
webui_cmd="app.py"

"${python_cmd}" -m venv "${venv_dir}"
source "${venv_dir}"/bin/activate
"${python_cmd}" "${webui_cmd}"

この script では、実行後に Python 仮想環境に入り server.py を起動します。

$ pwd
/home/hiro/Generation_AI/Whisper/whisper-webui
$ chmod +x wp_webui.sh
$ ./wp_webui.sh
...(snip)...
Running on local URL:  http://127.0.0.1:7860

To create a public link, set `share=True` in `launch()`.

Ctrl + C で停止すれば、Python 仮想環境を抜けた状態で bash prompt に戻ります。

Whisper WebUI の使い方

簡単な使い方としては、

  • URL 欄に Youtube 等の URL を入力する
  • Upload Files に音声ファイル (複数も可能) をアップロードする

と認識させたい音声・動画ファイルを指定した上で、下部の「送信」ボタンを押すと、音声認識結果が右側の画面に表示されます。

例えば、Whisper や Faster Whisper で試した out.mp3 を使う場合について説明します。

Upload Files を選択して out.mp3 を読み込ませます。

out.mp3 の読み込み

下の「送信」ボタンを押します。

「送信」ボタンを押す

結果が右側に表示されます。Faster Whisper を使用した場合にも、srt や vtt ファイルが作成されます。

結果の表示

著作権上の問題がありますので結果は示しませんが、Youtube 動画の字幕も生成できました。16分の動画を3分程度で音声認識できましたので、実時間の 1/5 程度で済みました。

それぞれの項目の詳細については、以下のページにまとめていますので参照下さい。

  • VAD (Voice Activity Detector) が Whisper / Faster Whisper の両方で使用する事ができ、細かな設定も行える事
  • Faster Whisper でも whisper コマンドと同等の出力が得られる事

の2点が、Whisper WebUI を使用するメリットかと思います。

過去の取り組み

Whisper、Faster Whisper、Whisper WebUI について過去に取り組んだ内容です。

この時は WSL2 Ubuntu 23.04、Python3 3.11.4、CUDA 11.8 で環境構築しました。今回は WSL2 Ubuntu 22.04 LTS で構築しています。

まとめ

WSL2 Ubuntu 22.04 LTS に CUDA 11.8 & 12.1、cuDNN 8 for CUDA 11.8 をインストールした環境に、Whisper 20231117、Faster Whisper 0.10.0、及び Whisper WebUI をインストールする手順についてまとめました。

  • Whisper WebUI を github から clone し、その中で Whisper と Faster Whisper を使えるようにしました。
  • Whisper の場合は、短い音声ファイルを認識させるのに large-v3 のような大きめのモデルを使用すると、実時間よりも長い音声認識時間が必要でした。
  • それに対して、Faster Whisper の場合は、モデルの大きさに関わらず、短い音声ファイルは短時間で音声認識が出来ました。
  • Python 仮想環境に入って web UI を起動する script (wp_webui.sh) を作り、Stable Diffusion WebUI と同じように起動できるようにしました。(ただしエラーチェックは入れていません)
  • Whisper WebUI の設定ファイル config.json5 の設定内容について説明しました。

これまでは、生成した合成音声や radiko、青空音読等の、比較的しっかりした音声を認識させてきました。文字起こしの需要が多い用途は、講演会の内容や会議の議事録だと思います。もっと品質の悪い音声の場合にどうなるか、機会があれば試してみたいと思います。

今回のアイキャッチ画像

森で出来た迷路を進む人を SDXL で生成しました。ハリーポッターの世界をイメージして生成しようとしましたが、迷路の上を歩く画像が多く生成されてしまいます。prompt は難しい…

私の PC にはもう一つ M.2 NVMe SSD スロットが空いています。生成 AI を色々と試すには、高速で VRAM の多い GPU も必要ですが、高速な大容量の記憶装置も必要です。NVMe SSD も 4TB が手の届く価格になりました。

コメント

タイトルとURLをコピーしました