お手軽でカンタンなFaster-Whisper環境構築(2)

# はじめに

Faster-Whisperを使ってみたいけど、環境構築が面倒だなーと感じている私のような輩のために、比較的カンタンでクリーンな環境構築の方法を紹介します。
ここで"クリーンな環境"とは「OSのパッケージを汚さずに設定できてカンタンに元通り」という意味合いです。

この記事は、前回の記事の追加情報です。

https://qiita.com/hanaya/items/3dd345a6b51a623986d6

# 結論
NVIDIAのパッケージから必要な部分だけを選び出すことで、OSを汚さずにFaster-Whisperを動かす環境を作成できます。
しかし、今回の手順は、難しく無いと思いますが、面倒かもしれません。

# 環境構築の手順

前回の記事でFaster-Whisperのやや古いバージョンを動かしましたが、今回は最新版を目指します。NVIDIAの公式パッケージは開発者向けに多くのファイルが含まれており、実際に必要なのはその中のごく一部です。必要なファイルを抽出して環境を構築します。

要するに、nvidiaの公式パッケージは、開発者向けに様々な関連ファイルがどっさり詰まっているので「OSですか？」とツッコミたくなる位の大容量なわけです。実行に必要なのは、その中のほんの一部だけ。

## 試した環境
OS: Ubuntu 22.04 LST
GPU: nvidia t1000 8GB (nvidia-driver-535)

## 手順 

まずは、前回のおさらい。cudaがインストールされていない時は以下のようなエラー

```
(Whisper) hoge@mx130:~/LLM/fast-whisper/sample$ python3 test.py

Could not load library libcudnn_ops_infer.so.8. Error: libcudnn_ops_infer.so.8: cannot open shared object file: No such file or directory

中止 (コアダンプ)
```

このファイルをNVIDIAの公式パッケージから探してみます。


https://developer.nvidia.com/cudnn-downloads

ダウンロードしようとしたらCuda9って書いてありました。ライブラリのファイル名からVer8が必要と思われます。"Archive of Previous Releases"から探してみたら、v8系のパッケージを発見できました。debパッケージやtarアーカイブもありますね。
自分は、もちろんtarアーカイブを選択！
`cudnn-linux-x86_64-8.9.7.29_cuda11-archive.tar.xz`
しかし822MBってデカすぎでしょう。

ここから目的のファイルを探してみます。
```
tar -Jtvf cudnn-linux-x86_64-8.9.7.29_cuda11-archive.tar.xz  | grep '/libcudnn'

lrwxrwxrwx svc-compute-packagin/sw-cuda-installer         0 2023-11-30 17:11 cudnn-linux-x86_64-8.9.7.29_cuda11-archive/lib/libcudnn_ops_infer.so -> libcudnn_ops_infer.so.8
lrwxrwxrwx svc-compute-packagin/sw-cuda-installer         0 2023-11-30 17:11 cudnn-linux-x86_64-8.9.7.29_cuda11-archive/lib/libcudnn_ops_infer.so.8 -> libcudnn_ops_infer.so.8.9.7
-rwxr-xr-x svc-compute-packagin/sw-cuda-installer  90849728 2023-11-30 17:11 cudnn-linux-x86_64-8.9.7.29_cuda11-archive/lib/libcudnn_ops_infer.so.8.9.7
```

発見しました。このファイルだけ抽出します。
```
tar -Jxf cudnn-linux-x86_64-8.9.7.29_cuda11-archive.tar.xz cudnn-linux-x86_64-8.9.7.29_cuda11-archive/lib/libcudnn_ops_infer.so.8.9.7
```
出てきたlibcudnn_ops_infer.so.8.9.7を適当なフォルダに移して、シンボリックリンクでファイル名を整えます。
```
mkdir ~/LLM/faster-whisper/libs
mv libcudnn_ops_infer.so.8.9.7 ~/LLM/faster-whisper/libs/
cd ~/LLM/faster-whisper/libs
ln -s libcudnn_ops_infer.so.8.9.7 libcudnn_ops_infer.so.8
```

環境変数LD_LIBRARY_PATHを設定します。
```
export LD_LIBRARY_PATH=~/LLM/faster-whisper/libs
```
実行してみます。

```
(Whisper) hoge@mx130:~/LLM/fast-whisper/sample$ python3 test.py
　：
 （すいません、このエラーは記録していません）
 ：
```

次は、libcudnn_cnn_infer.so.8が無いって出てきたので、同じ手口でlibsにコピーします。

