Блог создается при поддержке Failover Bar и Anarchic Pro

Сколько видеопамяти нужно AI?

November 28, 2024 . 7 минут на чтение статьи

В предыдущей статье про GPU для нищебродов мы пришли к выводу, что нужно брать или несколько Nvidia Tesla P40, или одну-две Nvidia RTX 4090.

Сколько же нам придется приобрести таких карт? Для deepseek-coder-v2:16b достаточно обычной RTX3080, которая есть в любом DNS. К сожалению, ее способности немногим выше, чем у поисковой строки Гугла. Можно считать её эдаким локальным кэшем для вашего StackOverflow. Все действительно умные вопросы нужно задавать "большим" моделям: Claude и ChatGPT.

Что, если нам хочется завести дома нечто настолько же мощное, как ChatGPT? Например, Llama 405b?

В этой статье будет много формул и пояснений к ним. В обычной жизни, при покупки колбасы в магазине, нам не очень нужны формулы. Все меняется в тот момент, когда мы начинаем считать — сколько дней в году нам надо копить денюжки, чтобы купить себе нормальный GPU за пару лямов рублей.

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

Здесь мы объясним каждую копейку, которую вам придется отдать из своего кармана.


Как посчитать объем памяти?

Вот сколько отъест памяти Llama:

VRAM (405B, FP16) = (405 × 16/8) × 1.2 = 972GB

Готовьте ваш кошелёк.

Формула вычисления VRAM

VRAM = (количество параметров × точность / 8) × 1.2

  • Количество параметров указывает на размер модели, для "Llama 405B" — это "405B".
  • Точность говорит, сколько битов тратится на каждый параметр.
  • Магическое число 8 говорит, что мы оперируем 8-битными байтами, и в этой формуле превращает количество бит в количество байт.
  • 1.2 — это какой-то взятый с потолка параметр. Простите, бога ради. Он учитывает потерю памяти на разные мелочи: метаданные, временные переменные для перекладывания данных в вычислениях, какая-то работа с памятью в ваших фреймворках (PyTorch, Tensorflow).

↑↑↑ по ходу рассказа я буду вставлять такие вот врезки и жирные ссылки. Врезки подробно объясняют тонкости материала. Ссылки ведут на статьи, которые позволят вам лучше понять матчасть. Эти ссылки я сам изучил и вам советую с чистой совестью.


Терабайт — много или мало?

Где же мы найдем целый терабайт памяти?

Если в видеокарте Nvidia Tesla P40 всего 24Gb памяти, это значит, что нам нужно для запуска:

972 / 24 = 40.5 GPU

Это целых десять системных блоков, объединенных через какой-то Colossal-AI.

Так с легкой руки Llama 405, вы стали обладателем своего маленького домашнего дата-центра, который шумит как взлетающий самолёт.


✨✨✨ Квантизация ✨✨✨

легкий способ экономить память

Один из важнейших приемов в нейронках — квантизация. Она понижает точность хранения параметров, например, с FP16 (16 бит) до 8 (8 бит). Это позволяет значительно понизить расход памяти. С самой шакальной квантизацией на INT4, Llama 405 начинает занимать всего-навсего 230GB.

Мы здесь впихуем невпихуемое — сжимаем один диапазон весов до чуть более узкого. Представьте, что вы решили засунуть 60 огурцов в трехлитровую банку, вот это оно.

Нет ли здесь подставы? Не помнутся ли наши огурцы?

Как считается квантизация

  1. Берем 16-битные числа с плавающей точкой (FP16) и отображаем их на 8-битные целые числа (FP8).
  2. Определяем изначальный диапазон в FP16 (например, веса от -1.0 до 1.0), конечный диапазон в FP8 (от -127 до 127).
  3. Считаем, насколько нам нужно сжать изначальный диапазон и получаем коэффициент масштабирования. Например, если Q - это квантизированное значение, R - изначальное значение, и S - коэффициент масштабирования, то округлённое значение Q = round (R/S).

Видите, никакой магии. Математика на уровне 1-ого класса.
Когда там изучают деление с округлением?


Проблемы квантизации

Квантизированные модели работают хуже, чем нормальные.

Понижение точности (FP16 → INT8 → INT4) изменяет представление весов и активаций, что обычно приводит к потере информации и уменьшению аккуратности.

Насколько именно деградирует модель — вопрос сложный, и зависит от кучи факторов. Единственный хороший способ — попробовать пользоваться нейронкой и понять всё опытным путём.


Можно ли квантизировать до бесконечности?

Если переусердствовать, квантизация не доведет до добра.

Представим, что изначальное число было Пи: 3.14159. Если сжать его до INT8, то получится 3. Если жать еще дальше, до INT4, будет всё ещё 3. Но если сжать до INT1, то возможными значениями будут 1 либо 0. В последнем случае потеряется почти вся информация.

