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 досить великі через її розмір та складність. Як завжди при розгортанні LLM, найскладнішою частиною є графічний процесор. Для розгортання цієї моделі вам знадобиться багато VRAM (тобто пам'яті графічного процесора):
Враховуючи ці потреби, ви, як правило, розглядаєте такі варіанти налаштувань:
Як завжди, ви повинні бути обережними з квантуванням і переконатися, що якість моделі не постраждає надто сильно. У нашому тесті квантування fp8, здається, не шкодить якості моделі, тому ми будемо використовувати його у цій статті.
Google Cloud Platform (GCP) - цікавий провайдер для розгортання та масштабування робочих навантажень ШІ. Вони відносно дешеві і мають хорошу пропозицію графічних процесорів (NVIDIA H100 80GB, NVIDIA A100 80GB, NVIDIA V100, NVIDIA L4, NVIDIA T4...).
Вони також досить гнучкі в плані вибору екземплярів. Наприклад, ви можете надати екземпляри з одним або декількома графічними процесорами H100: 1xH100, 2xH100, 4xH100 або 8xH100.
Можливо, вам не буде дозволено надавати екземпляри GPU, якщо ваш обліковий запис новий, і в цьому випадку вам слід звернутися до служби підтримки з проханням про збільшення квоти.
Першим кроком буде створення нового проекту на GCP. Потім вам потрібно увімкнути API Compute Engine для вашого проекту. Ви можете зробити це, перейшовши до бібліотеки API в консолі GCP і знайшовши "Compute Engine". Натисніть на нього, а потім натисніть "Enable", щоб активувати API.
Після того, як ви увімкнули API, ви зможете створити новий екземпляр. Ви можете зробити це, перейшовши до розділу "Екземпляри ВМ" у консолі GCP і натиснувши на кнопку "Створити екземпляр".
Після цього вам буде запропоновано вибрати тип машини. Для LLaMA 3.1 405B у режимі fp8 вам потрібно вибрати машину a3-highgpu-1g з 8xH100 графічними процесорами.
Примірник GCP для LLaMA 3.1 405B
Після цього ви зможете налаштувати багато параметрів для вашої віртуальної машини, таких як мережа, сховище тощо. У цій статті ми не розглядатимемо всі ці параметри, а зосередимося на типі образу і сховищі.
Для того, щоб завантажити ваги моделі LLaMA 3.1 405B у форматі fp8, вам знадобиться щонайменше 500 ГБ дискового простору. Ми також рекомендуємо використовувати образ Linux Deep Learning з уже встановленою CUDA 12, оскільки це може заощадити деяку роботу пізніше. Ви можете зробити це в розділі "Операційна система та сховище":
Образ GCP та дисковий простір для LLaMA 3.1 405B
vLLM, що розшифровується як "віртуальна велика мовна модель", являє собою значний прогрес у галузі ШІ, особливо в тому, як великі мовні моделі (LLM) обслуговуються та використовуються для виведення.
vLLM розроблено для високопродуктивних висновків з низькою затримкою, що робить його ідеальним для додатків, де швидка та ефективна обробка мови має вирішальне значення. Це досягається завдяки інноваційним методам, таким як PagedAttention, який оптимізує використання пам'яті, ефективніше керуючи пам'яттю ключів і значень уваги, що забезпечує до 24 разів вищу пропускну здатність порівняно з традиційними методами, такими як HuggingFace Transformers.
Основою ефективності vLLM є управління пам'яттю. Використовуючи PagedAttention, vLLM розділяє кеш ключ-значення (KV) на блоки, що дозволяє краще використовувати пам'ять і зменшує фрагментацію, загальне вузьке місце у використанні пам'яті GPU для LLM. Такий підхід не тільки прискорює обробку, але й дозволяє обробляти більше запитів одночасно без значного падіння продуктивності.
Як рушій виведення та обслуговування, vLLM зосереджується не лише на виконанні LLM, але й на тому, щоб максимально ефективно використовувати ресурси. Він використовує такі методи, як безперервне пакетування вхідних запитів, що гарантує повне завантаження графічного процесора, тим самим зменшуючи час простою і підвищуючи загальну ефективність.
vLLM підтримує різні методи квантування (наприклад, GPTQ, AWQ, INT4, INT8, FP8), які зменшують точність ваг моделей, тим самим зменшуючи використання пам'яті і потенційно прискорюючи виведення.
Встановити vLLM відносно просто. Давайте підключимося до нашого екземпляра GCP ВМ і встановимо vLLM за допомогою pip:
pip install vllm
Ми збираємося виконувати розподілене виведення на 8 x H100 графічних процесорах, тому нам також потрібно встановити Ray:
pip install ray
Якщо під час встановлення vLLM виникають проблеми із сумісністю, можливо, вам буде простіше скомпілювати vLLM з вихідного коду або використати їхній Docker-образ: ознайомтеся з інструкціями щодо встановлення vLLM.
Давайте почнемо з базового прикладу на 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-скрипт. Якщо ви запускаєте його вперше, вам потрібно буде почекати, поки модель завантажиться і завантажиться на графічний процесор, після чого ви отримаєте відповідь, подібну до цієї:
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 - це найсучасніша модель генеративного ШІ, але впровадити її у виробництво непросто.
Найбільший виклик - знайти правильне обладнання. Графічні процесори дуже дорогі, і існує глобальний дефіцит. Але як тільки вам вдасться знайти відповідні графічні процесори, розгортання моделі з сервером виведення, таким як vLLM, буде досить простим.
Для таких великих моделей ви можете використовувати квантування, щоб зменшити використання VRAM і покращити затримку, як це зробили ми. Але будьте обережні: квантування не завжди є срібною кулею, оскільки воно може знизити точність моделі.
Якщо ви не можете або не хочете розгортати LLaMA 3.1 405B самостійно, ви можете легко використовувати його в NLP Cloud і використовувати цю чудову модель в масштабах виробництва. Спробуйте LLaMA 3.1 405B в NLP Cloud прямо зараз!
Якщо у вас є питання про LLaMA 3.1 405B та ШІ загалом, будь ласка, не соромтеся запитувати нас, ми завжди раді допомогти!
Julien
Технічний директор NLP Cloud