Оптимизируем и ускоряем Automatic1111, полный гайд

Оптимизируем и ускоряем Automatic1111, полный гайд

В данном гайде мы разберем все наиболее доступные способы ускорения и оптимизации работы Automatic1111. Указанные здесь способы пригодятся для абсолютно всех видеокарт вплоть до RTX 4090.

Инструкции будут указаны для актуальной версии автоматика, если у вас старая — обновитесь.

Материал подготовлен телеграм каналом Neurogen News. Здесь я публикую новости по нейронным сетям, релизы новых интересных решений и расширений, а также гайды по SD.

Обновляем драйвера видеокарты

Самый базовый, но и самый основной шаг. Время от времени работа драйверов со Stable Diffusion улучшается, что позволяет получить увеличенную скорость генераций.

Отключаем планирование графического процессора

По неизвестной на данный момент причине, планирование графического процессора с аппаратным ускорением в Windows 10 и 11 вызывает серьёзную просадку производительности на видеокартах Nvidia (возможно и на других тоже, к сожалению, нет информации подтверждающей или отрицающей это) .

Отключить ее можно следующим образом:

Откройте Параметры экрана. В Windows 11 в настройках нажмите «Графика» в разделе «Сопутствующие параметры», а в Windows 10 — «Настройки графики» ниже раздела «Несколько дисплеев». В Windows 11 дополнительно перейдите в раздел «Изменение стандартных параметров». Отключите, если у вас включена эта функция и перезагрузите ПК.

Оптимизируем и ускоряем Automatic1111, полный гайд
Оптимизируем и ускоряем Automatic1111, полный гайд

Настраиваем переменные в bat файле webui-user.bat

Если у вас видеокарта с 8 Gb видеопамяти и более:

Открываем webui-user. bat в блокноте или любом другом текстовом редакторе.

В строке

set COMMANDLINE_ARGS=

указываем следующие значения:

  • Если у вас видеокарта поколения RTX либо карта от AMD:
set COMMANDLINE_ARGS= --opt-sdp-attention --upcast-sampling --opt-channelslast

opt-sdp-attention — включает метод перекрестного внимания SDP, встроенный в Torch 2.0 и 2.1. Он позволяет эффективнее работать с видеопамятью и увеличивает скорость генерации.

upcast-sampling — выборка по восходящему потоку. Не имеет эффекта при использовании --no-half. Обычно дает результаты, аналогичные --no-half, с лучшей эффективностью при использовании меньшего объема памяти. Обычно дает небольшое ускорение.

opt-channelslast — Неоднозначный пункт. Активирует альтернативный режим работы с видеопамятью в torch, должно ускорить генерацию, но на слабых системах или системах с процессорами с низкой частотой или старой архитектурой — может вызывать замедление. Поэтому индивидуально.

  • Если у вас видеокарта поколения GTX:
set COMMANDLINE_ARGS= --xformers --upcast-sampling

xformers — метод перекрестного внимания от Meta (Facebook). Также улучшает работу с видеопамятью и ускоряет генерацию, как и SDP. По заявлениям пользователей, лучше работает на слабых картах чем SDP.

Также, для всех карт Nvidia, стоит добавить следующие строки:

set CUDA_MODULE_LOADING=LAZY

Данная переменная активирует режим отложенной загрузки ненужных модулей CUDA. Направлено на экономию видеопамяти.

set NUMEXPR_MAX_THREADS=16

где 16 — кол-во потоков вашего процессора.

set PYTORCH_CUDA_ALLOC_CONF=garbage_collection_threshold:0.9,max_split_size_mb:512

Запрещает torch разбивать блоки, превышающие этот размер (в МБ). Это может помочь предотвратить фрагментацию и может позволить выполнять некоторые пограничные рабочие нагрузки без нехватки памяти.

Таким образом, ваш webui-user. bat должен иметь примерно следующее параметры:

@echo off set PYTHON= set GIT= set VENV_DIR= set CUDA_MODULE_LOADING=LAZY set NUMEXPR_MAX_THREADS=16 set PYTORCH_CUDA_ALLOC_CONF=garbage_collection_threshold:0.9,max_split_size_mb:24 set COMMANDLINE_ARGS= --opt-sdp-attention --upcast-sampling call webui.bat

Настройки в Automatic1111

Заходим в Settings, переходим в Sampler Parameters, и для ползунка Negative Guidance minimum sigma выставляем значение 3. Сохраняем.

Данный твик ускоряет генерацию за счет снижения значения cfg для негативного промта под конец генерации.

Устанавливаем Token Merging (ToMe)

ToMe позволяет ускорить генерацию с небольшим падением детализации изображения, за счет объединения некоторых избыточных токенов.

Заходим в Extentions, переходим в Install from url и вставляем следующую ссылку:https://github. com/SLAPaper/a1111-sd-webui-tome и нажимаем Install. После установки появится сообщение, что установка закончена. Перезапускаем автоматик. По умолчанию, ToMe будет активирован.

Подробнее об установке и работе ToMe я рассказывал в следующем видео:

(Опционально) Отключаем Live Preview

