Затрудняетесь с ИИ или разработкой полного стека? Наши эксперты готовы помочь вам: индивидуальные консультации, техническая интеграция и многое другое. Обращайтесь по адресу [email protected].

Установка и развертывание LLaMA 3.1 405B в производстве на GCP Compute Engine

LLaMA 3.1 405b - это большая языковая модель, разработанная компанией Meta AI и представляющая собой одну из самых больших по размеру параметров моделей ИИ, находящихся в открытом доступе, с 405 миллиардами параметров. Она является частью семейства Llama 3.1, в которое входят модели разных размеров (8B, 70B и 405B параметров).

Версия 405B особенно примечательна своей масштабностью, она стремится сравняться или даже превзойти по производительности некоторые из лучших закрытых моделей, таких как GPT-4, в различных бенчмарках, что свидетельствует о ее передовых возможностях в понимании языка, генерации и других задачах. Модели Llama 3.1 имеют расширенную многоязыковую поддержку и способны понимать и генерировать текст на нескольких языках, что расширяет их применимость в различных регионах и среди пользователей.

В этой статье мы покажем, как установить и развернуть LLaMA 3.1 405B в производстве на Google Cloud Platform (GCP) Compute Engine. Сначала мы расскажем о требованиях к оборудованию, затем о предоставлении экземпляров на GCP, развертывании и квантовании с помощью vLLM.

LLaMA 3.1 405B

LLaMA 3.1 405B: требования к оборудованию

Требования к аппаратному обеспечению для запуска Llama 3.1 405B довольно обширны из-за его размера и сложности. Как обычно при развертывании LLM, самой сложной частью является GPU. Для развертывания этой модели вам потребуется много VRAM (т.е. памяти GPU):

Учитывая эти потребности, вы обычно рассматриваете такие установки, как:

Как обычно, с квантованием нужно быть осторожным и следить за тем, чтобы качество модели не пострадало слишком сильно. В нашем тесте квантование fp8, похоже, не повредило качеству модели, поэтому мы будем использовать его в этой статье.

Предоставление экземпляра для LLaMA 3.1 405B на вычислительном движке GCP

Google Cloud Platform (GCP) - интересный поставщик для развертывания и масштабирования рабочих нагрузок ИИ. Они относительно дешевы и имеют хорошее предложение GPU (NVIDIA H100 80GB, NVIDIA A100 80GB, NVIDIA V100, NVIDIA L4, NVIDIA T4...).

Они также довольно гибкие в плане выбора экземпляров. Например, вы можете предоставить экземпляры с одним или несколькими графическими процессорами H100: 1xH100, 2xH100, 4xH100 или 8xH100.

Однако вам может быть не разрешено предоставлять экземпляры GPU, если ваша учетная запись новая, и в этом случае вам нужно будет обратиться в службу поддержки с просьбой об увеличении квоты.

В качестве первого шага вам нужно будет создать новый проект на GCP. Затем нужно включить API Compute Engine для вашего проекта. Это можно сделать, перейдя в библиотеку API в консоли GCP Console и найдя "Compute Engine". Щелкните на нем, а затем нажмите "Включить", чтобы активировать API.

После включения API вы сможете создать новый экземпляр. Для этого нужно перейти в раздел "VM instances" в консоли GCP Console и нажать на кнопку "Create instance".

Затем вам будет предложено выбрать тип машины. Для LLaMA 3.1 405B в режиме fp8 вам нужно выбрать машину a3-highgpu-1g с 8xH100 GPU.

Экземпляр GCP для LLaMA 3.1 405B Экземпляр GCP для LLaMA 3.1 405B

Затем вам нужно будет задать множество параметров для вашей ВМ, таких как сеть, хранилище и т. д. В этой статье мы не будем рассматривать все эти настройки, а сосредоточимся на типе образа и хранилище.

Для загрузки весов модели LLaMA 3.1 405B в формате fp8 вам потребуется не менее 500 ГБ дискового пространства. Мы также рекомендуем использовать образ Linux Deep Learning с уже установленной CUDA 12, так как это может сэкономить работу в дальнейшем. Это можно сделать в разделе "ОС и хранилище":

Образ GCP и дисковое пространство для LLaMA 3.1 405B Образ GCP и дисковое пространство для LLaMA 3.1 405B

Установка vLLM

vLLM, что расшифровывается как Virtual Large Language Model, представляет собой значительное достижение в области ИИ, в частности в том, как большие языковые модели (LLM) обслуживаются и используются для выводов.

vLLM разработан для высокопроизводительных и малозамедленных выводов, что делает его идеальным для приложений, где важна быстрая и эффективная обработка языка. Это достигается благодаря инновационным технологиям, таким как PagedAttention, которая оптимизирует использование памяти за счет более эффективного управления ключом внимания и памятью значений, что позволяет увеличить пропускную способность в 24 раза по сравнению с традиционными методами, такими как HuggingFace Transformers.

Суть эффективности vLLM заключается в управлении памятью. Используя PagedAttention, vLLM делит кэш "ключ-значение" (KV) на блоки, что позволяет лучше использовать память и уменьшить фрагментацию, которая является общим узким местом в использовании памяти GPU для LLM. Такой подход не только ускоряет обработку, но и позволяет обрабатывать больше запросов одновременно без существенного падения производительности.

