Running stable diffusion in a singularity container
Ben Swift
September 2, 2022
title: "Running stable diffusion in a singularity container" description: "Rough notes and a Python script for running Stable Diffusion in a Singularity container with NVIDIA GPUs."
singularity pull docker://nvcr.io/nvidia/pytorch:22.08-py3
git clone https://github.com/lstein/stable-diffusion.git
SINGULARITYENV_CUDA_VISIBLE_DEVICES=0 singularity shell --nv ../sifs/pytorch_22.08-py3.sif
source /opt/conda/etc/profile.d/conda.sh && conda activate ldm
ffmpeg -framerate 30 -patterntype glob -i '.webp' -c:v libx264 -pixfmt yuv420p genesis.mp4 ffmpeg -framerate 5 -pattern_type glob -i '-Joel-*.webp' -c:v libx264 -pix_fmt yuv420p Joel.mp4
ideas for actually packaging this stuff...
import re
import json
import torch
from torch.multiprocessing import spawn
from torch import autocast
from diffusers import StableDiffusionImg2ImgPipeline
from PIL import Image
model_id = "CompVis/stable-diffusion-v1-4"
pipe = StableDiffusionImg2ImgPipeline.from_pretrained(model_id, use_auth_token=True).to("cuda")
def load_json_file(filename):
with open(filename) as f:
return json.load(f)
def slugify(s):
## my kingdom for a pipe operator
s = re.sub(r" ", "_", s)
s = re.sub(r"[',:]", "", s)
return s
def verse_generator(book):
for chapter in load_json_file(f"../Bible-kjv/{book}.json")["chapters"]:
for verse in chapter["verses"]:
yield (book, chapter["chapter"], verse["verse"], verse["text"])
def generate(prompt, init_image):
with autocast("cuda"):
return pipe(prompt, init_image)["sample"][0]
def generate_book_video(book):
image = Image.new("RGB", (512, 512), color = "white")
for i, verse in enumerate(verse_generator(book)):
print(verse)
image = generate(verse[3], image)
image.save(f"output/{i:04d}-{verse[0]}-{verse[1]}-{verse[2]}.webp")
if __name__ == "__main__":
books = load_json_file("../Bible-kjv/Books.json")
generate_book_video("Joel")
#spawn(generate, ("purple ball", img), 9)
Discussion in the ATmosphere