Предпросмотр замедляет основной процесс генерации, и если вы хотите выжать еще немного скорости — отключите его. Зайдите в Settings, перейдите в Live previews и уберите галки на Show live previews of the created image и Show previews of all images generated in a batch as a grid. Примените настройки.

(Опционально) Используем модели, основанные на SD 2.1

По моим личным наблюдениям и тестам на RTX 3060 Ti и RTX 4090, а также по наблюдениям админов других тематических телеграм каналов, после майского обновления Automatic1111 генерация на моделях, основанных на версии SD 2.1 идет быстрее чем на моделях 1.5 при полностью одинаковых параметрах.

При тестировании на 3060 ti, включив все улучшения и оптимизации, я смог дополнительно получить ускорение на 20%.

Обновляем CUDNN

CUDNN — библиотеки от Nvidia для работы с нейронными сетями. Свежие версии этих библиотек, как правило, привносят улучшение производительности, особенно для карт поколения RTX30xx и выше.

Идем сюда: https://developer. nvidia. com/rdp/cudnn-archive выбираем самую актуальную версию для Cuda 11.x и скачиваем архив Local Installer for Windows (Zip)

Открываем архив, переходим в папку bin внутри архива.

Теперь открываем папку, где лежат файлы нашего Automatic1111, переходим в venv\Lib\site-packages\torch\lib

И теперь из нашего архива, где мы открыли папку bin, перекидываем все файлы с заменой в открытую нами папку lib.

Теперь мы обновили библиотеки Cudnn на самую актуальную версию.

Для владельцев видеокарт на 4 и 6 гигабайт видеопамяти

Для тех, у кого 6 гб видеопамяти:

Для начала, вам необходимо выполнить все прошлые шаги.

Ваш webui-user. bat должен выглядеть примерно так:

--opt-sdp-attention --upcast-sampling --no-hashing --always-batch-cond-uncond --medvram
--opt-sdp-attention --upcast-sampling --no-hashing --always-batch-cond-uncond --medvram

то есть, просто допишите параметры:

--no-hashing --always-batch-cond-uncond --medvram

Использование medvram немного снизит производительность, но позволит прилично снизить потребление видеопамяти. Чтобы снижение производительности было еще меньше, можно отключить предпросмотр при генерации в настройках автоматика.

Для тех, у кого 4 гб видеопамяти:

Ваш webui-user. bat должен выглядеть примерно так:

--opt-sdp-attention --upcast-sampling --no-hashing --always-batch-cond-uncond --lowvram
--opt-sdp-attention --upcast-sampling --no-hashing --always-batch-cond-uncond --lowvram

В зависимости от вашей видеокарты, попробуйте opt-sdp-attention заменить на xformers. Сравните результаты. То, что будет лучше работать с вашей картой будет необходимо оставить в bat файле.

Важно: оба параметра (xformers и sdp) не будут работать вместе. Будет активирован только один из них.

Если вы планируете генерировать, используя ControlNet или же использовать hi-res fix, то используете параметр lowram. Это очень сильно снизит производительность, но даст максимально экономное использование видеопамяти. Если же вы не собираетесь использовать вышеописанные функции, можете попробовать использовать также medvram.

***

На данный момент это все основные способы ускорения и оптимизации работы Automatic1111. Есть еще дополнительные способы, например, использовать linux вместо windows, или использовать wsl2, но они слишком сложные для обычного пользователя Stable Diffusion. При появлении новых статья будет дополняться.

***

4141
25 комментариев

Оптимизируем и ускоряем Automatic1111, полный гайдПокупаем 4090.
Весь гайд :)

3
Ответить

Окунулся мир тензорных вычислений, и теперь уменя от дух до трёх версий одинаковых пакетов , тtorch и , Cudadnn и тд. Из-за разных гуёв.
Спасибо за статью некоторых моментов не знал ...

1
Ответить
Автор

Новый репозиторий - новая виртуальная среда - заново ставишь все пакеты.
Та же самая история, по идее можно заставить не использовать скрипты venv, а скормить то, что стоит в системе по умолчанию, но ведь кто-то что-то обязательно своей обновой сломает)

Ответить

Negative Guidance minimum sigma выставляем значение 3. Сохраняем.Данный твик ускоряет генерацию за счет снижения значения cfg для негативного промта под конец генерации.

Вот это кстати нужно аккуратнее, например на чекпоинтах AOM качество итоговой картинки, яркость, контрастность оооочень сильно зависит от пачки стандартных для модели негативных промтов. На выходе с это настройкой получаем более блёклые цвета и где то то проёбанную контрастность местами. Короче разница видна прям невооруженным глазом. Стоит ли небольшое ускорение этого? Каждый решает сам, я вот не стал включать.

1
Ответить

А что скажете на ситуацию, когда SD2.1 генерит карикатуры вместо реальных картинок по промпту? На SD 1.5 такой херни нет. Предполагаю, что это из-за того, что SD2.1 не умеет нормально понимать 512х512 генерацию?
Или там с кастомным диффузором шаманить надо?

Ответить

Разве на новом Автоматике с torch2.0 нужно менять cudnn?

Ответить
Автор

Статью писал с заделом на будущее. Но сейчас там стоят 8.7 из коробки, а актуальные - 8.9.

1
Ответить