GPUコンテナの高火力 DOKでAnimagine XL 4.0(アニメ風イラスト生成)を試す

高火力 DOKはコンテナー型のGPUサービスで、NVIDIA V100やH100を実行時間課金で利用できるサービスです。

今回はこの高火力 DOKを使って、Animagine XL 4.0を試してみました。

注意

この画像生成で作られる画像は、アニメのキャラクターを学習利用しており、固有名詞を使って絵柄が指定できます。そういった画像は著作権上、問題になる可能性が高いので利用時には注意してください。

参考

cagliostrolab/animagine-xl-4.0 · Hugging Faceにある利用例をベースに進めます。

とりあえず試す

コンテナレジストリにプッシュ済みのイメージを使って実行してみたい方は、高火力 DOKにて新しいタスクを作成し、以下の情報を入力してください。

項目設定
イメージdok-handson.sakuracr.jp/animagine
環境変数PROMPT = 1girl, yellow long hair, dancing, cosplay, looking at viewer, smile, outdoors, night, v, masterpiece, high score, great score, absurdres
NEGATIVE = lowres, bad anatomy, bad hands, text, error, missing finger, extra digits, fewer digits, cropped, worst quality, low quality, low score, bad score, average score, signature, watermark, username, blurry
WIDTH = 1024
HEIGHT = 1024

PROMPTは生成する画像の指示内容です。NEGATIVEは、生成対象外にする情報、WIDTHとHEIGHTは画像のサイズです。

コンテナイメージの作成と登録

上記タスクで利用したDockerイメージを作成する手順は以下の通りです。完成版はgoofmint/dok-animagineにありますので、実装時の参考にしてください。

Dockerfile の作成

cagliostrolab/animagine-xl-4.0 · Hugging Faceの内容に沿って、Dockerfileを作成します。

ベースイメージ

ベースは FROM nvidia/cuda:12.5.1-runtime-ubuntu22.04 です。

ライブラリのインストール

Pythonと、必要なライブラリをインストールします。

requirements.txt の内容は以下の通りです。公式サイトにあるものと、CLIのパラメーターのパーサー、そしてオブジェクトストレージ用ライブラリを追加しています。

あとは、後述する runner.py と、 docker-entrypoint.sh をコピーします。

Dockerfile全体

Dockerfileの全体は以下の通りです。

docker-entrypoint.sh の作成

docker-entrypoint.sh はDockerコンテナー起動時に実行するスクリプトです。ここでは環境変数をチェックして、 runner.py を呼び出します。以下の内容で作成します。

runner.py の作成

runner.py は実際に処理を行うスクリプトです。まず必要なライブラリをインポートします。

パラメータの取得

docker-entrypoint.sh から渡されたパラメータを取得します。

オブジェクトストレージ用のオブジェクトを準備

S3_ではじまる環境変数があれば、それを使ってS3オブジェクトを作成します。

Animagine XL 4.0の実行

公式サイトのドキュメントに沿って、実行部分を記述します。生成された画像を /opt/artifact (環境変数で --output にて受け取ったパス) に保存します。こうすると、実行後に高火力 DOKの管理画面でダウンロードできます。

オブジェクトストレージに保存

もし s3 があれば、生成した画像をオブジェクトストレージに保存します。

runner.py全体の処理

runner.py の全体の処理は以下の通りです。

Dockerイメージのビルド

上記の内容で、Dockerイメージをビルドします。Linux環境などで行います。

コンテナレジストリの用意

Dockerイメージを登録するコンテナレジストリを作成します。さくらのクラウドにログインしたら さくらのクラウド を選択します。

左側のメニューの LAB の中にある コンテナレジストリ を選択します。

追加 を押して、コンテナレジストリを作成します。最低限、以下の入力が必要です。

項目設定
名前分かりやすい、任意の名前を入力してください
コンテナレジストリ名ドメイン名に使われます。以下では、 EXAMPLE.sakuracr.jp として説明します
公開設定Pullのみとします

ユーザーの作成

コンテナレジストリを作成したら、作成したコンテナレジストリを一覧でダブルクリックします。

詳細表示にて、ユーザータブをクリックします。

追加ボタンを押し、ユーザーを作成します。 YOUR_USER_NAMEPASSWORD は任意のものを指定してください。

項目設定
ユーザー名YOUR_USER_NAME
パスワードYOUR_PASSWORD
ユーザ権限設定All

Dockerイメージのビルド

DockerイメージはLinuxで行います。今回はUbuntu 24.04を使っています。Dockerが使える環境であれば、Windows + WSL2でも問題ありません。macOSの場合、アーキテクチャが異なるので動かせないかも知れません(未検証です)。

EXAMPLE.sakuracr.jp の部分は、作成したコンテナレジストリのドメイン名に置き換えてください。また、 animagine は任意の名前で大丈夫です(以下はその名称で読み替えてください)。

コンテナレジストリへのログイン

作成したコンテナレジストリにログインします。ログインIDとパスワードが求められるので、作成したものを入力してください。

イメージのプッシュ

作成したイメージをコンテナレジストリにプッシュします。イメージサイズが大きいので、数十分かかります。

タスクを作成する

後は最初と同じように高火力 DOKでタスクを作成し実行します。

項目設定
イメージdok-handson.sakuracr.jp/animagine
環境変数PROMPT = 1girl, yellow long hair, dancing, cosplay, looking at viewer, smile, outdoors, night, v, masterpiece, high score, great score, absurdres
NEGATIVE = lowres, bad anatomy, bad hands, text, error, missing finger, extra digits, fewer digits, cropped, worst quality, low quality, low score, bad score, average score, signature, watermark, username, blurry
WIDTH = 1024
HEIGHT = 1024

実行が完了し、画像が生成できていれば成功です。

まとめ

今回はAnimagine XL 4.0を使って、高火力 DOK上で画像生成を行いました。まずは実行のみを行い、次にDockerイメージの作成と段階的に進められるようにしています。画像生成のように、処理に時間がかかるものを利用する際に高火力 DOKは便利です。

高火力 DOKはタスクを多数立ち上げて、後は結果を待つのみと言った使い方ができます。ぜひAI・機械学習に活用してください。

コンテナー型GPUクラウドサービス 高火力 DOK(ドック) | さくらインターネット