Как выбрать параметры железа под LLM модели?

Как определить объем оперативной памяти, видеопамяти и пр. под языковую модель. Хотя бы очень примерно.

Интересно понимать требуемые мощности в двух разрезах:

  1. Запуск готовой модели.
  2. Тонкая настройка (fine-tuning).

Из важных параметров влияющих на мощность железа я выделил следующие:

  1. Кол-во параметров (3B, 16B 128B...) - чем больше тем мощнее железо нужно.
  2. Квантизация (Q3...Q8 или FP16...FP32) - чем больше тем мощнее железо нужно.
  3. Размер контекстного окна - чем больше тем мощнее железо нужно.

Какие еще характеристики моделей сильно влияют на потребляемую мощность. И как примерно исходя из этих характеристик прикинуть конкретные мощности сервера или ПК.

Буду благодарен за любой совет.


Ответы (2 шт):

Автор решения: EvgeniyZ

Ответ на ваш вопрос довольно простой: Весь размер выбранной вами модели должен уместиться полностью в VRAM вашей GPU.

Если более подробно рассуждать, то многое зависит от типа модели, ее квантования, где и как запускается, ну и т.д. Ведь модель можно запустить на CPU или GPU, где еще и деление на лагеря идет (Nvidia/AMD/Intel/Apple), которые тоже очень сильно влияют на все, ведь у тех-же Nvidia есть CUDA и другие технологии, которые в разы повышают эффективность, когда как другие производители подобным похвастаться не могут.

Теперь немного про важные параметры модели (вы их все перечислили):

  • Количество параметров - Это "мозг" модели. То есть это некий объем данных, которые уже заложены в модели при обучении. Чем их больше, тем лучше и качественней ответы, но и больше размер. Я помню объяснял знакомому, который далек от программирования, и там дал такой пример: "Представь, что ты просишь 8-ми летнего ребенка написать сочинение, и тоже самое задание ты даешь ребенку в 16 лет. Кто из них напишет более развернуто и правильней?". Вот считаю, что это весьма хорошее объяснение того, что такое эти всякие B. Конечно это утрированное сравнение, но всеж.

  • Контекст - На текущий момент, это значение, как по мне, немного размылось, ибо запуская локальную модель, скажем с контекстом 8к, вы можете ограничить ее на 100, а можете наоборот, расширить контекст допустим до 30к. Тут многое зависит от модели, как обучалась и на чем основывалась. Если очень грубо, то контекст, это тот набор данных, которые вы отправляете модели и которые она может успешно переварить. Чем больше, тем больше будет требоваться VRAM.

  • Квантование - Расценивайте это как сжатие JPEG изображения, где чем сильнее процент сжатия, тем больше деталей теряет изображение, но и меньше размер. С моделями примерно аналогично все, ибо чем сильнее квантование, тем больше модель теряет и ее ответы становятся не на столько качественными, как хотелось. (P.S. По моим тестам лучше иметь больше параметров но с сильным (приемлемым!) сжатием, чем "глупую" модель без сжатия.)

Вот имея все это, вывод довольно простой: Для локального запуска модели нужна видеокарта Nvidia с достаточным объемом видеопамяти для конкретной модели + ее контекста.

Пример из жизни:
Имею старый процессор (I7-3770k), 16гб RAM, ну и RTX2060 (12гб VRAM). Как видите, процессор у меня довольно старый, старый сокет, старая материнка, старая RAM, но за счет видеокарты я могу без проблем запустить любую модель, весом ~10гб и они все будут генерировать большие текста за пару секунд. На данный момент у меня модель на 12B параметров и с квантованием Q5 (GGUF), вес файла ~8гб + контекст = ~10гб VRAM используется, модель полностью помещается. Если я возьму квантование Q6, то модель уже будет весить ~9гб, а вместе с контекстом она займет ~11гб VRAM, что почти впритык, а это значит, что запустив почти любое приложение, которое занимает VRAM, модель уже не поместится и ~5% уйдет в RAM, что понизит скорость генерации.

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

Что касается дообучения, то там чуть сложнее все, но в целом, критерии +- схожие, но лучше иметь запас, ибо там еще набор данных влияет сильно. Вот если учить с нуля... Вот там да, нужны бешенные ресурсы.

→ Ссылка
Автор решения: Alexandr Ogorodnik

Чтобы оценить требования к памяти для языковой модели, учитывайте следующие факторы:

Размер модели: Количество параметров в модели напрямую влияет на потребление памяти. Например, модель с 13 миллиардами параметров с точностью float16 требует примерно 26 ГБ памяти GPU (13 B параметров x 2 байта на параметр).

Точность: Использование более низкой точности (например, int8 или float16) может значительно сократить потребление памяти по сравнению с полной точностью (float32).

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

Квантование: Квантованные модели (например, int8) используют меньше памяти за счет снижения точности. Квантование может снизить требования к памяти до 4 раз.

Использование памяти GPU: Такие инструменты, как vLLM, позволяют установить параметр gpu_memory_utilization для мониторинга использования памяти GPU, что может помочь в управлении распределением памяти.

Для более точной оценки можно использовать такие инструменты, как Hugging Face model size estimator, чтобы рассчитать память, необходимую для хранения параметров модели. Кроме того, учитывайте память, необходимую для кэша KV и других операций во время выполнения.

https://github.com/vllm-project/vllm/issues/11550 https://github.com/vllm-project/vllm/issues/12030

→ Ссылка