Свободные графические нейросети, кусочки гайда, железо

Dec 02, 2024 15:38




Дисклеймер и TL;DR

Всё написанное ниже основано на собственном опыте, а этот опыт как минимум ограничен наличием соответствующего железа и софта. Комп, на котором я всё это тестирую, изначально собирался под максимальную тишину (БП с пассивным охлаждением, отсутствие HDD, один 12см-кулер на весь системный блок и т. д.). Все утверждения относятся исключительно к графическим нейросетям, и переносить их автоматом на текстовые, видео-, аудио- и прочие нейросети категорически не рекомендуется. Также, надеюсь, очевидно, что под графическими нейросетями понимаются свободные графические нейросети для использования оффлайн, то есть генерации на собственном компьютере.

TL;DR: из всего железа нам важнее всего цирк с видеокартами; нейросетям нужно не совсем то же самое, что и играм, хотя возможности видеокарт в играх и нейросетях обычно развиваются параллельно; играм нужна мощь GPU и пропускная способность шины памяти; нейросетям нужна новизна карты и объем VRAM. Для комфортной работы нужны 24+ гига оперативки, 12+ гигов видеопамяти и хотя бы пару сотен гигов дискового пространства.

CPU

Начнем с простого. Мощь процессора на генерацию картинок влияет чуть более, чем никак. У меня всё отлично работает на слабеньком Intel Core i3-6100, который жрет всего где-то 50 Вт, и с большим радиатором ему даже обдув не нужен. Впрочем, вычислительная мощь никогда не будет лишней, ведь современные браузеры жрут ресурсы, как будто в фоне майнят крипту, а вам скорее всего будет нужен браузер и другой софт параллельно нейросетям. Тестов не проводил, но также предположу, что число ядер менее важно, чем производительность каждого ядра. В общем, более современный CPU для комфорта пригодится, но принципиальной важности не имеет.

RAM

Оперативная память, а точнее её объем, гораздо важнее характеристик процессора, при этом важность RAM увеличивается при использовании видеокарт с низким объемом видеопамяти и при активации режимов экономии VRAM. Куски моделей и пространства под генерацию, которые не влезли в VRAM, будут свопиться в обычную память. Я проверял две конфигурации оперативки: 16 GB и 32 GB. 16 гигабайт хватает для старых моделей (читай SD 1.5) и для SDXL в некоторых режимах (при генерации картинок небольшого размера без лор). Для комфортного использования одиночных SDXL-моделей должно хватать 32 GB. Если нужно постоянно держать в памяти несколько SDXL-моделей или генерить большие изображения с FLUX, то стоит задуматься о большем объеме. Нехватка RAM проявляется у меня как жуткие фризы всей системы, которые обычно сами прекращаются через несколько минут падением программы для генерации, но иногда приходится даже перезагружать комп (TODO: не уверен, что так себя ведут все системы, этот момент стоит отдельно уточнить). Если бы я сейчас собирал новую систему конкретно под нейросети, то брал бы 2/4 планки по 32 (то есть всего 64 или 128 GB). Вариант с двумя планками может быть предпочтительнее из-за того, что современные процессоры для двух планок поддерживают намного большие частоты DDR, чем для четырех (хотя это должно сильнее влиять в играх и прочих задачах, а не при использовании нейросетей).

HDD/SSD

Диск - не самый важный компонент системы, но вы можете легко прикинуть, сколько нужно времени, чтобы подгрузить модель в 2 гига (SD 1.5), 6 гиг (SDXL) и 10-20+ гиг (FLUX). Очевидно, что шустрые NVMe SSD со скоростью чтения по 2-3+ GB/s будут намного приятнее в использовании, чем старые HDD на ~100 MB/s. Зона комфорта здесь начинается, наверное, с обычных SATA SSD со скоростями чтения/записи около 500 MB/s. С другой стороны, скорость диска важна только при подгрузке модели в память, так что теоретически можно построить процесс таким образом, чтобы скорость диска сказывалась как можно реже (TODO: проверить скорость подгрузки моделей с HDD). Что касается объема HDD/SSD, то тут лучше сразу отвести под модели и софт хотя бы 100-150 GB. У меня всё сначала лежало на старом 256 GB SSD, потом я воткнул 2 TB NVMe, и всё равно хочется больше - сейчас у меня только моделями занято 600+ GB, а SSD не любят, когда на них мало свободного места.

