Выбор оборудования для локального запуска LLM
LLM (Large Language Model — «большая языковая модель», англ.) — нейронная лингвистическая сеть, обученная на огромных объёмах текстовых данных: книгах, статьях, сайтах и других источниках. Она содержит в себе большое число параметров — переменных, которые меняются в процессе машинного обучения.
Считается, что языковая модель является большой, если содержит больше одного миллиарда параметров. Именно благодаря их огромному количеству, LLM способны распознавать, переводить, прогнозировать или генерировать контент. Для работы алгоритмов таких моделей нужны огромные ресурсы. И потребности эти растут с каждым днём.
Существует множество причин для локального запуска LLM вместо использования облачных сервисов вроде Microsoft Copilot или ChatGPT. Например, высокая стоимость сторонних сервисов, риск утечки конфиденциальных данных или стремление к большему контролю над моделью. Однако процесс может оказаться сложным для новичков.
Этот материал — руководство для тех, кто хочет запустить на локальном сервере собственную LLM. Здесь нет анализа работы языковых моделей, но подсвечены важные моменты, которые нужно учитывать на первых этапах работы с ними.
Требования к оборудованию
Важная задача при запуске локальной LLM — выбор подходящих характеристик оборудования. Хотя LLM можно запускать на любом компьютере, для достижения оптимальной производительности нужна одна или несколько современных видеокарт.
Если вы впервые запускаете LLM, скорее всего используете текущие ресурсы. Однако существуют улучшенные аппаратные решения, которые значительно упростят процесс в части функциональности и производительности.
Обычный ПК или рабочая станция
Выбор между обычным ПК ирабочей станцией влияет на доступные опции при запуске модели. Например, от количества PCIe-портов зависит, сколько видеоускорителей можно подключить к системе.
А процессоры AMD Threadripper Pro и Intel Xeon W куда лучше справляются с огромным массивом данных, чем AMD Ryzen и Intel Core.
Если отдельно говорить о разнице между процессорами Intel и AMD, то их работа при наличии графических процессоров практически идентична.
CPU или GPU
На начальном этапе работы с LLM, важно сделать выбор между работой с центральным или графическим процессорами для инференса. Инференс — процесс исполнения обученных моделей для вывода предсказаний на основе данных, которые подали на вход модели.
Современные видеоускорители обеспечивают куда большую производительность по сравнению с CPU. В тоже время видеокарты обычно комплектуются объёмом памяти в диапазоне от 8 до 48 ГБ. Это ограничивает возможность запуска некоторых моделей на GPU.
CPU использует системную оперативную память (RAM). Это позволяет работать с более объёмными моделями, которые невозможно загрузить в видеопамять (VRAM). Основным минусом является низкая производительность CPU в сравнении с видеоускорителями. Мощный GPU может работать с той же языковой моделью в 10–100 раз быстрее.
Существуют библиотеки для инференса, которые поддерживают гибридный подход. Этот способ использует ресурсы как CPU, так и GPU. Например, llama.cpp — это подходящее решение для запуска моделей, которые не помещаются в VRAM. Этот подход обеспечит золотую середину в производительности между вычислениями на базе CPU и GPU.
GPU: NVIDIA или AMD
Если выбирать между NVIDIA и AMD в работе с LLM, ответ прост — NVIDIA. Основная причина — широкая поддержка архитектуры CUDA в различных библиотеках инференса как в Linux, так и в Windows. Многие проекты, особенно под Windows, созданы специально для работы на GPU NVIDIA. Кроме того, графические процессоры NVIDIA имеют значительное преимущество в чистой производительности.
Это не значит, что AMD следует полностью списать со счетов. Особенно тем, кто хочет попробовать запустить локальные LLM на видеокартах AMD, которые у них уже есть. В Windows для этого не так много вариантов. Один из них — приложение LM Studio. Оно доступно в виде предварительной версии с поддержкой ROCm. Если же система работает под управлением Linux, у вас будет куда больше вариантов локального запуска LLM благодаря улучшенной поддержке ROCm.
Оперативная память и накопитель данных
Оперативная память, как правило, является вспомогательным элементом. За исключением случаев, когда данные обрабатывает CPU. При использовании GPU, RAM служит для облегчения переноса данных модели из хранилища в видеопамять. Поэтому рекомендуемый объём RAM должен быть равен размеру видеопамяти, а лучше быть в 1,5–2 раза больше. Даже если LLM полностью загружена в VRAM, нужно помнить, что в оперативную память должна помещаться не только модель, но ещё и системный файл подкачки. Однако после загрузки модели функция RAM сводится к минимуму.
Важный фактор при инференсе через CPU — пропускная способность оперативной памяти. Высокая тактовая частота предпочтительнее. Как и процессоры, которые поддерживают большее число каналов памяти, такие как AMD Threadripper PRO или EPYC.
Независимо от метода инференса, скорость накопителя данных также не играет большой роли. Разве что использование быстрого накопителя NVMe сводит к минимуму время загрузки модели в RAM или VRAM. Но если пользователь не так часто загружает в память новые модели, скорость работы SSD не так важна.
А вот объём накопителя, напротив, важен. Так как размер некоторых моделей может достигать сотен и даже тысяч гигабайт. Поэтому лучше заранее позаботиться о наличии свободного места для хранения данных.
Охлаждение системы
Для работы с LLM используют высокопроизводительные рабочие станции и GPU-серверы. Чем производительнее система, тем комфортнее и быстрее можно решать поставленные задачи под разными нагрузками. С ростом вычислительной мощности возникает вопрос: как обеспечить эффективное охлаждение компонентов системы, особенно CPU и GPU. Особенно остро встаёт этот вопрос в случае с конфигурациями на основе нескольких GPU.
Графические ускорители потребляют большое количество энергии, которая нужна им для обеспечения высокой производительности. Правильным решением для бесперебойной работы рабочих станций и серверов является установка системы жидкостного охлаждения. Подробнее с этой технологией охлаждения можно ознакомиться в отдельном материале.
ПО и операционная система
Linux — оптимальная операционная система для работы с LLM. Большинство разработок в области AI/ML создаются на Linux, что подразумевает их выполнение именно в этой среде. Даже если модель запускается под Windows, её техническая документация будет уступать в качестве и содержании. Linux лучше оптимизирована и предлагает поддержку NVIDIA Collective Communications Library. Windows также ограничивает использования некоторых оптимизаций для работы с несколькими графическими процессорами.
Независимо от выбранной ОС простоту работы с LLM обеспечивают такие инструменты, как Chat with RTX и LM Studio. Они предлагают удобные графические интерфейсы, когда пользователю не придётся иметь дело с командной строкой. Есть также удобный GUI-инструмент oobabooga, который содержит множество библиотек для работы с инференсом на CPU и GPU. Благодаря подробным инструкциям от разработчиков, установить ПО для работы с LLM достаточно просто на любую из операционных систем.
Многопользовательский доступ
Поверхностно затронем возможность предоставления другим пользователям доступа к LLM-серверу. Основная нагрузка в данном случае возлагается на программную часть. Особенно, если к серверу будет доступ у тысяч или даже миллионов пользователей.
В таких случаях нужно настроить правильную «пакетную обработка» или batching. Существует несколько методов пакетирования, каждый из которых позволяет параллельно обрабатывать сразу несколько входов в LLM. Они значительно повышают пропускную способность, но также увеличивают объём используемой памяти. Поэтому, если вы предоставляете доступ к своей LLM другим пользователям, стоит убедиться, что серверная часть программного обеспечения поддерживает пакетную обработку.
Даже если не планируете предоставлять доступ к серверу другим пользователям, иногда приходится взаимодействовать с LLM не напрямую, а через API. Делается это через терминал или отдельное приложение, подключенное к рабочей станции.
Какую LLM выбрать
При выборе модели нужно ответить на два важных вопроса:
1. Выполняет ли она необходимые задачи?
2. Соответствует ли она доступным системным ресурсам?
Если нужна модель для перевода с японского языка, лучше выбрать ту, которая обучалась на японском тексте. В данном случае, модель Qwen2-7B-Instruct, обученная 29 языкам, включая английский и японский, может оказаться более правильным выбором, чем Meta-Llama-3.1-8B-Instruct, которую учили немецкому, итальянскому испанскому и португальскому.
Если нужна модель для кодирования, стоит найти специализированную модель для этой задачи. Либо общую модель, в обучающие данные для которой входил программный код. Для обработки изображений нужна мультимодальная модель, способная обрабатывать сразу и текст, и изображения в качестве вводных данных. Например, idefics2-8b-base.
Интересной отличительной чертой таких моделей является их способность к обобщению. Они способны решать некоторые задачи даже без предварительного обучения на соответствующих этим задачам данных. В процессе развития новая обобщённая модель может превзойти старую специализированную модель даже в тех областях, для которых последняя обучалась изначально.
В части системных ресурсах нужно понять: достаточно ли в системе VRAM (работа на GPU) или RAM (работа на CPU) для загрузки модели. Главным фактором, который влияет на размер модели, является количество параметров, исчисляющихся миллиардами в современных LLM. Это число позволяет быстро оценить приблизительный размер модели. Например, недавно выпущенная серия моделей Llama 3.1 представлена в трёх размерах: 8B, 70B и 405B.
Модели обычно выпускаются с точностью FP16 или BF16, что позволяет просто рассчитать реальный физический размер модели: количество параметров в миллиардах умножаем на два. Получаем объём памяти в гигабайтах, который нужен для загрузки модели. Это означает, что для модели с Llama 3.1 8B параметрами нужно не менее 16 ГБ памяти, в то время как для модели 405B нужно уже 810 ГБ памяти.
Некоторые модели используют квантование для уменьшения объёма необходимой памяти. Это снижает точность LLM, но сжимает её размер. Поэтому можно запустить её на железе с меньшим объёмом RAM или VRAM. К сожалению, рассчитать точный размер таких моделей по формуле, о которой писали выше, не выйдет.
Когда мы говорим о квантовании моделей, мы имеем в виду метод, который позволяет уменьшить размер модели, снизив её точность. Это может быть полезно, если аппаратное обеспечение, на котором работает модель, имеет ограничения по памяти. При использовании квантованной модели, простое умножение количества параметров на два не даст нам точной оценки требований к памяти.
Ещё один метод оценки требований модели, квантованной или нет, заключается в оценке размеров файлов с расширением .safetensors. Общий размер этих файлов будет примерно соответствовать объёму памяти, который нужен для загрузки модели. Квантованные модели, как правило, отличаются от полноценных включением в их название аббревиатуры метода квантования. Например, GPTQ, GGUF, AWQ, exl2 и другие.
Кроме количества параметров нужно также обращать внимание на «контекстное окно» модели. Это, своего рода, объём рабочей памяти модели: сколько текстов она может запомнить и просматривать в любой момент времени. Величина контекста измеряется в токенах. В последнее время мы наблюдаем существенный прирост контекста у открытых моделей. Например, у Llama 1 было 2048 токенов, у Llama 2 — 4096 токенов, у Llama 3 — 8192, а с выходом Llama 3.1 размер контекста вырос до 128 000 токенов. Нужно помнить, что с увеличением размера контекстного окна растёт и потребность в памяти.
На диаграммах ниже видно, как использование видеопамяти для модели Meta-Llama-3.1-8B-Instruct может варьироваться в зависимости от точности, размера контекстного окна и других параметров настройки.
Если рассчитать размер модели Llama 3.1 8B BF16/FP16 по ранее описанной формуле, получается 16 ГБ памяти. На практике, при загрузке Llama 3.1 8B с точностью BF16 через библиотеку transformers, модель использует чуть более 15 ГБ видеопамяти. Метод действительно позволяет очень точно рассчитать предварительный объём нужной памяти. Размер необходимого дискового пространства также очень близок: в Ubuntu 16,1 ГБ, а в Windows — 14,9 ГБ.
Тестирование 4- и 8-разрядных квантованных версий с библиотекой llama.cpp, показало, что для 8-битного квантования нужно примерно в два раза меньше видеопамяти по сравнению с версией BF16. А для 4-битного — на четверть меньше.
Два этапа тестирования с использованием и без использования оптимизации Flash Attention показали, что эта технология снижает влияние контекстного окна на память. Эффект сильнее заметен при большом размере контекста. Благодаря оптимизации общее потребление видеопамяти снижено до 9,2 ГБ по сравнению с 28,6 ГБ без неё.
Всё это значит, что быстрая и точная оценка общего использования памяти усложняется, когда нужно учитывать контекстное окно, метод оптимизации Flash Attention или квантование модели. Понимание, что нужно учитывать контекстное окно — это полдела. Советуем изначально закладывать дополнительные 15% памяти поверх размера модели. В большинстве случаев этого должно хватать для комфортной работы.
Заключение
Как видите, запустить LLM на локальном оборудовании достаточно просто. Достаточно иметь желание и финансовые возможности. Приобрести подходящие для работы больших языковых моделей рабочие станции и GPU-серверы можно на сайте DigitalRazor.
Выбрать подходящую модель вам помогут списки лидеров в этой области: лидеры LMSys или лидеры LLM. В последней таблице, кстати, представлены лишь те модели, которые можно скачать и использовать бесплатно.
В первой статье мы перечислили основные инструменты, чтобы сделать первые шаги к работе с языковыми моделями. В будущих материалах подробнее раскроем эту тему. Например, сравним в рабочих задачах игровые видеокарты и профессиональные графические ускорители.