```
(Whisper) hoge@mx130:~/LLM/fast-whisper/sample$ python3 test.py
　：
 （すいません、このエラーは記録していません）
 ：
```
次に無いと言われたのが、libcublasLt.so.11で、これはさっきのtarアーカイブに含まれていませんでした。

ネットの情報から、なんとなくnvidiaのCUDA Toolkitに含まれてそうです。

https://developer.nvidia.com/cuda-downloads

最新はVer12っぽいですね。必要なのはVer.11だと思うのですが。
cuDNNと同じように"Archive of Previous CUDA Releases"から`CUDA11.8`を選択してみたのですが、debパッケージしか有りませんでした。

またしばらくネットの記事を検索した結果、Faster-Whisperの公式README.mdにcuBLAS for CUDA 11のリンクがちゃんと記載されていました。READMEはまじめに読まないとダメですね。

https://developer.nvidia.com/hpc-sdk-downloads

`nvhpc_2024_241_Linux_x86_64_cuda_multi.tar.gz`をダウンロード・・・
ってナニコレ？！ 9GBもあるんですけど!!! OSですか？ Windowsですか？ Officeですか???

そして、この巨大なtarアーカイブから、libcublasLt.so.11を探して追加して、実行して足りないと言われたライブラリを探して追加して、を繰り返して必要なファイルをlibsフォルダに集めていきます。

最終的に音声認識ができるようになった段階でのlibsディレクトリの中身はこうなりました。

```
lrwxrwxrwx 1 hoge hoge        23  3月  5 15:39 libcublas.so.11 -> libcublas.so.11.11.4.17
-rwxr-xr-x 1 hoge hoge  94729912  1月 27 04:59 libcublas.so.11.11.4.17
lrwxrwxrwx 1 hoge hoge        21  3月  5 15:42 libcublas.so.12 -> libcublas.so.12.3.4.1
-rwxr-xr-x 1 hoge hoge 106679344  1月 27 05:01 libcublas.so.12.3.4.1
lrwxrwxrwx 1 hoge hoge        25  3月  5 15:38 libcublasLt.so.11 -> libcublasLt.so.11.11.4.17
-rwxr-xr-x 1 hoge hoge 574565176  1月 27 04:59 libcublasLt.so.11.11.4.17
lrwxrwxrwx 1 hoge hoge        23  3月  5 15:45 libcublasLt.so.12 -> libcublasLt.so.12.3.4.1
-rwxr-xr-x 1 hoge hoge 518358624  1月 27 05:01 libcublasLt.so.12.3.4.1
lrwxrwxrwx 1 hoge hoge        27  3月  5 15:05 libcudnn_cnn_infer.so.8 -> libcudnn_cnn_infer.so.8.9.7
-rwxr-xr-x 1 hoge hoge 563283840 11月 30 17:11 libcudnn_cnn_infer.so.8.9.7
lrwxrwxrwx 1 hoge hoge        27  3月  5 15:02 libcudnn_ops_infer.so.8 -> libcudnn_ops_infer.so.8.9.7
-rwxr-xr-x 1 hoge hoge  90849728 11月 30 17:11 libcudnn_ops_infer.so.8.9.7
```

一応、md5sumも記載しておきます。
```
5c3e7a7148161aa835ab9a55b21717ed  libcudnn_ops_infer.so.8.9.7
12dfd61d1b8ec1c6ec4dceedea8f09a8  libcudnn_cnn_infer.so.8.9.7
b4396e1aa4147bd884a30b442c59dcd1  libcublasLt.so.11.11.4.17
98e84ac45b41f830350fc82fa48842b9  libcublas.so.11.11.4.17
aa0551868dd82ff3570b50022f57f654  libcublas.so.12.3.4.1
5e994ad31afab0cbdbe94f3951a979c5  libcublasLt.so.12.3.4.1
```

あとは起動スクリプトで起動するとか
```bash:run.sh
#!/bin/bash
export LD_LIBRARY_PATH=~/LLM/faster-whisper/libs
source ~/LLM/faster-whisper/libs/.venv/bin/activate
python3 test.py
```

.bashrcで設定するとか
```bash:.bashrc
 # なんか色々書いてある
 # 最後に追加
export LD_LIBRARY_PATH="~/LLM/faster-whisper/libs:$LD_LIBRARY_PATH"
```

/usr/local/libあたりに環境構築するとか

お好みの方法を選択すると良いかと。

以上で、Faster-whisper最新版( 1.0.x )をローカルで実行する環境ができました。

いや、結構面倒だったわコレ・・・・