Как механизм вывода и обслуживания, vLLM фокусируется не просто на выполнении LLM, а на том, чтобы максимально эффективно использовать ресурсы. В нем используются такие методы, как непрерывное пакетное выполнение входящих запросов, что обеспечивает полную загрузку GPU, сокращая время простоя и повышая общую эффективность.

vLLM поддерживает различные методы квантования (например, GPTQ, AWQ, INT4, INT8, FP8), которые снижают точность весов модели, тем самым уменьшая потребление памяти и потенциально ускоряя вывод.

Установка vLLM относительно проста. Давайте подключимся к нашему экземпляру GCP VM и установим vLLM с помощью pip:

pip install vllm

Мы собираемся проводить распределенные вычисления на 8 графических процессорах H100, поэтому нам нужно установить Ray:

pip install ray

Если у вас возникнут проблемы с совместимостью при установке vLLM, возможно, вам будет проще скомпилировать vLLM из исходников или использовать их Docker-образ: ознакомьтесь с инструкциями по установке vLLM.

Сервер выводов для LLaMA 3.1 405B

Начнем с базового примера на Python, чтобы проверить нашу модель:

from vllm import LLM

# Load LLaMA 3.1 405B on 8 GPUs
llm = LLM("neuralmagic/Meta-Llama-3.1-405B-Instruct-FP8-dynamic", tensor_parallel_size=8)

print(llm.generate("What is the difference between fp8 quantization and int8 quantization?"))

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

FP8 (Floating-Point 8) and INT8 (Integer 8) are both quantization techniques used to reduce the precision of numerical values in deep learning models, but they differ in their representation and behavior.

**INT8 Quantization**

INT8 quantization represents numbers as 8-bit integers, which can take on values between -128 and 127 (or 0 and 255 for unsigned integers). This means that the precision of the numbers is limited to 8 bits, and any values outside this range are clipped or saturated.

INT8 quantization is a simple and widely used technique, especially for integer-based architectures like ARM and x86. Most deep learning frameworks, including TensorFlow and PyTorch, support INT8 quantization.

**FP8 Quantization**

FP8 quantization, on the other hand, represents numbers as 8-bit floating-point numbers, with 1 sign bit, 2 exponent bits, and 5 mantissa bits. This allows for a much larger dynamic range than INT8, with values that can be as small as 2^-14 or as large as 2^15.

FP8 quantization is a more recent development, and its main advantage is that it can provide better accuracy than INT8 quantization, especially for models that require a large dynamic range, such as those with batch normalization or depthwise separable convolutions. FP8 is also more suitable for models that are sensitive to quantization noise, like those with recurrent neural networks (RNNs) or long short-term memory (LSTM) networks.

**Key differences**

Here are the key differences between FP8 and INT8 quantization:

1. **Dynamic range**: FP8 has a much larger dynamic range than INT8, which means it can represent a wider range of values.
2. **Precision**: FP8 has a lower precision than INT8, with 5 mantissa bits compared to 8 bits for INT8.
3. **Behavior**: FP8 is more suitable for models that require a large dynamic range, while INT8 is better suited for models with smaller weights and activations.
4. **Hardware support**: INT8 is widely supported by most hardware platforms, while FP8 is still an emerging standard, with limited hardware support.

In summary, FP8 quantization offers better accuracy and a larger dynamic range than INT8 quantization, but it requires more sophisticated hardware support and may not be suitable for all models or applications. 

Модель LLaMA 3.1 405B уже была квантована в fp8 для vLLM компанией Neural Magic, поэтому нам не нужно выполнять квантование снова. Мы просто загружаем квантованную модель из HuggingFace Hub.

Параметр tensor_parallel_size устанавливается в зависимости от количества графических процессоров, которыми мы располагаем на нашей машине.

Однако этот простой Python-скрипт не является полноценным рабочим сервером. Теперь мы запустим сервер выводов, чтобы параллельно обрабатывать множество запросов и максимизировать пропускную способность:

python -m vllm.entrypoints.openai.api_server \
--model neuralmagic/Meta-Llama-3.1-405B-Instruct-FP8-dynamic \
--tensor-parallel-size 8

Когда модель загружена, можно запустить второй терминал и сделать несколько запросов:

curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
    "model": "neuralmagic/Meta-Llama-3.1-405B-Instruct-FP8-dynamic",
    "prompt": "Who are you?"
}'

I'm an artificial intelligence model known as Llama. Llama stands for "Large Language Model Meta AI."

Заключение

LLaMA 3.1 405B - это передовая генеративная модель искусственного интеллекта, но внедрить ее в производство не так-то просто.

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

Для таких больших моделей вы можете использовать квантование, чтобы снизить потребление VRAM и улучшить задержку, как это сделали мы. Но будьте осторожны: квантование не всегда является серебряной пулей, поскольку оно может снизить точность модели.

Если вы не можете или не хотите самостоятельно развернуть LLaMA 3.1 405B, вы можете легко использовать ее на NLP Cloud и задействовать эту замечательную модель в производственных масштабах. Попробуйте LLaMA 3.1 405B на NLP Cloud прямо сейчас!

Если у вас есть вопросы о LLaMA 3.1 405B и AI в целом, пожалуйста, не стесняйтесь спрашивать нас, мы всегда рады помочь!

Julien
Технический директор NLP Cloud