Stable Diffution実行時に "NansException: A tensor with all NaNs was produced in Unet." エラーが発生する

Stable Diffution実行時に "NansException: A tensor with all NaNs was produced in Unet." エラーが発生する場合の対処法を紹介します。

現象

Stable Diffutionを実行すると実行途中で、次のエラーメッセージが表示されます。
エラーメッセージ
NansException: A tensor with all NaNs was produced in Unet. This could be either because there's not enough precision to represent the picture, or because your video card does not support half type. Try setting the "Upcast cross attention layer to float32" option in Settings > Stable Diffusion or using the --no-half commandline argument to fix this. Use --disable-nan-check commandline argument to disable this check.

直前までは、実行できていた状況でも、パラメーターや設定を変更しただけで上記のエラーが発生する場合もあります。

原因

エラーメッセージより以下のどちらかの原因である可能性が高いです。
  • 画像を表現するのに十分な精度がない
  • ビデオ カードがハーフ タイプをサポートしていない

対処法: Stable Diffusion Web UIの場合

Stable Diffusion Web UIを起動します。[Settings]タブをクリックします。下図の画面が表示されます。


左側のメニューの[Stable Diffusion]の項目をクリックします。


下図の画面に切り替わります。右側のエリアを下にスクロールします。ページの一番下に[Upcast cross attention layer to float32]チェックボックスがあります。


[Upcast cross attention layer to float32]チェックボックスをクリックしてチェックをつけます。


チェック後ページ上部に戻り、[Apply settings]ボタンをクリックします。


再度、画像生成を実行して、"NansException: A tensor with all NaNs was produced in Unet." エラーが解消されるか確認します。

別の対処法: Stable Diffusion Web UIの場合

別の対処法として、--no-half-vaeオプションを指定して起動する方法があります。
webui-user.batのファイルを以下に変更します。
webui-user.bat 変更前 (例)
@echo off

set GIT_PYTHON_REFRESH=quiet

set PYTHON=
set GIT=
set VENV_DIR=
set COMMANDLINE_ARGS=

call webui.bat

COMMANDLINE_ARGS=--no-half-vae または COMMANDLINE_ARGS=--no-half を追加します。
webui-user.bat 変更後 (例)
@echo off

set GIT_PYTHON_REFRESH=quiet

set PYTHON=
set GIT=
set VENV_DIR=
set COMMANDLINE_ARGS=--no-half-vae

call webui.bat

--precision half を利用する場合

以下の設定で、--precision half--no-half-vae を指定すると、設定が競合して起動できないです。
set COMMANDLINE_ARGS=--xformers --precision half --no-half-vae --opt-sdp-attention 
以下のエラーが発生します。
エラーメッセージ
AssertionError: --no-half and --no-half-vae conflict with --precision half

--precision halfを使用する場合は、--disable-nan-check を使用する方法があります。
webui-user.bat 変更後 (例)
@echo off

set GIT_PYTHON_REFRESH=quiet

set PYTHON=
set GIT=
set VENV_DIR=
set COMMANDLINE_ARGS=--xformers --precision half --disable-nan-check --opt-sdp-attention 

call webui.bat

著者
iPentecのメインデザイナー
Webページ、Webクリエイティブのデザインを担当。PhotoshopやIllustratorの作業もする。
掲載日: 2023-05-20
iPentec all rights reserverd.