Предисловие
Stable Diffusion - нейронная сеть, которая может превратить ваш текст в картинку, если уж совсем по простому. Но проблема вытекает из реализации PyTorch, который основан на технологии CUDA. И как же быть?
Использование CPU
InvokeAI дало возможность проводить вычисления на процессоре, вместо видеокарты. На своих 16 потоках картинка в 512x512 генерировалась 5 минут, а то и больше. Такой вариант нам не подходит...
AMD ROCm
ROCm - это ретранслятор кода CUDA от компании AMD. Да, он уступает по скорости, но в сравнении с CPU - он работает моментально. ROCm является, пожалуй, лучшим выходом из ситуации, за исключением одного момента, ни о какой поддержки Windows речи не идёт. Так что в этот раз радуются пользователи Linux.
ONNX
Пожалуй, самое универсальное решение в данной ситуации. Библиотека Diffusers предлагает уже готовое решение, где вам остаётся лишь отправлять ваши запросы простым Python скриптом. Имеет несколько вариантов работы:
CPU
DirectML (DirectX 12)
CUDA
Однако, не всё так просто. Данная реализация не может в VAE, LoRA, Upscale (на момент написания был открыт PR). Плюс, помимо этого вы должны конвертировать ваши .ckpt модели в ONNX формат.
ONNX и ноутбуки
Один весьма интересный момент. Если Ваш ноутбук имеет GPU в процессоре:
Тогда есть вероятность, что из коробки у Вас запустить не выйдет. У DirectX есть одна проблема, когда он берёт GPU Device 0, у которой ~512mb VRAM и ONNXRuntime просто словит исключение. Для этого придётся пройтись поискам по файлам в надежде найти вызов функции InferenceSession и прописать ей в вызове ID вашей дискретной видеокарты ручками, добавив provider_options=[{'device_id': 1}].
Примерно может выглядеть так:
ort.InferenceSession(path, providers=[provider], provider_options=[{'device_id': 1}], sess_options=sess_options)
Upscale (Vulkan)
Как я уже и говорил, ONNX не имеет нативной поддержки Upscale моделей. Однако, есть открытые Vulkan реализации тех же Real-ESRGAN, Real-LSR... Которые работают весьма быстро. Достаточно просто вызвать их из командной строки с правильными параметрами.
Заключение
Теперь, осталось найти лишь подходящую реализацию UI для Stable Diffusion и загрузить upscaler, если вы используете Windows.
12rbah
А скорость генерации на gpu какая(в вашем случае)?