Stable Diffusion и AMD

Предисловие

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/

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *