LoginSignup
0
1

SDXL-Turboやーる(Windows 11、CPU)

Last updated at Posted at 2023-12-23

はじめに

がちもとさんアドベントカレンダー23日目の記事です。
今日は、SDXL-Turboを用いてテキストから画像生成します。

開発環境

  • Windows 11 PC
  • Python 3.11

導入

GPUの場合

1.sdxl-turboをクローンします。

git lfs install
git clone https://huggingface.co/stabilityai/sdxl-turbo

2.ライブラリのインストール

pip install diffusers transformers accelerate --upgrade

3.pytorchのインストール

image.png

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

4.プログラムの作成

text2image.py
from diffusers import AutoPipelineForText2Image
import torch

pipe = AutoPipelineForText2Image.from_pretrained("stabilityai/sdxl-turbo", torch_dtype=torch.float16, variant="fp16")
pipe.to("cuda")

prompt = "A cinematic shot of a baby racoon wearing an intricate italian priest robe."

image = pipe(prompt=prompt, num_inference_steps=1, guidance_scale=0.0).images[0]
print(image)

5.python text2image.pyで実行

torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 14.00 MiB. GPU 0 has a total capacty of 6.00 GiB of which 0 bytes is free. Of the allocated memory 5.18 GiB is allocated by PyTorch, and 175.59 MiB is reserved by PyTorch but unallocated. If reserved but unallocated memory is large try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF

GPUが足りませんでした!

CPUの場合

1.ライブラリをインストール

pip install gradio
pip install modin[all]
pip install pydantic --upgrade

2.プログラムを作成

text2image.py
import gradio as gr
import torch
import modin.pandas as pd
import numpy as np
from diffusers import DiffusionPipeline 

device = "cuda" if torch.cuda.is_available() else "cpu"
device = "cpu"
# if torch.cuda.is_available():
#     torch.cuda.max_memory_allocated(device=device)
#     torch.cuda.empty_cache()
#     pipe = DiffusionPipeline.from_pretrained("stabilityai/sdxl-turbo", torch_dtype=torch.float16, variant="fp16", use_safetensors=True)
#     pipe.enable_xformers_memory_efficient_attention()
#     pipe = pipe.to(device)
#     torch.cuda.empty_cache()
# else: 
pipe = DiffusionPipeline.from_pretrained("stabilityai/sdxl-turbo", use_safetensors=True)
pipe = pipe.to(device)
    
def genie (prompt, steps, seed):
    generator = np.random.seed(0) if seed == 0 else torch.manual_seed(seed)
    int_image = pipe(prompt=prompt, generator=generator, num_inference_steps=steps, guidance_scale=0.0).images[0]
    return int_image
    
gr.Interface(fn=genie, inputs=[gr.Textbox(label='What you want the AI to generate. 77 Token Limit.'), 
    gr.Slider(1, maximum=5, value=2, step=1, label='Number of Iterations'), 
    gr.Slider(minimum=0, step=1, maximum=999999999999999999, randomize=True),
    ],
    outputs='image', 
    title="Stable Diffusion Turbo CPU or GPU", 
    description="SDXL Turbo CPU or GPU. Currently running on CPU. <br><br><b>WARNING: This model is capable of producing NSFW (Softcore) images.</b>", 
    article = "If You Enjoyed this Demo and would like to Donate, you can send to any of these Wallets. <br>BTC: bc1qzdm9j73mj8ucwwtsjx4x4ylyfvr6kp7svzjn84 <br>3LWRoKYx6bCLnUrKEdnPo3FCSPQUSFDjFP <br>DOGE: DK6LRc4gfefdCTRk9xPD239N31jh9GjKez <br>SHIB (BEP20): 0xbE8f2f3B71DFEB84E5F7E3aae1909d60658aB891 <br>PayPal: https://www.paypal.me/ManjushriBodhisattva <br>ETH: 0xbE8f2f3B71DFEB84E5F7E3aae1909d60658aB891 <br>Code Monkey: <a href=\"https://huggingface.co/Manjushri\">Manjushri</a>").launch(debug=True, max_threads=80)

3.python text2image.pyで実行

4.http://127.0.0.1:7860 を開く

image.png

5.プロンプトを入力しSubmit

image.png

1分くらいで生成されました!
お疲れさまでした。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1