Предисловие
Stable Diffusion — нейронная сеть, которая может превратить ваш текст в картинку, если уж совсем по простому. Но проблема вытекает из реализации PyTorch, который основан на технологии CUDA. И как же быть?
Использование CPU
InvokeAI дало возможность проводить вычисления на процессоре, вместо видеокарты. На своих 16 потоках картинка в 512×512 генерировалась 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.
ссылка на оригинал статьи https://habr.com/ru/post/714074/
Добавить комментарий