はじめに
がちもとさんアドベントカレンダー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のインストール
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
4.プログラムの作成
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.プログラムを作成
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 を開く
5.プロンプトを入力しSubmit
1分くらいで生成されました!
お疲れさまでした。