Увеличиваем производительность автоматика

Актуальность статьи

По состоянию на 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 или полновесные модели, то у вас есть такие варианты:

  1. Держать отдельную версию автоматика со старыми либами и использовать её для обучения
  2. Либо использовать 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 (простой путь) - используем заранее скомпилированные либы

  1. Сделайте бекап установленных python-пакетов автоматика, которые установлены в каталоге /venv. Они вам пригодятся, если потребуется откатиться на ту версию, которая у вас была до осуществления нижеописанных манипуляций
  2. Открываем консоль в папке с автоматиком и выполняем данную команду. Она необходима для того, чтобы все дальнейшие манипуляции с python-пакетами применялись к текущей директории (где находится установленный автоматик), а не ко всей системе глобально
    .\venv\Scripts\activate
    
  3. Удаляем старые версии либ
    pip uninstall xformers torch torchvision
    
  4. Ставим любой вариант свежих либ тут. Есть вероятность, что какие-то из вариантов могут поломать вам автоматик из-за несовместимости версий/плагинов и т.п. Попробуйте установить другую версию либ, если с самыми свежими не работает.
  5. На этом всё

Вариант 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-ссылки на загрузку файлов и потом использовать их напрямую при установке, оба варианта команд, приведённых ниже, являются корректными (не надо их выполнять, это пример):

pip install "C:\Users\User1\Downloads\torch-2.0.0.dev20230218%2Bcu118-cp310-cp310-win_amd64.whl"
pip install https://download.pytorch.org/whl/nightly/cu118/torch-2.0.0.dev20230218%2Bcu118-cp310-cp310-win_amd64.whl
Устанавливаем свежий torch и torchvision
  1. Сделайте бекап установленных python-пакетов автоматика, которые установлены в каталоге /venv. Они вам пригодятся, если потребуется откатиться на ту версию, которая у вас была до осуществления нижеописанных манипуляций
  2. После того, как нашли (или скачали) нужные нам версии библиотек torch и torchvision, открываем консоль в папке с автоматиком и выполняем данную команду. Она необходима для того, чтобы все дальнейшие манипуляции с python-пакетами применялись к текущей директории (где находится установленный автоматик), а не ко всей системе глобально
    .\venv\Scripts\activate
    
  3. Удаляем старые версии либ (кроме torch и torchvision мы сразу удаляем xformers, который мы соберём позднее)
    pip uninstall xformers torch torchvision
    
  4. Устанавливаем последние версии torch и torchvision, которые мы нашли ранее:
    pip install путь_до_torch.whl
    pip install путь_до_torchvision.whl
    

Как только оба файла установились, можете их удалить (если вы скачивали их заранее), их содержимое уже установлено в автоматик.

Компилируем и устанавливаем xformers

Свежие версии xformers поставляются только в виде исходников, поэтому вам придётся скомпилировать их вручную. Для этого необходимо выполнить следующие команды:

1
2
3
4
5
git clone https://github.com/facebookresearch/xformers.git
cd xformers
git submodule update --init --recursive
pip install -r requirements.txt
pip install ninja wheel

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

Компиляциия исключительно под текущую архитектуру GPU. Используйте этот вариант, если компилируете либу для себя, без цели шаринга:

python setup.py bdist_wheel

Компиляция под все архитектуры GPU. Файл весит в несколько раз больше, длительность компиляции так-же сильно увеличена, но получившуюся сборку можно использовать на любой CUDA-совместимой видеокарте:

cmd /V /C "set TORCH_CUDA_ARCH_LIST=5.0+PTX 6.0 6.1 7.0 7.5 8.0 8.6 8.9&& python setup.py bdist_wheel"

Скорость компиляции xformers зависит от того, насколько быстрый у вас процессор. На 5900x это занимает минут 5. Собранный пакет окажется в каталоге ./xformers/dist относительно корневой директории. Скопируйте его путь и выполните:

pip install путь_до_собранного_xformers.whl

По завершении данных манипуляций у вас должны быть установлены последние версии torch, torchvision и xformers. Если всё запускается успешно, можете удалить whl-файл и директорию xformers.

Вариант 2.5 (путь страданий, extra) - компилируем xformers вне каталога автоматика

Используйте данную инструкцию если вы не хотите шатать ваш каталог с установленным автоматиком для компиляции xformers. Для этого варианта требования по установленным инструментам компиляции (и к наличию прямых рук) идентичны упомянутым во втором варианте.

  1. Создайте новый каталог, в котором, в дальнейшем, будут происходить все манипуляции и откройте в нем консоль
  2. Говорим питону, что любые манипуляции с пакетами должны происходить в текущем каталоге, а не применяться глобально
    python -m venv ./
    .\Scripts\activate
    
  3. Устанавливаем последние версии torch и torchvision. Как их выбрать смотри тут
    pip install последний_торч.whl
    pip install последний_торч_вижн.whl
    

Возможно, установка torchvision не является необходимой на этом шаге, т.к. xformers от него напрямую не зависит, надо проверить.

  1. Качаем исходники последней версии xformers и ставим зависимости
    1
    2
    3
    4
    5
    git clone https://github.com/facebookresearch/xformers.git
    cd xformers
    git submodule update --init --recursive
    pip install -r requirements.txt
    pip install ninja wheel
    
  2. Компилируем xformers. Используйте один из вариантов команды ниже, смотри пояснения
  • Компиляциия исключительно под текущую архитектуру GPU. Используйте его, если компилируете либу для себя, без цели шаринга:
    python setup.py bdist_wheel
    
  • Компиляция под все архитектуры GPU. Файл весит в несколько раз больше, длительность компиляции так-же сильно увеличена, но получившуюся сборку можно использовать на любой CUDA-совместимой видеокарте:
    cmd /V /C "set TORCH_CUDA_ARCH_LIST=5.0+PTX 6.0 6.1 7.0 7.5 8.0 8.6 8.9&& python setup.py bdist_wheel"
    

Если всё прошло успешно, то собранный пакет в формате whl окажется в /xformers/dist относительно корневой директории.

Hardware scheduling

Неоднократно была упомянута информация, что отключение hardware scheduling приводит к увеличению производительности.

Переключатель искать в Settings -> Display -> Graphics settings.

Edit
Pub: 16 Feb 2023 11:17 UTC
Edit: 09 Jul 2023 21:27 UTC
Views: 8451