Open8

stable diffusion

IsamuIsamu

https://huggingface.co/ByteDance/SDXL-Lightning
を試す。

pipは追加不要。

動かすとcudaのエラー。

cuda をmpsに置き換える

import torch
from diffusers import StableDiffusionXLPipeline, UNet2DConditionModel, EulerDiscreteScheduler
from huggingface_hub import hf_hub_download
from safetensors.torch import load_file

base = "stabilityai/stable-diffusion-xl-base-1.0"
repo = "ByteDance/SDXL-Lightning"
ckpt = "sdxl_lightning_4step_unet.safetensors" # Use the correct ckpt for your step setting!                                 

# Load model.                                                                                                                
unet = UNet2DConditionModel.from_config(base, subfolder="unet").to("mps", torch.float16)
unet.load_state_dict(load_file(hf_hub_download(repo, ckpt), device="mps"))
pipe = StableDiffusionXLPipeline.from_pretrained(base, unet=unet, torch_dtype=torch.float16, variant="fp16").to("mps")

# Ensure sampler uses "trailing" timesteps.                                                                                  
pipe.scheduler = EulerDiscreteScheduler.from_config(pipe.scheduler.config, timestep_spacing="trailing")

# Ensure using the same inference steps as the loaded model and CFG set to 0.                                                
pipe("A girl smiling", num_inference_steps=4, guidance_scale=0).images[0].save("output.png")

IsamuIsamu

次は動画を試してみる
text-to-videoで適当の選ぶ

https://huggingface.co/cerspense/zeroscope_v2_576w

コピペ。

    raise ImportError("`enable_model_cpu_offload` requires `accelerate v0.17.0` or higher.")
ImportError: `enable_model_cpu_offload` requires `accelerate v0.17.0` or higher.

となる。

pip install accelerate

して再度実行

    raise AssertionError("Torch not compiled with CUDA enabled")
AssertionError: Torch not compiled with CUDA enabled
pipe = pipe.to("mps")

を追加しても変わらず。

疑問

  • CUDA以外で動くかどうか、なにで判断すれば良い?それとも全てmpsを指定すれば動く?
  • mpsで指定すれば動く場合、その書き方はどこを見れば良い?
IsamuIsamu

diffusers, pytouch(touch), transformar, accelerateあたりは、まとめと、tipsがあるとよいかも。

IsamuIsamu

動画は一旦やめてimageへ

web uiで使ったmodelを試してみる

https://huggingface.co/Justin-Choo/epiCRealism-Natural_Sin_RC1_VAE

from diffusers import DiffusionPipeline
pipe = DiffusionPipeline.from_pretrained("Justin-Choo/epiCRealism-Natural_Sin_RC1_VAE")

# for M1 mac
pipe = pipe.to("mps")
pipe.enable_attention_slicing()

prompt = "polaroid photo, night photo, photo of 24 y.o beautiful woman, pale skin, bokeh, motion blur"

# warmup for mac
pipe(prompt, num_inference_steps=1)

image = pipe(prompt).images[0]

image.save("./episode3.jpg")

最初に作ったサンプルと組み合わせてできた

# from diffusers import StableDiffusionPipeline
# pipe = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5")

from diffusers import DiffusionPipeline
pipe = DiffusionPipeline.from_pretrained("Justin-Choo/epiCRealism-Natural_Sin_RC1_VAE")

最初とimportするものが少し異なる。これの差分は何?
他はpipeの処理はほぼ同様で動く。