👏

StableDiffusion3 - transformersエラー

2024/06/14に公開

昨日、StableDiffusion3 Mediumがリリースされ、さっそく使用している方もおおくいらっしゃると思います。

私もさっそく使用してみようと、huggingfaceで公開されているコードを実行しようと試みましたが、何やらエラーが出て実行できませんでした。

C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\site-packages\diffusers\models\transformers\transformer_2d.py:34: FutureWarning: Transformer2DModelOutput is deprecated and will be removed in version 1.0.0. Importing Transformer2DModelOutput from diffusers.models.transformer_2d is deprecated and this will be removed in a future version. Please use from diffusers.models.modeling_outputs import Transformer2DModelOutput, instead.
deprecate("Transformer2DModelOutput", "1.0.0", deprecation_message)
Couldn't connect to the Hub: 401 Client Error. (Request ID: Root=1-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)

何やらdiffusersのtransformersで推奨されていないクラスが利用されているようです。
ggってみるとtransformersをアップデートするといいらしいですが(pip install -U transformers)、私はこれで解決しませんでした。

そこで、試行錯誤した結果以下の方法で解決しました。

解決方法

まずtransformer_2d.pyを開きます。
venvを構築している場合は.venv\Lib\site-packages\diffusers\models\transformers\transformer_2d.pyにあるはずです。
(vscodeで開発を行っている場合はCtrlキーをクリックしながらエラーメッセージにあるパスをクリックすればコードが開きます)

次に24行目のインポート分を

from ..modeling_outputs import Transformer2DModelOutput

以下に置き換えます

from diffusers.models.modeling_outputs import Transformer2DModelOutput

次に32行目から34行目の以下のクラスをまるごと消します

class Transformer2DModelOutput(Transformer2DModelOutput):
    deprecation_message = "Importing `Transformer2DModelOutput` from `diffusers.models.transformer_2d` is deprecated and this will be removed in a future version. Please use `from diffusers.models.modeling_outputs import Transformer2DModelOutput`, instead."
    deprecate("Transformer2DModelOutput", "1.0.0", deprecation_message)

401 Client Errorが発生した場合

Couldn't connect to the Hub: 401 Client Error. (Request ID: Root=1-666c41a6-16b04d6407b26bd65ab9b4c8;bbe79591-84ea-428a-9d4c-deff8aace19d)

Cannot access gated repo for url https://huggingface.co/api/models/stabilityai/stable-diffusion-3-medium-diffusers.
Access to model stabilityai/stable-diffusion-3-medium-diffusers is restricted. You must be authenticated to access it..
Will try to load from local cache.
(略)
OSError: Cannot load model stabilityai/stable-diffusion-3-medium-diffusers: model is not cached locally and an error occurred while trying to fetch metadata from the Hub. Please check out the root cause in the stacktrace above.

現在(2024/06/14時点)、Stable Diffusion 3は悪用されないよう、HuggingFaceでアカウント登録をしなければいけません。

まずココでトークンを作成します。
※Nameは適当に"StableDiffusion"など、TypeはReadに設定します

次にコンソールでhuggingface-cli loginを実行、Enter your token (input will not be visible):と出てきたら右クリック(ペースト)をします(トークンの保護のため画面上には出ません)。
Add token as git credential? (Y/n) はどっちでもいいです。私はnを選択しました。

これでpython main.pyをすれば実行できるはずです。

GoodLuck!

Discussion