Жесткая квантизация на 4, уменьшающая Llama до 200Gb, на самом деле, очень неприятное и кризисное решение.

Факторы понижения качества

  • Размер квантизации: нижние биты (INT4) просаживают точность и качество сильнее, чем верхние биты (INT8).
  • Чувствительность: некоторые модели более чувствительны к квантизации. Геренация обычного текста проседает меньше, математические расчёты — проседают больше.
  • Метод квантизации: статическая квантизация (только веса в полностью тренированной модели) просаживает качество меньше. Динамическая квантизация работает с активациями в ходе инференса и просаживает качество сильнее, хотя и экономит больше памяти. Квантизация тренированной модели приводит к большей деградации, чем в quantization-aware training (QAT) - когда квантизация симулируется в ходе тренинга.

Что такое веса и активации

  • Веса — это обучаемые параметры нейронки. Они определяют силу связей между нейронами в соседних слоях. В процессе тренировки модели, веса обновляются, чтобы минимизировать ошибку в предсказаниях модели.
  • Активации — это промежуточные выходы нейронов, нужные для движения данных вдоль нейронки. Они являются результатом применения весов, смещений и функций активаци к входам.

Количество памяти с квантизацией

Формула из самого начала статьи, не учитывает возможности квантизации. Давайте ее немного поправим и уточним магический коэффициент.

VRAM= ( количество параметров × квантизованная точность / 8 ) × мультипликатор
  • Квантизированная точность указывает на битность, это 8 для INT8, 4 для INT4, и так далее;
  • Мультипликатор зависит от реализации. Он может быть всё тем же магическим числом 1.2, но может уменьшаться, ведь квантизация немного уменьшает паразитную вычислительную нагрузку не только в базовых алгоритмах, а вообще везде (например, в ваших ML-фреймворках).

Не забывайте, что в конце вычислений у вас получаются не гигабайты, а гибибайты. Чтобы получить настоящие человеческие гигабайты, нужно разделить результат на 1.073.741.824.


Стрижём Ламу полностью

Раз уж мы всю дорогу мучили Ламу, давайте попробуем постричь её двумя самыми популярными способами.

VRAM (INT8)= (405.000.000.000 × 4 / 8) × 1.2 = 452.27GB
VRAM (INT4)= (405.000.000.000 × 4 / 8) × 1.2 = 225.33GB

Выражаясь в терминах покупки Nvidia Tesla P40, мы можем уложиться в 3 системных блока.

226 / 24 / 4 = 2.35

Первые два будут забиты под завязку на 4 карты каждый, а во второй хватит вставить всего 2 карточки. И если не хватит, память уйдет на паразитные вычисления, то всегда останется возможность заполнить два оставшихся пустых слота на материнской плате.

Напоследок, давайте посачитаем, сколько нужно для запуска более простой версии Llama: 70B.

VRAM (INT4)= (70.000.000.000 × 4 / 8) × 1.2 = 39.13 GB

То есть, для запуска самой простой Ламы — той, что вы можете пользоваться на HuggingFace, вам достаточно одного-единственного компьютера с двумя GPU Nvidia Tesla P40. При текущей цене в 40 тысяч рублей (на зарубежных площадках можно купить дешевле), вы можете начать пользоваться преимуществами локальной нейронки буквально с пары-тройки ваших айтишных зарплат.


Заключение

За последние несколько лет нейронки прошли путь от игрушки для богатых разработчиков до основного средства производства. Сегодня сложно представить человека, который будет переводить тексты полностью вручную, или инженера-программиста, который целиком сам пишет код. Благодаря нейронкам, люди в очередной раз подтвердили свое место в пищевой цепочке Земли — аналогов человеческому мозгу, вооруженному мощной нейронкой, в природе нет.

Люди, которые пользуются нейронками, активно заменяют тех, кто ими не пользуется.

К сожалению, обладание личными нейронками сопряжено с большими финансовыми затратами. В конкурентной среде легко может оказаться так, что вы проиграли не потому, что вы более глупый, медленный или ленивый. А потому, что у вас просто нет денег на покупку GPU или времени на их обслуживание. Обычные люди вынуждены мириться с использованием бесплатных публичных сервисов типа Claude или ChatGPT, со всеми их проблемами. Самая большая проблема — цензура и нежелание корпораций давать слишком большую силу в руки каждого из людей на Земле.

Сегодня мы разобрали, сколько вам нужно видеопамяти и почему. Количество видеопамяти напрямую диктует используемые модели GPU и их стоимость. Если ты обычный человек с обычной зарплатой, ты все еще не можешь тягаться с богатыми корпорациями. Но ты можешь организовать себе маленький вычислительный контур с моделями уровня Llama 70B, в котором можно делать всё, что угодно.

И ждать, когда Nvidia выпустит GPU, который всё изменит.

🍺 Поблагодарить автора

Не забывайте подписаться на наши ресурсы, там есть ништяки: