Увеличиваем производительность автоматика
Актуальность статьи
По состоянию на 10 июля 2023 года автоматик поставляется с относительно-актуальными torch 2.0 и xformers 0.20, в связи с чем использование кастомных версий библиотек не даст существенного прироста к производительности.
Таким образом, большая часть данной статьи является неактуальной. Вы всё ещё можете использовать её как руководство по сборке кастомной версии xformers, но не ожидайте, что это даст вам существенный прирост к производительности автоматика.
Данный гайд написан для Windows. Линуксогоспода могут попытать счастья в обновлении torch/xformers по альтернативному гайду.
Обновляем библиотеки torch, torchvision и xformers
Памятка по обучению
torch 2.0 несовместим с актуальной версией sd_dreambooth_extension (на состояние 16.02.2023). Если вам нужна возможность обучать LoRA или полновесные модели, то у вас есть такие варианты:
- Держать отдельную версию автоматика со старыми либами и использовать её для обучения
- Либо использовать sd-scripts. Подробную информацию можно найти в LoRA-гайде от анонов
Ожидаемое изменение производительности генераций
Обновление либ даёт существенный прирост производительности для 40XX поколения, и менее значительный для 30XX и 20XX.
Нижерасположенная таблица содержит отчёты анонов об изменении производительности после обновления либ.
Видеокарта | Производительность после обновления либ |
---|---|
RTX 4090 | +70% — +100% [1] [2] [3] |
RTX 3080 | -5% — +15% [1] [2] |
RTX 3070 | +15% — +20% [1] |
RTX 3060 | +8% [1] |
RTX 2060 Super | +10% — +15% [1] |
Вариант 1 (простой путь) - используем заранее скомпилированные либы
- Сделайте бекап установленных python-пакетов автоматика, которые установлены в каталоге
/venv
. Они вам пригодятся, если потребуется откатиться на ту версию, которая у вас была до осуществления нижеописанных манипуляций - Открываем консоль в папке с автоматиком и выполняем данную команду. Она необходима для того, чтобы все дальнейшие манипуляции с python-пакетами применялись к текущей директории (где находится установленный автоматик), а не ко всей системе глобально
- Удаляем старые версии либ
- Ставим любой вариант свежих либ тут. Есть вероятность, что какие-то из вариантов могут поломать вам автоматик из-за несовместимости версий/плагинов и т.п. Попробуйте установить другую версию либ, если с самыми свежими не работает.
- На этом всё
Вариант 2 (путь страданий) - используем свежайшие версии torch, torchvision и компилируем xformers из исходников
Disclaimer
Данный вариант требует наличие прямых рук и умение гуглить, если консолька упала с ошибкой. Используйте данную инструкцию на свой страх и риск.
В то время, как последние версии библиотек torch и torchvision ежедневно публикуются в виде скомпилированных пакетов, готовых к установке, xformers актуальных версий поставляется только в виде исходников, так что, для получения последней версии, вам придётся собрать его самому.
Устанавливаем инструменты для компиляции xformers
Для компиляции xformers на вашей машине должны быть установлены Windows SDK и MSVC, которые входят в комплект MS Build tools. Также вам необходим CUDA SDK.
Установка Windows SDK и MSVC Build tools
Качаем MS Build tools с официального сайта Microsoft, запускаем и выбираем вкладку Individual components
В появившемся списке ищем и проставляем галки для компонентов Windows 10 SDK
(либо Windows 11 SDK
, оба варианта будут работать на Windows 10) и MSVC x64/x86 build tools (Latest)
в списке компонентов для установки. Панель справа должна выглядеть попохожей на картинку ниже.
Проверяем, что всё проставили корректно и устанавливаем.
Установка CUDA SDK
Качаем CUDA SDK с официального сайта NVidia и устанавливаем компоненты Development и Runtime.
Получение и компиляция последних версий библиотек
Получаем последние версии torch и torchvision
Необходимо найти актуальные версии библиотек torch и torchvision, билды которых ежедневно публикуются на официальном сайте pytorch.
Чтобы понять, какой файл из списка вам нужен, необходимо понимать структуру имени публикуемых файлов - она отображена на иллюстрации ниже.
Вам необходимо найти библиотеки torch 2.X
и torchvision 0.X
, которые удовлетворяют следующим условиям:
- выпущены как можно позднее (в идеале - сегодня или вчера); билды публикуются каждый день
- собраны под CUDA 11.8
- используют Python 3.10 (эта версия питона используется в автоматике, так что вам нужна именно она, даже если у вас глобально в системе используется более новая версия)
- собраны под вашу платформу
Вы можете скачать их через браузер, либо сохранить http-ссылки на загрузку файлов и потом использовать их напрямую при установке, оба варианта команд, приведённых ниже, являются корректными (не надо их выполнять, это пример):
Устанавливаем свежий torch и torchvision
- Сделайте бекап установленных python-пакетов автоматика, которые установлены в каталоге
/venv
. Они вам пригодятся, если потребуется откатиться на ту версию, которая у вас была до осуществления нижеописанных манипуляций - После того, как нашли (или скачали) нужные нам версии библиотек torch и torchvision, открываем консоль в папке с автоматиком и выполняем данную команду. Она необходима для того, чтобы все дальнейшие манипуляции с python-пакетами применялись к текущей директории (где находится установленный автоматик), а не ко всей системе глобально
- Удаляем старые версии либ (кроме torch и torchvision мы сразу удаляем xformers, который мы соберём позднее)
- Устанавливаем последние версии torch и torchvision, которые мы нашли ранее:
Как только оба файла установились, можете их удалить (если вы скачивали их заранее), их содержимое уже установлено в автоматик.
Компилируем и устанавливаем xformers
Свежие версии xformers поставляются только в виде исходников, поэтому вам придётся скомпилировать их вручную. Для этого необходимо выполнить следующие команды:
Далее необходимо выполнить саму команду компиляции xformers. Используйте один из вариантов команды ниже, смотри пояснения.
Компиляциия исключительно под текущую архитектуру GPU. Используйте этот вариант, если компилируете либу для себя, без цели шаринга:
Компиляция под все архитектуры GPU. Файл весит в несколько раз больше, длительность компиляции так-же сильно увеличена, но получившуюся сборку можно использовать на любой CUDA-совместимой видеокарте:
Скорость компиляции xformers зависит от того, насколько быстрый у вас процессор. На 5900x это занимает минут 5. Собранный пакет окажется в каталоге ./xformers/dist
относительно корневой директории. Скопируйте его путь и выполните:
По завершении данных манипуляций у вас должны быть установлены последние версии torch, torchvision и xformers. Если всё запускается успешно, можете удалить whl-файл и директорию xformers.
Вариант 2.5 (путь страданий, extra) - компилируем xformers вне каталога автоматика
Используйте данную инструкцию если вы не хотите шатать ваш каталог с установленным автоматиком для компиляции xformers. Для этого варианта требования по установленным инструментам компиляции (и к наличию прямых рук) идентичны упомянутым во втором варианте.
- Создайте новый каталог, в котором, в дальнейшем, будут происходить все манипуляции и откройте в нем консоль
- Говорим питону, что любые манипуляции с пакетами должны происходить в текущем каталоге, а не применяться глобально
- Устанавливаем последние версии torch и torchvision. Как их выбрать смотри тут
Возможно, установка torchvision не является необходимой на этом шаге, т.к. xformers от него напрямую не зависит, надо проверить.
- Качаем исходники последней версии xformers и ставим зависимости
- Компилируем xformers. Используйте один из вариантов команды ниже, смотри пояснения
- Компиляциия исключительно под текущую архитектуру GPU. Используйте его, если компилируете либу для себя, без цели шаринга:
- Компиляция под все архитектуры GPU. Файл весит в несколько раз больше, длительность компиляции так-же сильно увеличена, но получившуюся сборку можно использовать на любой CUDA-совместимой видеокарте:
Если всё прошло успешно, то собранный пакет в формате whl окажется в /xformers/dist
относительно корневой директории.
Hardware scheduling
Неоднократно была упомянута информация, что отключение hardware scheduling приводит к увеличению производительности.
Переключатель искать в Settings -> Display -> Graphics settings
.