Здравствуйте, друзья!
Интерес к новой модели Flux заслуженно набирает обороты, несмотря на скептицизм гуру и поклонников Stable Diffusion 1.5. Однако, как и многие современные нейросети, Flux требует достаточно мощного оборудования для комфортной работы. Не у всех есть возможность раскошелиться на топовые видеокарты стоимостью пару сотен тысяч рублей. Но не беда! Этим вопросом уже озаботились энтузиасты, которые нашли решение в виде квантования моделей.
Что такое квантование и зачем оно нужно?
Квантование в нейронных сетях - это процесс упрощения сложных чисел, с которыми работают эти сети. Представьте, что вместо бесконечного количества оттенков серого мы используем лишь несколько основных. Это позволяет сделать вычисления быстрее и экономить память компьютера.
Зачем это нужно спросите вы, а затем, что упрощенные числа обрабатываются быстрее. Требуется меньше места для хранения данных. Нейронные сети становятся меньше и могут работать на менее мощных устройствах.
Для примера: Вместо числа 3.14159 (число Пи) мы берем просто 3. Это и есть суть квантования. Да, мы потеряем точность, но получим число, с которым проще работать.
И перед тем как приступить к главной части, хочу сразу сделать оговорку, чтобы избежать праведного негодования счастливых обладателей различных видеокарт. Вся информация, приведённая ниже, была собрана из различных источников в интернете и профильных ресурсах. Я лишь систематизировал данные в одном материале и не могу со 100% уверенностью заявлять, что определённая модель будет корректно работать на каждой видеокарте.
Отвечаю за себя: как пользователь RTX 3080 10GB и RTX 4060TI 8GB, могу сказать, что у меня работают практически все модели с различным квантованием.
Если у вас есть желание дополнить статью или поделиться своими наблюдениями, которые здесь не упомянуты, буду только рад! Оставляйте комментарии, заходите в Telegram или присоединяйтесь к нашему обсуждению в Discord.
Давайте начнем с формата GGUF (Generalized Global Unified Format)
Этот алгоритм сжатия данных был создан для работы с крупными языковыми моделями и теперь доступен и для нас. GGUF помогает уменьшить объём данных, необходимых для хранения и обработки, что особенно полезно для работы с моделями на системах с ограниченной видео памятью. Хотя сжатие данных снижает требования к памяти, это может замедлить процесс восстановления данных перед вычислениями.
Для работы GGUF обязательно наличие текстовых энкодеров, Clip и VAE которые используются при работе с FLUX [DEV]. Без них GGUF модели работать не будут.
Ну и собственно основные типы квантования моделей в формате GGUF. Зная их, вы сможете понять, подходит ли вам конкретная модель или нет.
Q8: Модели с квантованием до 8 бит. Обеспечивают высокое качество при достаточно эффективном использовании ресурсов. Хороший компромисс между качеством изображения и потреблением памяти но к сожалению не скорости.
Q6_K: Модели с квантованием до 6 бит. Обладают более высоким качеством по сравнению с 4-битными моделями, при этом имеют умеренную скорость генерации. Подходят для задач, где важно сбалансировать качество и скорость.
Q5_K_S/M: Модели с квантованием до 5 бит с дополнительными настройками точности. Обеспечивают улучшенное качество по сравнению с Q4 и Q3 при минимальном снижении скорости генерации. Используются для более требовательных задач, где важно сохранить высокое качество при допустимом снижении производительности.
Q4: Модели с квантованием до 4 бит. Требуют меньше ресурсов, что делает их идеальными для систем с ограниченной видеопамятью. Возможна потеря качества из-за снижения точности. Подходят для работы на слабых видеокартах.
Q4_K_S/M: Модели с квантованием до 4 бит с настройками точности (S/M). Хорошо сбалансированы по размеру и качеству, что делает их эффективными для использования в ограниченных ресурсах. Подходят для пользователей, которым нужно сбалансировать качество и производительность в условиях ограниченных ресурсов.
Q3_K_S/M/L: Модели с квантованием до 3 бит с настройками точности (S/M/L). Обеспечивают минимальный размер и высокую скорость генерации. Заметное снижение качества изображения из-за низкой точности. Подходят для систем с очень ограниченными ресурсами, где приоритет — скорость, а не качество.
И прочитав это, вы, возможно, зададитесь вопросом: что значат эти буквы и цифры в названиях моделей? Объяснение довольно простое:
0 — это стандартный уровень оптимизации памяти и вычислений внутри модели, обеспечивающий максимальное качество.
1 — это улучшенная версия с оптимизацией для достижения лучшего баланса между качеством и производительностью.
Далее идут буквы K, S, M, L
K (K-Quant): Это метод смешанной точности (Mixed Precision), при котором различные части модели квантуются с разной точностью. Такой подход позволяет эффективно снижать требования к памяти и вычислительным ресурсам, сохраняя при этом высокое качество. Не все слои модели подвергаются одинаковому квантованию, что помогает достичь более высоких показателей производительности без значительных потерь в качестве.
S, M, L (S, M, L Quantization): Эти буквы обозначают различные конфигурации квантования, которые влияют на компромисс между производительностью и качеством:
- S — ориентирован на максимальную скорость с потерей качества.
- M — сбалансированная версия с хорошим компромиссом между качеством и производительностью.
- L — нацелен на максимальное качество при снижении скорости.
Таким образом, выбор различных уровней точности и конфигураций помогает достичь оптимального баланса между производительностью и качеством работы модели, особенно на разных видеокартах.
Если вы не знаете что такое Смешанная точность - это метод, который позволяет использовать разные уровни квантования для разных частей нейронной сети. Например, веса могут быть квантованы с использованием 8 бит, а активации - с использованием 4 бит. Это позволяет достичь более тонкой настройки и баланса между точностью и производительностью модели.
Рекомендации по выбору GGUF моделей:
4-6 ГБ VRAM - модели Q3 или Q4
8 ГБ VRAM - модели Q4, Q5, Q6
10-12 ГБ VRAM - модели Q5, Q6 и Q8
При наличии видеокарты с 16 - 24 ГБ VRAM и больше я не вижу смысла в использовании квантованных моделей. Но это мое субъективное мнение.
Далее у нас формат NF4 (BNB)
NF4 формат, использующий библиотеку Bitsandbytes (BNB). Этот алгоритм заменяет стандартные операции PyTorch на более быстрые низкоразрядные ядра CUDA, что делает вычисления более быстрыми и эффективными. В нем используется 4-битное квантование, что подразумевает под собой увеличение скорости генерации с меньшим использованием памяти и достаточно хорошим уровнем точности.
Модели NF4 хорошо оптимизированы для GPU с 6-12 ГБ памяти. В них уже встроены текстовый энкодер, clip и vae. Использовать модели в этом формате можно на видеокартах RTX 2060, RTX 2070, RTX 2080, RTX 3050, RTX 3060, RTX 3070, RTX 4060 и RTX 4070.
Хотя я сталкивался с противоречивой информацией, что модель не работает на видеокартах серий 1000 и большинстве видеокарт серии 2000 но это информация из раздела "бабка Зина сказала ..."и как на самом деле обстоят дела у владельцев этих карт сказать не могу. Но на форумах то и дело мелькают цифры и буквы про GTX 1070.
Если вам нужно хорошее качество и скорость обработки, NF4 станет вашим лучшим выбором.
FP16 и FP8: Модели FP16 и FP8 с плавающей точкой обеспечивают отличное качество, но требуют значительно больше ресурсов.
- FP16 (16-bit Floating Point): Обеспечивает высочайшую точность и подходит для видеокарт с объемом памяти 16-80 ГБ, таких как RTX 4080, RTX 3090, RTX 4090 или A100.
- FP8 (8-bit Floating Point): Работает на тех же мощных видеокартах, что и FP16, но обеспечивает более быструю обработку данных. Подходит для высокопроизводительных систем, где важна скорость.
Выбор модели квантования зависит от ваших целей и характеристик видеокарты. Квантование позволяет найти наилучшее соотношение между производительностью и точностью, делая работу с нейросетями возможной на различном оборудовании.
На этом закончу. Надеюсь, что статья помогла вам хоть немного разобраться в том, как выбрать оптимальную модель для вашего оборудования. Если у вас есть опыт работы с квантованными моделями, обязательно делитесь им в комментариях. Будет интересно обсудить, какие решения оказались для вас самыми удачными и с какими проблемами вы столкнулись.
Ну и конечно же, если вам понравилась эта статья, буду рад вашим подпискам, комментариям и лайкам. Недавно я запустил Discord-канал и постараюсь поддерживать его насколько возможно, там вы сможете не только следить за новостями, но и общаться, делиться опытом и приобретать новые знания о нейросетях. Чтобы всегда быть в курсе моих новых материалов, подписывайтесь на мой Boosty, Telegram-канал и страницу "ВКонтакте". Пока что нас немного, но я надеюсь, что с течением времени сообщество станет больше. Это станет отличной мотивацией для меня активно работать и над другими социальными сетями.