【備忘録】Stable DiffusionをWindows10(VRAM 6GB)で動かしてみる【Python】

  • URLをコピーしました!

2022年8月にStable Diffusion をWindows10で動かしたログです。

  • Stable Diffusionは半精度版
  • Anacondaなし
  • Diffusersを使用
  • GPU:GeForce RTX 3060 Laptop(6GB)
目次

準備

Hugging Faceのアクセストークン

  • huggingface.co に登録(Sign Up)する
  • Profile → Access Tokens → New Token でトークンを生成
    • Role は read でOK

Windows10にPythonを入れる

  • コマンドプロンプトで pythonと入力
    • pythonが入っていないWindows10なら、Microsoft Storeが立ち上がってインストールできるのでインストールする
    • ※試した当時:バージョン3.10

GPU関連の準備

  • CUDA Toolkitのインストール(11.7)
    • CUDA Toolkit 11.7 Downloads
    • インストール時とくに設定変更等はせず、そのまま入りました。
    • PC再起動後以下のコマンドでインストール確認
    • nvcc -V
  • cuDNNのインストール(for CUDA 11.x)
    • cuDNN Download
      • ダウンロード時にDeveloper登録が必要。
      • Game ReadyドライバーをGoogleアカウントで登録していたので
        上記ページにアクセス →Googleアカウントのメールアドレス入力 → More login options → Log in with Google と進んでいって、Developerに登録 … という流れ
    • for CUDA 11.x のほうをダウンロード
    • 展開したファイル・フォルダをまるごと CUDA Toolkitのインストールフォルダに入れる
      • C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.7
    • パスを通す
      • コマンドプロンプト(管理者として実行)で
        Start C:\Windows\system32\rundll32.exe sysdm.cpl, EditEnvironmentVariables
      • システム環境変数 の 新規… に
        変数名:CDNN_PATH
        変数値:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.7
      • (PC再起動したほうがいいかも)
      • コマンドプロンプトで where cudnn64_8.dll と打って、パスが帰ってくればOK
  • pyTorchのインストール
    • PyTorch
    • INSTALL PYTORCH の画面より、Stable・Windows・Pip・Python・CUDA 11.6を選んでコマンドをコピー
    • コマンドプロンプト(管理者がいいかも)でコマンドを実行
  • コマンドプロンプトで以下を順番に実行
    • python
    • import torch
    • torch.cuda.is_available()
    • これで「True」が表示されれば成功&準備完了
  • うまくいかないとき…
    • GPUドライバーは最新か確認
    • PyTorchを入れなおす pip uninstall torch してからもう一度
    • PCを再起動する

IDLEで pyファイルを作って実行する

ここから先は1行ずつコマンドプロンプトでやってもいいのですが、何度も実行するならファイルを残したほうが便利そうなのでpyファイルにします。

IDLE で以下のファイル(run.py)を作って適当なディレクトリに保存します。

import torch
from torch import autocast

from diffusers import StableDiffusionPipeline
YOUR_TOKEN="ここにHugging Faceのアクセストークン"
pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", revision="fp16", torch_dtype=torch.float16, use_auth_token=YOUR_TOKEN)
pipe = pipe.to("cuda")

prompt = "a girl, illustration, Anime"

with autocast("cuda"):
  image = pipe(prompt)["sample"][0]

image.save(f"girl.png")

保存したらそのままIDLEで Run → Run Module します。
すると IDLE Shell が開いて、しばらく何も起きないかもしれませんが待ちます。

最後に以下のようなものが表示されて、止まったら

pyファイルを保存したのと同じディレクトリに画像が生成されます。

うまくいかない場合

うまくいかない場合は、初回インストールはコマンドラインでやった方がいいかもしれないので
以下をコマンドプロンプト(管理者)で一行ずつ実行してださい。

python
import torch
from diffusers import StableDiffusionPipeline
YOUR_TOKEN="ここにHugging Faceのアクセストークン"
pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", revision="fp16", torch_dtype=torch.float16, use_auth_token=YOUR_TOKEN)

ここで初回はダウンロードが走り、ダウンロードされている状態なら上記のpyファイルをIDLEで実行で問題ないはずです。

うまくいかない場合2

CUDA out of memory がでたらグラボのメモリが足りません…。
初期設定の512×512の場合VRAM 6GBあれば足りると思いますが画像サイズを後述の方法で大きくして出力するとうまくいかないかも。

RuntimeError: CUDA out of memory. Tried to allocate 2.00 GiB (GPU 0; 6.00 GiB total capacity; 4.66 GiB already allocated; 0 bytes free; 4.71 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
VRAM 6GBだとカツカツです

画像のサイズなどの変更

縦長の画像
with autocast("cuda"):
  image = pipe(prompt, height=768, width=256)["sample"][0]

そのほかの設定:詳細はこちら Stable Diffusion with 🧨 Diffusers

  • guidance_scale
    • プロンプトへの一致度。通常7~8.5の間が適している。(デフォルト7.5)
  • num_inference_steps
    • ノイズ除去(推論)のステップ数。デフォルト50。
  • generator
    • シード値。固定値を入れておくと(ほぼ?)同じ画像が出力できる。
prompt = "a girl, illustration, Anime"
generator = torch.Generator("cuda").manual_seed(1024)

with autocast("cuda"):
  image = pipe(prompt, height=768, width=256, guidance_scale=12, num_inference_steps = 100, generator=generator)["sample"][0]
シード値を固定してほかの設定を変えた2つの画像
よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

コメントは日本語で入力してください。(スパム対策)

CAPTCHA

目次