Имате проблеми с ИИ или разработката на пълен пакет? Нашите експерти са тук, за да ви напътстват: индивидуални съвети, техническа интеграция и др. Свържете се с [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, най-сложната част е графичният процесор. Ще ви е необходима много VRAM (т.е. памет на графичния процесор), за да разгърнете този модел:

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

Както обикновено, трябва да внимавате за квантуването и да се уверите, че качеството на модела няма да пострада твърде много. В нашия тест квантуването fp8 не изглежда да вреди на качеството на модела, така че ще го използваме в тази статия.

Предоставяне на инстанция за LLaMA 3.1 405B в GCP Compute Engine

Платформата 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, ще можете да създадете нова инстанция. Можете да направите това, като отидете в раздела "VM instances" (Инстанции на виртуални машини) в конзолата на GCP и щракнете върху "Create instance" (Създаване на инстанция).

След това ще бъдете помолени да изберете тип машина. За LLaMA 3.1 405B в режим fp8 ще трябва да изберете машина a3-highgpu-1g с 8xH100 графични процесора.

Инстанция на GCP за LLaMA 3.1 405B Инстанция на GCP за LLaMA 3.1 405B

След това ще трябва да можете да зададете много детайли за вашата виртуална машина, като например мрежа, съхранение и др. В тази статия няма да разглеждаме всички тези настройки, а ще се съсредоточим върху типа на изображението и съхранението.

За да изтеглите теглата на модела LLaMA 3.1 405B във формат fp8, ще ви е необходимо поне 500 GB дисково пространство. Препоръчваме ви също така да използвате образ на 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, но и върху това да го прави по начин, който максимизира използването на ресурсите. Той използва техники като непрекъснато групиране на входящите заявки, което гарантира, че графичният процесор остава напълно натоварен, като по този начин се намалява времето на престой и се повишава общата ефективност.

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

Инсталирането на vLLM е сравнително лесно. Нека се свържем с нашата виртуална машина на GCP и да инсталираме vLLM с помощта на pip:

pip install vllm

Ще извършваме разпределени изводи на 8 x 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. Ако го стартирате за първи път, ще трябва да изчакате моделът да бъде изтеглен и зареден на графичния процесор, след което ще получите отговор, подобен на този:

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.

Параметърът 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