MkItYs

MkItYs > AI・交渉・物語の自動生成 > 

images

コンテナ上のタガーで GPU を使う:sd-scripts, wd14-tagger, GPU, Docker, GCP

images

コンテナ上のタガー(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