У 2023 році було випущено багато передових LLM з відкритим вихідним кодом, але розгортання цих моделей ШІ у виробництво все ще залишається технічною проблемою. У цій статті ми покажемо, як розгорнути деякі з найкращих LLM на AWS EC2: LLaMA 3 70B, Mistral 7B та Mixtral 8x7B. Ми будемо використовувати вдосконалений механізм виведення, який підтримує пакетне виведення, щоб максимізувати пропускну здатність: vLLM.
Компанія Meta створила і запустила серію великих мовних моделей LLaMA 3, яка включає в себе різноманітні генеративні текстові моделі, які були попередньо навчені і точно налаштовані. Ці моделі різняться за розміром, їхні параметри варіюються від 7 до 70 мільярдів.
Mistral AI, стартап, співзасновниками якого є люди з досвідом роботи в Google's DeepMind і Meta, зробив значний крок у світ LLM з Mistral 7B, а потім Mixtral 8x7B.
Що робить Містраль 7Б особливо вражаючим, так це його характеристики. У різних тестах він перевершив 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 пропонує хорошу гнучкість завдяки розподіленому виводу (через тензорний паралелізм), потоковому виводу та адаптації до архітектур графічних процесорів NVIDIA та AMD.
Зокрема, vLLM буде дуже корисним для розгортання LLaMA 3, Mistral та Mixtral, оскільки він дозволить нам розгортати наші моделі на екземплярах AWS EC2, що містять кілька менших графічних процесорів (наприклад, NVIDIA A10), а не один великий графічний процесор (наприклад, NVIDIA A100 або H100). Крім того, vLLM дозволить нам значно збільшити пропускну здатність нашої моделі завдяки пакетному виводу.
Розгортання LLM є складним завданням з багатьох причин: Використання VRAM (пам'яті GPU), швидкість виведення, пропускна здатність, використання дискового простору... Тут нам потрібно переконатися, що ми забезпечимо екземпляр графічного процесора на AWS EC2, який має достатньо VRAM для запуску наших моделей.
Примірники G5 - хороший вибір, оскільки вони надають доступ до сучасних графічних процесорів NVIDIA A10 і можуть масштабуватися до 192 ГБ VRAM (див. примірник g5.48xlarge), залишаючись при цьому досить економічно вигідними.
Mistral 7B - найпростіша модель для розгортання, оскільки вона вимагає близько 14 ГБ оперативної пам'яті. Далі йдуть 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 графічних процесорах A10, нам також потрібно встановити 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 в залежності від кількості ваших графічних процесорів.
Вище було описано одноразовий сценарій. Тепер ми хочемо запустити належний сервер виведення, який може обробляти декілька запитів і виконувати пакетне виведення на льоту. Спочатку запустимо сервер:
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, є вигідним, якщо ви хочете максимально використати ваш графічний процесор і легко розгорнути вашу модель на декількох графічних процесорах паралельно.
Як бачите, завдяки цій методиці досить легко розгорнути на власному сервері найсучасніші моделі ШІ з відкритим вихідним кодом, такі як LLaMA 3, Mistral і Mixtral.
У цьому підручнику ми використовували AWS EC2, але, звичайно, можна було б використовувати й інші постачальники. Основною проблемою буде вартість графічних процесорів, а також їх доступність.
Якщо ви не хочете розгортати такі LLM самостійно, ми рекомендуємо вам скористатися нашим NLP Cloud API. Це заощадить вам багато часу і може бути навіть дешевше, ніж розгортання власних LLM. Якщо ви ще не зробили цього, не соромтеся спробувати!
Vincent
Адвокат розробників у NLP Cloud