GPU

Первое, на что нужно обратить внимание - это производитель. На данный момент сохраняется ситуация, когда есть NVIDIA и все остальные. Ускорители от AMD и Intel выдают гораздо меньшую скорость, и их драйвера более сырые с точки зрения работы с нейросетями. Теоретически нейросети могут использовать для расчетов даже центральный процессор, но в этом случае скорость будет еще ниже. Существуют технологии, позволяющие ускорить генерацию на видеокартах от AMD, однако у них ворох своих проблем и ограничений. В общем, платы от NVIDIA пока безальтернативны, и дальше будут рассматриваться только они.

Следующий по важности параметр видеокарты - это ее поколение/серия. На данный момент софт использует библиотеки CUDA SDK версий 12.1 и 12.4, что соответствует CUDA 5.0+ и архитектурам GPU, начиная от Maxwell. Если говорить проще, то принципиальная возможность появляется с 900-й серии и некоторых поздних видеокарт 700-й серии.

Особенности серий:
- 9XX (архитектура Maxwell) - нет поддержки half-precision (fp16)
- 10XX (архитектура Pascal) - half-precision добавлены, но очень медленные (1/64 от single-precision)
- 16XX (архитектура Turing) - полноценная поддержка fp16 со скоростью 2х от fp32
- 20XX (архитектура Turing) - меньше багов с fp16, добавлены RTX- и тензорные ядра
- 30XX (архитектура Ampere) - существенный рост количества CUDA-ядер
- 40XX (архитектура Ada Lovelace) - до 16 GB видеопамяти на бюджетных вариантах

Использование fp16-моделей и fp16-вычислений является сейчас основным подходом, так что нормальная работа с нейросетями начинается по сути с серий 16XX/20XX. (TODO: проверить генерацию на видеокарте 700-й серии)

VRAM

Если соблюдены условия выше по производителям и сериям, то дальше самое важное - объем видеопамяти. Нейросеть выделяет память в основном под две задачи - под загрузку моделей и под вычисления (inference). Дополнительные модели (лоры и т. д.) обычно также будут занимать память в тот же момент, что и основная модель. Размер и количество одновременно генерируемых изображений будут влиять на объем памяти для inference. Режимы экономии памяти у нейро-софта позволяют дробить память для частичной выгрузки в RAM, но это может иметь свою цену в виде снижения производительности и других негативных эффектов.

Из моего опыта и опыта других людей, почерпнутого на тематических ресурсах:
- <=3 GB - теоретически можно запустить, но это будут постоянные муки
- 4 GB - хватит для SD 1.5 c ограничениями
- 6 GB - уже можно более-менее юзать SDXL, но много ограничений
- 8 GB - все равно для чего-то интересного будет мало
- 12 GB - граница комфорта для использования SDXL
- 16 GB - лучше для FLUX, в остальном аналогично 12
- 24 GB - потолок для пользовательских видеокарт

Суммируя подразделы про GPU/VRAM - если с финансами не очень, берите RTX 3060 12GB; дальше идут 4060Ti 16GB, 4070/80 Super 16GB, 3090/4090. Остальные видеокарты под нейросети брать в основном бессмысленно.

Прочее

Небольшая ремарка по терминологии. Иногда присутствует описание вроде "store on CPU", "store on GPU" и тому подобное - это обычно следует читать как "store in RAM/VRAM", то есть под CPU/GPU понимается не сам проц, а работа процессора с памятью.

Про сетевое соединение - стандартных 100 Mbit Ethernet хватит, но чем больше, тем лучше. Долгая загрузка моделей с Civitai/HuggingFace иногда утомляет.

Нейрогайд, Нейросети

Previous post
Up