はじめに
Faster-Whisperを使ってみたいけど、環境構築が面倒だなーと感じている私のような輩のために、比較的カンタンでクリーンな環境構築の方法を紹介します。
ここで"クリーンな環境"とは「OSのパッケージを汚さずに設定できてカンタンに元通り」という意味合いです。
この記事は、前回の記事の追加情報です。
結論
pipコマンドのパッケージだけで、お手軽にFaster-Whisperの実行環境が作れます。
nvidiaからdudaのパッケージをダウンロードシてインストールという超絶面倒な手順は不要です。
前回の記事からの続き
VoiceVoxのライブラリを間借りしたり、NVIDIAのパッケージからファイルを抽出したりして、Faster-Whisperを動かしてみましたが、やっぱりもっと簡単にできるのでは?
情報収集して試行錯誤した結果、本家Whisperでは、CUDAとCUDNNがOSにインストールされていなくても大丈夫なようです。そしてどうやら、cudaとdudnnのpipパッケージがあるらしい。
今回はこのpipパッケージを使って、faster-whisperを動くようにしてみます。
試した環境
OS: Ubuntu 22.04 LST
GPU: nvidia t1000 8GB (nvidia-driver-535)
この記事はLinux環境向けです。Windowsの場合は以下が参考になりそうです。
発見したパッケージ
ネットを徘徊してパッケージを発見しました。なんか怪しいぞ?と思ったけれど、よくみたらメンテナはnvidiaさん。つまり公式です。だよね?
手順
それでは、このパッケージをつかって環境構築していきます。一応全部の手順を書いていきます。
まずは、恒例のpython仮想環境を作成。
$ mkdir ~/LLM/faster-whisper #ディレクトリを作る
$ cd ~/LLM/faster-whisper #ディレクトリに移る
$ python3 -m venv .venv --prompt 'Whisp' #プロンプトを指定して仮想環境を作る
$ source .venv/bin/activate #仮想環境に入る
$ .venv/bin/python3 -m pip install -U pip setuptools #念の為pipを最新版へ
次に、faster-whisperのインストール。もちろんpython仮想環境で。
$ pip install faster-whisper
そしてに、cublasとcudnnをインストール。(cublasは11と12が必要でした)
nvidia-cudnn-cu11は依存関係でインストールされます。
$ pip install nvidia-cublas-cu11 nvidia-cublas-cu12
インストール結果
(Voice) hogehoge@mx130:~/LLM/CrabVoice$ pip list | grep nvidia
nvidia-cublas-cu11 11.11.3.6
nvidia-cublas-cu12 12.4.2.65
nvidia-cuda-nvrtc-cu11 11.8.89
nvidia-cudnn-cu11 8.9.6.50
コレだけでは、まだ動きません。LD_LIBRARY_PATHを指定しないとライブラリを読んでくれないようです。では、ライブラリはどこにあるのか?
(Voice) hogehoge@mx130:~/LLM/CrabVoice$ find . -name 'libcublas.so*' -o -name 'libcudnn_ops*'
./.venv/lib/python3.11/site-packages/nvidia/cublas/lib/libcublas.so.11
./.venv/lib/python3.11/site-packages/nvidia/cublas/lib/libcublas.so.12
./.venv/lib/python3.11/site-packages/nvidia/cudnn/lib/libcudnn_ops_infer.so.8
./.venv/lib/python3.11/site-packages/nvidia/cudnn/lib/libcudnn_ops_train.so.8
2箇所に別れてますね。これをLD_LIBRARY_PATHに設定します。
export LD_LIBRARY_PATH=$(find $PWD \( -name 'libcublas.so*' -o -name 'libcudnn_ops*' \) -printf '%h\n' | sort -u | paste -sd ':')
実行してみましょう
(Voice) hoge@mx130:~/LLM/CrabVoice$ python3 transcribe_simple.py
#Load model
#Start
Detected language 'ja' with probability 1.000000
[0.00s -> 5.12s] はいすいませんどちらまで
[5.12s -> 6.84s] ナンバーグランドカ月まで
[6.84s -> 7.66s] ナンバーグランドカ月
[7.66s -> 9.38s] 1000日前の
[9.38s -> 11.08s] 1000日前の
[11.08s -> 14.62s] ナンバーグランドカ月さんお願いします
[14.62s -> 18.50s] 帰りましたでしょ新大阪のタクシー乗り場
[18.50s -> 22.62s] そうですねあそこなんか行き先とかいろいろ分かれてたのか
[22.62s -> 24.64s] もう今全部一緒になりましたね
[24.64s -> 29.80s] 小型の乗り場ももうなくなりましたね
:
出来ました。あとは、LD_LIBRARY_PATHをどこで設定するか?
仮想環境の中に設定できるファイル等があるか調べたのですが、私の調査では発見出来ませんでした。今回は、activateスクリプトを修正することにします。
# This file must be used with "source bin/activate" *from bash*
# you cannot run it directly
deactivate () {
(途中省略)
if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then
PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}"
export PYTHONHOME
unset _OLD_VIRTUAL_PYTHONHOME
fi
+ if [ -n "${_OLD_LD_LIBRARY_PATH:-}" ] ; then
+ export LD_LIBRARY_PATH="${_OLD_LD_LIBRARY_PATH#EMPTY}"
+ unset _OLD_LD_LIBRARY_PATH
+ fi
# This should detect bash and zsh, which have a hash command that must
(途中省略)
}
(途中省略)
_OLD_VIRTUAL_PATH="$PATH"
PATH="$VIRTUAL_ENV/bin:$PATH"
export PATH
+_OLD_LD_LIBRARY_PATH="${LD_LIBRARY_PATH:-EMPTY}"
+export LD_LIBRARY_PATH="$(find $PWD \( -name 'libcublas.so*' -o -name 'libcudnn_ops*' \) -printf '%h\n' | sort -u | paste -sd ':'):$LD_LIBRARY_PATH"
# unset PYTHONHOME if set
# this will fail if PYTHONHOME is set to the empty string (which is bad anyway)
# could use `if (set -u; : $PYTHONHOME) ;` in bash
(途中省略)
うまく働くか、試してみます。
仮想環境へ入る前にLD_LIBRARY_PATHへ目印となる文字列を設定しておきます。
hoge@mx130:~/LLM/CrabVoice$ export LD_LIBRARY_PATH="関西電気保安協会"
hoge@mx130:~/LLM/CrabVoice$ echo $LD_LIBRARY_PATH
関西電気保安協会
仮想環境に入って、LD_LIBRARY_PATHが設定されているか確認します。
hoge@mx130:~/LLM/CrabVoice$ source .venv/bin/activate
(Voice) hoge@mx130:~/LLM/CrabVoice$ echo $LD_LIBRARY_PATH
/home/hoge/LLM/CrabVoice/.venv/lib/python3.11/site-packages/nvidia/cublas/lib:/home/hoge/LLM/CrabVoice/.venv/lib/python3.11/site-packages/nvidia/cudnn/lib:関西電気保安協会
仮想環境を抜けて、LD_LIBRARY_PATHが復元されるか確認します。
(Voice) hoge@mx130:~/LLM/CrabVoice$ deactivate
hoge@mx130:~/LLM/CrabVoice$ echo $LD_LIBRARY_PATH
関西電気保安協会
うまく設定と復帰ができているようです。これで仮想環境でのFaster-Whisperの動作環境が出来上がりました。