コンテナ上のタガー(wd14-tagger)で、GPU を使えるようにしてみます。
関連
- ◯
- プロンプトを与えて画像を生成させる(クラウドのコンテテで):sd-scripts, Ubuntu, Docker, GCP
検証
- ◯
- サーバ
- ・
- クラウド:GCP
- ・
- コンテナ:Docker
- ・
- ホスト:Ubuntu 22.04
- ・
- ゲスト:Ubuntu 22.04
- ◯
- クライアント
- ・
- パソコン:macOS
概要
sd-scripts には、画像の特徴から Danbooru のタグ群を自動生成するスクリプト(タガー)がふくまれています:
- ・
- https://github.com/kohya-ss/sd-scripts/tree/main/finetune
これらのタガーのうち、とくに認識精度に優れているのが、wd14-tagger 系の画像認識モデルを使うスクリプトです:[※1][※2][※3]
- ・
- https://github.com/kohya-ss/sd-scripts/blob/main/finetune/tag_images_by_wd14_tagger.py
# wd-v1-4-swinv2-tagger-v2 / wd-v1-4-vit-tagger / wd-v1-4-vit-tagger-v2/ wd-v1-4-convnext-tagger / wd-v1-4-convnext-tagger-v2 DEFAULT_WD14_TAGGER_REPO = "SmilingWolf/wd-v1-4-convnext-tagger-v2"
ただ、コンテナからこのタガーを使う場合、(使用モジュールが TensorFlow なので)GPU があっても認識できず、通常は CPU が選ばれます。
ここでは、コンテナ上のタガーが、GPU を使えるようにしてみます。
- ※1
- この画像認識モデル群は、タグ群のデータに danbooru2021 を使っています:
- ・
- https://huggingface.co/SmilingWolf/wd-v1-4-convnext-tagger-v2
- ・
- https://github.com/SmilingWolf/SW-CV-ModelZoo
- ・
- https://github.com/fire-eggs/Danbooru2021
- ・
- https://gwern.net/danbooru2021
- ※2
- タガーに使えるそれぞれの画像認識モデルの特徴は、次に解説があります:
- ・
- https://corkborg.github.io/wd14-tagger-standalone/
- ※3
- 画像認識モデル群を(スクリプトを直接書き換えることなく)オプションで選びたいなら、次のスクリプトが使えますーーただ、フレームワークに(TensorFlow でなく)PyTorch を使っているものの、GPU には未対応のようですね:
- ・
- https://github.com/corkborg/wd14-tagger-standalone
設置
次の手順で設置します:
タガーを使うため、sd-scripts のライブラリ依存関係のファイルを編集します:
- ・
- ${directory_project}/sd-scripts/requirements.txt
# for WD14 captioning (tensorflow) tensorflow==2.10.1
ホスト側で、CUDA 11 のツールキットを設置しますーーそのライブラリ群をふくむフォルダをマウントし、コンテナを起動します:
$ apt install cuda=11.8.0-1 $ docker run -it --rm --gpus all -v ${directory_project}:${directory_project} -v /usr/local/cuda-11.8:/usr/local/cuda --name ${container} ${image}
コンテナで、ライブラリ群を設置しますーーこのとき、Python 向けの cuDNN ライブラリ(cudnn-cu11)も設置し、CUDA 11 と併せ、ライブラリのパスを通します:
$ cd ${directory_project}/sd-scripts $ pip install --upgrade -r requirements.txt $ pip install nvidia-cudnn-cu11 $ export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/lib/python3.10/dist-packages/nvidia/cudnn/lib:$LD_LIBRARY_PATH $ python -c "import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))" ... [PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]
利用
この状態でタガーを実行すると、画像の認識〜タグの生成が、GPU を使ったものになります:[※1]
$ cd ${directory_project}/sd-scripts/finetune $ python tag_images_by_wd14_tagger.py --batch_size 4 ${directory_dataset}
- ※1
- このとき画像認識モデルは、次に設置されます:
$ cd ${directory_project}/sd-scripts/finetune $ ls -l wd14_tagger_model -rw-r--r-- 1 root root 654000 Mar 18 15:35 keras_metadata.pb -rwxr-xr-x 1 root root 0 Mar 18 15:35 keras_metadata.pb.lock -rw-r--r-- 1 root root 5705852 Mar 18 15:35 saved_model.pb -rwxr-xr-x 1 root root 0 Mar 18 15:35 saved_model.pb.lock -rw-r--r-- 1 root root 253906 Mar 18 15:35 selected_tags.csv -rwxr-xr-x 1 root root 0 Mar 18 15:35 selected_tags.csv.lock drwxr-xr-x 2 root root 4096 Mar 18 15:35 variables