Запускаем Stable Diffusion на Windows

Статья рассчитана на людей, умеющих пользоваться консолью и имеющих базовые навыки использования питона, и желающих настраивать пайплайн кодом

Требования

Все инструкции будут написаны из расчета на то что на компьютере установлена windows 10 и nvidia GPU, желательно 30xx-40xx c актуальными драйверами и установленным python >= 3.10

Устанавливаем CUDA

Тут все довольно просто — переходим по ссылке

скачиваем установщик, устанавливаем тулкит

Создаем проект

Я буду использовать PyCharm, но можно использовать любую удобную вам IDE — главное создать отдельный virtualenv для проекта, чтобы все нужные библиотеки не замусорили глобальное окружение питона

создаем файл main. py и пишем там такой код

import argparse import torch from diffusers import DiffusionPipeline import os if __name__ == '__main__': parser = argparse.ArgumentParser(description='arg parser') parser.add_argument('-i', '--input', required=True, type=argparse.FileType('r')) args = parser.parse_args() queries = args.input.readlines() model = DiffusionPipeline.from_pretrained( "stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16, variant="fp16", use_safetensors=True ) model.to("cuda") if not os.path.exists('images'): os.makedirs('images') i = 0 for prompt in queries: print(f'готовимся генерировать картинку') image = model(prompt=prompt).images[0] image.save(f"images/{i}-base.png") i += 1

Данный скрипт использует модель stabilityai/stable-diffusion-xl-base-1.0 для генерации изображения и ожидает на вход файл со списком промптов — по одному промпту на строчку

Теперь нужно установить библиотеки — важно что в консоли нужно активировать venv проекта (pycharm делает это сам, если открыть терминал прямо в нем)

Как понять что venv активен? в терминале будет написано как-то так

(venv) PS C:\Users\…\stable-diffusion>

pip install diffusers transformers accelerate scipy safetensors torch

Далее нужно узнать версию cuda tookit командой

(venv) PS C:\Users\...\stable-diffusion> nvcc --version nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2023 NVIDIA Corporation Built on Fri_Nov__3_17:51:05_Pacific_Daylight_Time_2023 Cuda compilation tools, release 12.3, V12.3.103 Build cuda_12.3.r12.3/compiler.33492891_0

Как видно из аутпута команды — у меня установлена версия 12.3

Теперь идем на сайт pytorch

и выбираем установщик для наиболее подходящей версии, в моем случае это

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

дожидаемся установки пакета, стоит отметить что все библиотеки могут занять под 20Гб места на диске

Запускаем код

Создаем рядом с кодом файлик queries. txt с промптами

теперь в терминале в venv запускаем команду

(venv) PS C:\Users\...\stable-diffusion> python main.py -i queries.txt

И ждем. Ждем скорее всего довольно долго. Если у видеокарты меньше 8Гб памяти — то код может упасть из-за нехватки памяти, в моем случае было занято около 7Гб видеопамяти

Скрипт сначала скачает локально веса модели — это порядка 10Гб, затем начнет работу. При перезапусках скрипта веса модели не будут скачиваться — потому что они уже сохранились на жестком диске.

Если в ходе работы скрипта он падает с ошибкой AssertionError: torch not compiled with cuda enabled то код на видит cuda toolkit, попробуйте его переустановить и переустановить pytorch с сайта

66
20 комментариев

Или можно поставить Автоматик A1111

3

Извиняюсь, а чем это лучше варианта использовать готовый automatic1111?(ну и вообще других фронтендов)
Там просто куча всяких полезных плюшек вместе с удобный гуи, поддержка лор, удобно сейвить все, батчи, инпейнты

2

так и тут можно) у тебя есть код - делай что хочешь, какие угодно модели, какие угодно пред\пост обработки

1

Но в Автоматике есть api..

1

ну да, но тут статья скорее про то как это все сделать самому из кода
там выше в комментах подали прикольную идею про расписывание как к этому подключить всякие лоры и инпейнты - возможно я ее даже напишу

1

Я в ахуе. Нейродебилы про автоматик для васянов не знают?

так там дисклеймер что статья не для васянов)