「AIアートを無料で無制限に行いたい」
「テキストから画像を自動生成するCLIPベースのモデルを試したい」
このような場合には、DISCOARTがオススメです。
この記事では、AIアートが可能なDISCOARTについて解説しています。
本記事の内容
- DISCOARTとは?
- DISCOARTのシステム要件
- DISCOARTのインストール
- DISCOARTの設定
- DISCOARTの動作確認
それでは、上記に沿って解説していきます。
DISCOARTとは?
DISCOARTとは、Disco Diffusionを利用できるPythonライブラリです。
Disco Diffusionとは、CLIPベースの画像生成モデルになります。
CLIPについては、次の記事で説明しています。
簡単に言うと、テキストから画像を生成する技術のことです。
このCLIPベースの画像生成モデルは、他にも存在します。
これらと比べると、DISCOARTはより簡単にAIアートが実行できます。
気軽にAIアートをDisco Diffusionで試したい場合には、DISCOARTは最適と言えます。
以上、DISCOARTについて説明しました。
次は、DISCOARTのシステム要件を説明します。
DISCOARTのシステム要件
現時点(2022年8月)でのDISCOARTの最新バージョンは、0.12.0となります。
この最新バージョンは、2022年8月10日にリリースされています。
サポートOSに関しては、以下を含むクロスプラットフォーム対応です。
- Windows
- macOS
- Linux
サポート対象となるPythonのバージョンは、以下となっています。
- Python 3.7
- Python 3.8
- Python 3.9
- Python 3.10
このサポート状況は、以下のPython公式開発サイクルに完全に一致しています。
バージョン | リリース日 | サポート期限 |
3.6 | 2016年12月23日 | 2021年12月23日 |
3.7 | 2018年6月27日 | 2023年6月27日 |
3.8 | 2019年10月14日 | 2024年10月 |
3.9 | 2020年10月5日 | 2025年10月 |
3.10 | 2021年10月4日 | 2026年10月 |
Python 3.6のサポートは、2021年で終了していることに注意しましょう。
そして、最も重要なのはPyTorchが必須というところになります。
最新版のPyTorchをインストールしましょう。
GPU版PyTorchのインストールについては、次の記事で説明しています。
DISCOARTは、CPU版PyTorchでも動くようです。
しかし、GPU版PyTorchを推奨しておきます。
おそらく、CPU版ではまともに動かないでしょうから。
以上、DISCOARTのシステム要件を説明しました。
次は、DISCOARTのインストールを説明します。
DISCOARTのインストール
DISCOARTのインストールは、Python仮想環境の利用をオススメします。
かなり多くのパッケージに依存がインストールされます。
Python仮想環境は、次の記事で解説しています。
検証は、次のバージョンのPythonで行います。
> python -V Python 3.10.4
まずは、現状のインストール済みパッケージを確認しておきます。
事前にGPU版のPyTorchがインストール済みです。
> pip list Package Version ------------------ ------------ certifi 2022.6.15 charset-normalizer 2.1.0 idna 3.3 numpy 1.23.2 Pillow 9.2.0 pip 22.2.2 requests 2.28.1 setuptools 65.0.2 torch 1.12.1+cu113 torchaudio 0.12.1+cu113 torchvision 0.13.1+cu113 typing_extensions 4.3.0 urllib3 1.26.11 wheel 0.36.2
次にするべきことは、pipとsetuptoolsの更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。
python -m pip install --upgrade pip setuptools
では、DISCOARTのインストールです。
DISCOARTのインストールは、以下のコマンドとなります。
pip install discoart
DISCOARTのインストールは、そこそこ時間がかかります。
終了したら、どんなパッケージがインストールされたのかを確認します。
> pip list Package Version ---------------------- ------------ aiofiles 0.8.0 aiohttp 3.8.1 aiosignal 1.2.0 aiostream 0.4.4 anyio 3.6.1 async-timeout 4.0.2 attrs 22.1.0 blobfile 1.3.1 certifi 2022.6.15 cffi 1.15.1 charset-normalizer 2.1.0 click 8.1.3 colorama 0.4.5 commonmark 0.9.1 cryptography 37.0.4 cycler 0.11.0 discoart 0.12.0 docarray 0.15.0 docker 4.2.2 docker-pycreds 0.4.0 fastapi 0.79.0 filelock 3.8.0 fonttools 4.35.0 frozenlist 1.3.1 ftfy 6.1.1 gitdb 4.0.9 GitPython 3.1.27 grpcio 1.47.0 grpcio-health-checking 1.47.0 grpcio-reflection 1.47.0 guided-diffusion-sdk 1.0.0 h11 0.13.0 httptools 0.4.0 idna 3.3 jina 3.7.9 jina-hubble-sdk 0.12.1 kiwisolver 1.4.4 lpips 0.1.4 lz4 4.0.2 matplotlib 3.5.3 multidict 6.0.2 numpy 1.23.2 open-clip-torch 1.3.0 openai-clip 1.0.1 packaging 21.3 pathspec 0.9.0 pathtools 0.1.2 Pillow 9.2.0 pip 22.2.2 prometheus-client 0.14.1 promise 2.3 protobuf 3.20.1 psutil 5.9.1 pycparser 2.21 pycryptodomex 3.15.0 pydantic 1.9.2 Pygments 2.13.0 pyparsing 3.0.9 pypiwin32 223 pyspellchecker 0.6.3 python-dateutil 2.8.2 python-dotenv 0.20.0 python-multipart 0.0.5 pywin32 304 PyYAML 6.0 regex 2022.7.25 requests 2.28.1 resize-right-sdk 1.0.2 rich 12.5.1 scipy 1.9.0 sentry-sdk 1.9.5 setproctitle 1.3.2 setuptools 65.0.2 shortuuid 1.0.9 six 1.16.0 smmap 5.0.0 sniffio 1.2.0 starlette 0.19.1 torch 1.12.1+cu113 torchaudio 0.12.1+cu113 torchvision 0.13.1+cu113 tqdm 4.64.0 typing_extensions 4.3.0 urllib3 1.26.11 uvicorn 0.18.2 wandb 0.13.1 watchfiles 0.16.1 wcwidth 0.2.5 websocket-client 1.3.3 websockets 10.3 wheel 0.36.2 xmltodict 0.12.0 yarl 1.8.1
かなりの数のパッケージが、インストールされます。
これが、Python仮想環境の利用を推奨する理由です。
以上、DISCOARTのインストールを説明しました。
次は、DISCOARTの設定を説明します。
DISCOARTの設定
DISCOARTを動作させる上での、必要な設定を説明します。
DISCOARTの設定とは、以下のことです。
- Weights & Biases(WandB)の設定
- Jina AIへのログイン
- CUDA out of memory(GPUのメモリ不足)への対応
それぞれを下記で説明します。
Weights & Biases(wandb)の設定
wandbとは、機械学習の実験管理サービスです。
個人利用の場合は、無料で使えます。
機械学習において、次のようなグラフを見たことがあるでしょう。
DISCOARTでは、wandbに対応しています。
そして、デフォルトでは利用する前提の設定となっています。
もちろん、利用する場合はアカウント登録が必要です。
設定は、次の環境変数を用います。
- WANDB_MODE
- WANDB_API_KEY
WANDB_MODEには、デフォルトでは「online」が設定されています。
「disabled」に設定すると、wandbを利用しないようになります。
WANDB_API_KEYには、次のような文字列を設定します。
もちろん、WANDB_MODEが「online」のときにのみ意味があります。
なお、wandbを利用しなくてもDISCOARTは利用できます。
Jina AIへのログイン
Jina AIは、DISCOARTを開発している企業です。
ここで言うログインとは、この企業の提供するサービスへのログインのことです。
Jina Hub
https://hub.jina.ai/
未ログインあれば、動作の度に次のように表示されます。
ログイン方法については、次のページで説明されています。
https://github.com/jina-ai/jina-hubble-sdk
なお、Jina AIへログインしなくてもDISCOARTは利用できます。
CUDA out of memory(GPUのメモリ不足)への対応
これが、最も厄介です。
放置すると、エラーが出てDISCOARTが動きません。
エラーが出ないなら、何もする必要はありません。
しかし、次のようなエラーが出ると対策を実施する必要があります。
RuntimeError: CUDA out of memory. Tried to allocate 960.00 MiB (GPU 0; 8.00 GiB total capacity; 5.06 GiB already allocated; 0 bytes free; 6.63 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF
このメッセージでは、GPUのメモリが不足していることを伝えています。
GPUのメモリが8GBでは、エラーが出ることを確認済みです。
(※正確には、各自の環境毎に異なる)
このエラーが出る場合は、環境変数のPYTORCH_CUDA_ALLOC_CONFを設定する必要があります。
以上、DISCOARTの設定を説明しました。
次は、DISCOARTの動作確認を説明します。
DISCOARTの動作確認
DISCOARTの動作確認は、次の条件で行います。
- wandbは利用しない(disabled)
- Jina AIにはログインしない
- デフォルトではCUDA out of memoryエラーが出る
上記条件においては、次のコードで動作確認が可能です。
import os from discoart import create os.environ['WANDB_MODE'] = "disabled" os.environ['PYTORCH_CUDA_ALLOC_CONF'] = "max_split_size_mb:500" da = create( text_prompts='The Dog from Hell', n_batches=1 )
上記コードでは、「The Dog from Hell」で画像を1枚だけ作成するようにDISCOARTへ指示しています。
デフォルトでは、「n_batches=4」であるため4枚の画像が作成されます。
コードを実行すると、実行条件が表示されます。
「discoart-931caa47203911ed992e7085c2f05309」は、処理IDになります。
discoart-931caa47203911ed992e7085c2f05309 ┌────────────────────────────┬────────────────────────────────────────────────┐ │ Argument │ Value │ ├────────────────────────────┼────────────────────────────────────────────────┤ │ batch_name │ None │ │ batch_size │ 1 │ │ clamp_grad │ True │ │ clamp_max │ 0.05 │ │ clip_denoised │ False │ │ clip_guidance_scale │ 5000 │ │ clip_models │ ['ViT-B-32::openai', 'ViT-B-16::openai', │ │ │ 'RN50::openai'] │ │ clip_models_schedules │ None │ │ cut_ic_pow │ 1.0 │ │ cut_icgray_p │ [0.2]*400+[0]*600 │ │ cut_innercut │ [4]*400+[12]*600 │ │ cut_overview │ [12]*400+[4]*600 │ │ cut_schedules_group │ None │ │ cutn_batches │ 4 │ │ diffusion_model │ 512x512_diffusion_uncond_finetune_008100 │ │ diffusion_model_config │ None │ │ diffusion_sampling_mode │ ddim │ │ display_rate │ 1 │ │ eta │ 0.8 │ │ gif_fps │ 20 │ │ gif_size_ratio │ 0.5 │ │ image_output │ True │ │ init_image │ None │ │ init_scale │ 1000 │ │ n_batches* │ 1 │ │ name_docarray* │ discoart-931caa47203911ed992e7085c2f05309 │ │ on_misspelled_token │ ignore │ │ perlin_init │ False │ │ perlin_mode │ mixed │ │ rand_mag │ 0.05 │ │ randomize_class │ True │ │ range_scale │ 150 │ │ sat_scale │ 0 │ │ save_rate │ 20 │ │ seed* │ 1031524948 │ │ skip_event │ None │ │ skip_steps │ 0 │ │ steps │ 250 │ │ stop_event │ None │ │ text_clip_on_cpu │ False │ │ text_prompts* │ The Dog from Hell │ │ transformation_percent │ [0.09] │ │ truncate_overlength_prompt │ False │ │ tv_scale │ 0 │ │ use_horizontal_symmetry │ False │ │ use_secondary_model │ True │ │ use_vertical_symmetry │ False │ │ visualize_cuts │ False │ │ width_height │ [1280, 768] │ └────────────────────────────┴────────────────────────────────────────────────┘ showing all args (bold * args are non-default)
警告などが表示された後に、次のような表示になればひとまずOKです。
6%|▌ | 15/250 [01:08<16:56, 4.32s/it]
あとは、とにかく待ちましょう。
1枚の画像を作成するのには、20分程度はかかっています。
GPUのメモリに余裕があれば、この時間がもっと短くなるのでしょう。
処理が終わったら、作成できた画像が表示されます。
そして、「discoart-〇〇」(処理ID)という名前のディレクトリが作成されています。
そのディレクトリでは、次のように多くの画像を確認できます。
処理過程の画像が、各ステップごとに保存されています。
この場合では、「0-done-0.png」が完成画像となります。
0-done-0.png
どうでしょうか?
「The Dog from Hell」と言えば、そんな感じにも見えます。
また、DISCOARTは同じ画像を作成することはありません。
つまり、毎回異なる画像が作成されるということです。
異なる画像と言っても、似たような画像にはなりますけどね。
以上、DISCOARTの動作確認を説明しました。