最先端の機械学習モデルを利用できるDiffusersのインストール

機械学習

「最新の学習済みモデルをPyTorchで利用したい」
「画像や音声を扱った機械学習をPythonで行いたい」

このような場合には、Diffusersがオススメです。
この記事では、Diffusersについて解説しています。

本記事の内容

  • Diffusersとは?
  • Diffusersのシステム要件
  • Diffusersのインストール
  • Diffusersの動作確認

それでは、上記に沿って解説していきます。

Diffusersとは?

Diffusersは、画像や音声に対応した事前学習済みの拡散モデルを提供します。
そして、Diffusersは拡散モデルの推論と学習のためのモジュール式ツールボックスとして機能します。

これが、公式におけるDiffusersの説明です。
簡単に言うと、Diffusersは機械学習を行う上での便利ツールだと言えます。

Diffusersを使えば、モデルのダウンロードも簡単にできます。
わざわざ自分でモデルをダウンロードして、設置するなどの作業が不要になります。

また、HuggingFaceがDiffusersを開発しています。
そのため、利用できるモデルの種類も豊富です。

とにかく、目新しい先端のモデルを利用したいなら、Diffusersはオススメと言えます。

以上、Diffusersについて説明しました。
次は、Diffusersのシステム要件を説明します。

Diffusersのシステム要件

現時点(2022年8月末)でのDiffusersの最新バージョンは、0.2.4となります。
この最新バージョンは、2022年8月23日にリリースされています。

更新履歴を見るとわかるように、更新は随時行われています。

まだまだ、開発途上ということがわかります。
そんなDiffusersのシステム要件は、以下に注目します。

  • OS
  • Pythonバージョン
  • PyTorch
  • Transformers

OS

サポートOSに関しては、以下を含むクロスプラットフォーム対応です。

  • Windows
  • macOS
  • Linux

Pythonバージョン

サポート対象となるPythonのバージョンは、以下となっています。

  • Python 3.6
  • Python 3.7
  • Python 3.8
  • Python 3.9

これは、以下のPython公式開発サイクルとは少しだけズレがあります。

バージョンリリース日サポート期限
3.62016年12月23日2021年12月23日
3.72018年6月27日2023年6月27日
3.82019年10月14日2024年10月
3.92020年10月5日2025年10月
3.102021年10月4日2026年10月

ここでは、Python 3.7以降の利用を推奨しておきます。
なお、Python 3.10でもDiffusersのインストールは問題ありません。

PyTorch

Diffusersでは、PyTorchが必須です。
バージョンは、1.4以降であれば大丈夫だと記載されています。

しかし、できる限りで最新のモノを利用するようにしましょう。
加えて、PyTorchはGPU版を利用することをオススメします。

CPU版PyTorchでも、Diffusersが動くことは動きます。
ただ、GPU版PyTorchと比べると明らかに処理速度は落ちるでしょう。

そもそも、Diffusersは画像や音声に特化していますからね。
GPU版PyTorchのインストールについては、次の記事で解説しています。

Transformers

Diffusersのインストール時点では、Transformersは必須ではありません。
しかし、Diffusersを動かす時点ではほぼTransformersは必須です。

Diffusersのサンプルコードを動かした時点、次のようなエラーが表示されます。

StableDiffusionPipeline requires the transformers library but it was not found in your environment. 
You can install it with pip: `pip install transformers`

そのため、システム要件としてTransformersを載せておきます。
Transformersのインストールについては、次の記事で解説しています。

以上、Diffusersのシステム要件を説明しました。
次は、Diffusersのインストールを説明します。

Diffusersのインストール

Diffusersのインストールは、Python仮想環境の利用をオススメします。
Python仮想環境は、次の記事で解説しています。

検証は、次のバージョンのPythonで行います。

> python -V 
Python 3.10.4

まずは、現状のインストール済みパッケージを確認しておきます。
事前にGPU版PyTorchとTransformersがインストール済みです。

> pip list
Package            Version
------------------ ------------
certifi            2022.6.15
charset-normalizer 2.1.1
colorama           0.4.5
filelock           3.8.0
huggingface-hub    0.9.0
idna               3.3
numpy              1.23.2
packaging          21.3
Pillow             9.2.0
pip                22.2.2
pyparsing          3.0.9
PyYAML             6.0
regex              2022.8.17
requests           2.28.1
setuptools         65.2.0
tokenizers         0.12.1
torch              1.12.1+cu113
torchaudio         0.12.1+cu113
torchvision        0.13.1+cu113
tqdm               4.64.0
transformers       4.21.1
typing_extensions  4.3.0
urllib3            1.26.12
wheel              0.36.2

次にするべきことは、pipとsetuptoolsの更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。

python -m pip install --upgrade pip setuptools

では、Diffusersのインストールです。
Diffusersのインストールは、以下のコマンドとなります。

pip install diffusers

Diffusersのインストールでは、次のパッケージが追加されます。

diffusers-0.2.4 
importlib-metadata-4.12.0
zipp-3.8.1

以上、Diffusersのインストールを説明しました。
次は、Diffusersの動作確認を説明します。

Diffusersの動作確認

Diffusersの動作確認を行います。
動作内容は、テキストから画像を生成モノとなります。

from diffusers import DiffusionPipeline

model_id = "CompVis/ldm-text2im-large-256"

# load model and scheduler
ldm = DiffusionPipeline.from_pretrained(model_id)

# run pipeline in inference (sample random noise and denoise)
prompt = "A painting of a squirrel eating a burger"
images = ldm([prompt], num_inference_steps=50, eta=0.3, guidance_scale=6)["sample"]

# save images
for idx, image in enumerate(images):
    image.save(f"squirrel-{idx}.png")

上記コードを実行すると、初回時であればかなりの時間待たされます。
それは、指定している学習済みモデルのダウンロードに時間がかかるからです。
(※2回目以降は、モデルのダウンロードは省略されます)

コードを実行した結果、次のように100%となれば処理は完了となります。

{'set_alpha_to_one'} was not found in config. Values will be initialized to default values.
{'cross_attention_dim'} was not found in config. Values will be initialized to default values.
100%|██████████| 50/50 [01:54<00:00,  2.29s/it]

そして、次のような画像がディレクトリ上に作成されています。

squirrel-0.png

画像の内容は、ランダムのため同じモノは表示されないはずです。
とにかく、画像が設定したテキスト通りであれば成功と言えるでしょう。

prompt = "A painting of a squirrel eating a burger"

ここのテキストや画像名を変更して、再度コードを実行してみましょう。
「squirrel」と「dog」に変更した結果、次のような画像が作成されました。

dog-0.png

確かに、犬がハンバーガーを食べてはいます・・・
リスみたいには、上手くはいかないようですね。

以上、Diffusersの動作確認を説明しました。

タイトルとURLをコピーしました