В 2023 году было выпущено множество передовых LLM с открытым исходным кодом, но развертывание этих моделей ИИ в производстве все еще остается технической проблемой. В этой статье мы покажем, как развернуть некоторые из лучших LLM на AWS EC2: LLaMA 3 70B, Mistral 7B и Mixtral 8x7B. Мы будем использовать передовой механизм вывода, который поддерживает пакетный вывод для максимизации пропускной способности: vLLM.
Компания Meta создала и запустила серию больших языковых моделей (LLM) LLaMA 3, которая включает в себя различные генеративные текстовые модели, прошедшие предварительное обучение и тонкую настройку. Эти модели различаются по размеру, их параметры варьируются от 7 до 70 миллиардов.
Mistral AI, стартап, соучредителями которого являются люди с опытом работы в Google DeepMind и Meta, сделал значительный шаг в мир LLM, представив Mistral 7B, а затем Mixtral 8x7B.
Что особенно впечатляет в Mistral 7B, так это его производительность. В различных тестах он превзошел Llama2-13B и даже превзошел Llama1-34B по многим показателям. Это говорит о том, что Mistral 7B обеспечивает аналогичные или лучшие возможности при значительно меньших вычислительных затратах. В задачах кодирования Mistral 7B конкурирует с CodeLlama 7B, а его компактный размер в 13,4 ГБ позволяет запускать его на стандартных машинах.
Mixtral 8x7B - это адаптируемая и быстрая модель, подходящая для различных применений. Она работает в шесть раз быстрее и по всем тестовым показателям соответствует или превосходит LLaMA 3 70B. Эта модель поддерживает несколько языков и обладает встроенными возможностями кодирования. Она может обрабатывать последовательности длиной до 32 тыс. лексем.
Все эти модели имеют открытый исходный код, и вы можете развернуть их на своем собственном сервере, если вам удастся получить доступ к нужному оборудованию. Давайте посмотрим, как развернуть их на AWS EC2 с помощью vLLM.
vLLM - это быстрая и удобная библиотека, предназначенная для эффективного вывода и развертывания LLM. Производительность vLLM достигается благодаря нескольким передовым технологиям, таким как страничное внимание для эффективного управления памятью ключей внимания и значений, пакетная обработка входящих запросов в реальном времени и адаптированные ядра CUDA.
Кроме того, vLLM обеспечивает хорошую гибкость за счет распределенного вывода (с помощью тензорного параллелизма), потокового вывода и возможности работы с архитектурами GPU NVIDIA и AMD.
В частности, vLLM будет очень полезен для развертывания LLaMA 3, Mistral и Mixtral, потому что он позволит нам развернуть наши модели на AWS EC2, в которых встроено несколько небольших GPU (например, NVIDIA A10), вместо одного большого GPU (например, NVIDIA A100 или H100). Кроме того, vLLM позволит нам значительно увеличить пропускную способность нашей модели благодаря пакетному выводу.
Развертывание LLM является сложной задачей по многим причинам: Использование VRAM (памяти GPU), скорость вычислений, пропускная способность, использование дискового пространства... Здесь нам нужно убедиться, что мы предоставим экземпляр GPU на AWS EC2, который будет иметь достаточно VRAM для работы наших моделей.
Экземпляры G5 - это хороший выбор, поскольку они предоставляют доступ к современным графическим процессорам NVIDIA A10 и могут масштабироваться до 192 ГБ VRAM (см. экземпляр g5.48xlarge), оставаясь при этом достаточно экономичными.
Mistral 7B - самая простая в развертывании модель, поскольку для нее требуется около 14 ГБ VRAM. Далее следуют Mixtral 8x7B с 110 ГБ и LLaMA 3 70B с 140 ГБ. Здесь мы рассматриваем только fp16, а не fp32, и не применяем никакого квантования.
Следовательно, Mistral 7B может работать на экземпляре g5.xlarge, но для Mixtral 8x7B и LLaMA 3 70B требуется экземпляр g5.48xlarge, поэтому в этом руководстве мы будем предоставлять экземпляр g5.48xlarge.
Чтобы создать такие экземпляры, войдите в консоль AWS EC2 и запустите новый экземпляр: выберите NVIDIA deep learning AMI на экземпляре g5.48xlarge. Вам понадобится не менее 300 ГБ дискового пространства.
Установка vLLM довольно проста. Давайте откроем SSH-соединение с нашим только что созданным экземпляром AWS и установим vLLM с помощью pip:
pip install vllm
Поскольку мы будем использовать vLLM для распределенных выводов на 8 x A10 GPU, нам нужно установить и Ray:
pip install ray
Если в процессе установки возникнут проблемы с совместимостью, возможно, вам будет проще собрать vLLM из исходных текстов или использовать их Docker-образ: Более подробную информацию см. в документации по установке.
Теперь вы можете создать свой первый сценарий вывода. Создайте файл Python, содержащий следующее:
from vllm import LLM
# Replace the model name with the one you want to use:
# Mixtral simple: mistralai/Mixtral-8x7B-v0.1
# Mixtral instruct: mistralai/Mixtral-8x7B-Instruct-v0.1
# Mistral 7B simple: mistralai/Mistral-7B-v0.1
# Mistral 7B instruct: mistralai/Mistral-7B-Instruct-v0.1
# LLaMA 3 70B: meta-llama/Llama-2-70b-hf
llm = LLM("mistralai/Mixtral-8x7B-Instruct-v0.1", tensor_parallel_size=8)
print(llm.generate("What is batch inference?"))
Теперь запустите свой скрипт в Python, который вернет что-то вроде этого:
Batch inference is the process of applying machine learning models to a batch of data inputs all at once, rather than processing each input individually in real-time. In batch inference, a large set of inputs is collected and then processed together as a group, or "batch," by the machine learning model.
Batch inference is often used in scenarios where real-time predictions are not required, and where there is a large volume of data that needs to be processed. It can be more efficient and cost-effective than real-time inference, as it allows for the efficient use of computing resources and can reduce the latency associated with processing individual inputs.
Batch inference is commonly used in applications such as image recognition, natural language processing, and predictive analytics. For example, a company might use batch inference to analyze customer data and generate insights about purchasing patterns, or to analyze sensor data from industrial equipment to identify potential maintenance issues.
In summary, batch inference is the process of applying machine learning models to a batch of data inputs all at once, as an alternative to real-time inference. It is commonly used in scenarios where real-time predictions are not required and where there is a large volume of data that needs to be processed efficiently.
Как видите, это несложно. Вы должны адаптировать tensor_parallel_size в зависимости от количества базовых GPU.
Вышеописанный сценарий был одноразовым. Теперь мы хотим запустить настоящий сервер выводов, который сможет обрабатывать множество запросов и выполнять пакетные выводы на лету. Сначала запустите сервер:
python -m vllm.entrypoints.openai.api_server \
--model mistralai/Mixtral-8x7B-Instruct-v0.1
--tensor-parallel-size 8
Через некоторое время, когда модель будет корректно загружена в VRAM, можно открыть второе окно оболочки и сделать несколько запросов:
curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "mistralai/Mixtral-8x7B-Instruct-v0.1",
"prompt": "What is batch inference?"
}'
Это даст тот же результат, что и раньше, но на этот раз вы можете выполнить несколько запросов одновременно.
Использование продвинутого сервера выводов, такого как vLLM, будет полезно, если вы хотите максимально эффективно использовать GPU и легко развернуть модель на нескольких GPU параллельно.
Как видите, с помощью этой техники можно легко развернуть на собственном сервере самые передовые модели ИИ с открытым исходным кодом, такие как LLaMA 3, Mistral и Mixtral.
В этом учебнике мы использовали AWS EC2, но, конечно, могли бы использовать и других поставщиков. Основной проблемой будет стоимость графических процессоров, а также их доступность.
Если вы не хотите разворачивать такие LLM самостоятельно, мы рекомендуем вам использовать наш NLP Cloud API. Это сэкономит вам много времени и даже может оказаться дешевле, чем развертывание собственных LLM. Если вы еще не сделали этого, не стесняйтесь, попробуйте!
Vincent
Защитник разработчиков в NLP Cloud