¿Problemas con la IA o el desarrollo full-stack? Nuestros expertos están aquí para guiarle: asesoramiento personalizado, integración técnica y mucho más. Contacte con nosotros en [email protected].

Instalación y despliegue de LLaMA 3.1 405B en producción en GCP Compute Engine

LLaMA 3.1 405b es un gran modelo lingüístico desarrollado por Meta AI, que representa uno de los mayores modelos de IA disponibles abiertamente en términos de tamaño de parámetros, con 405.000 millones de parámetros. Forma parte de la familia Llama 3.1, que incluye modelos de diferentes tamaños (8B, 70B y 405B parámetros).

La versión 405B destaca especialmente por su envergadura, ya que aspira a igualar o incluso superar el rendimiento de algunos de los mejores modelos de código cerrado, como GPT-4, en varias pruebas de referencia, lo que indica sus capacidades de vanguardia en comprensión y generación de lenguaje y otras tareas. Los modelos Llama 3.1 están diseñados con un soporte multilingüe mejorado, capaz de comprender y generar texto en varios idiomas, lo que amplía su aplicabilidad en diferentes regiones y bases de usuarios.

En este artículo, mostramos cómo instalar y desplegar LLaMA 3.1 405B en producción en Google Cloud Platform (GCP) Compute Engine. Primero hablaremos de los requisitos de hardware, luego del aprovisionamiento de instancias en GCP y de la implementación y cuantificación con vLLM.

LLaMA 3.1 405B

LLaMA 3.1 405B: requisitos de hardware

Los requisitos de hardware para ejecutar Llama 3.1 405B son bastante amplios debido a su tamaño y complejidad. Como es habitual al desplegar LLMs, la parte más compleja es la GPU. Necesitarás mucha VRAM (es decir, memoria en la GPU) para desplegar este modelo:

Dadas estas necesidades, lo normal es buscar configuraciones como:

Como siempre, hay que tener cuidado con la cuantización y asegurarse de que la calidad del modelo no se resiente demasiado. En nuestra prueba, la cuantización fp8 no parece perjudicar la calidad del modelo, por lo que vamos a utilizarla en este artículo.

Aprovisionamiento de una instancia para LLaMA 3.1 405B en GCP Compute Engine

Google Cloud Platform (GCP) es un proveedor interesante para desplegar y escalar tus cargas de trabajo de IA. Son relativamente baratos y tienen una buena oferta de GPU (NVIDIA H100 80GB, NVIDIA A100 80GB, NVIDIA V100, NVIDIA L4, NVIDIA T4...).

También son bastante flexibles en cuanto a la elección de instancias. Por ejemplo, puedes aprovisionar instancias con una o más GPUs H100: 1xH100, 2xH100, 4xH100 u 8xH100.

Es posible que no se le permita aprovisionar instancias GPU si su cuenta es nueva, aunque si ese es el caso, tendrá que ir a través de soporte para solicitar un aumento de la cuota.

Como primer paso, deberá crear un nuevo proyecto en GCP. A continuación, deberá habilitar la API Compute Engine para su proyecto. Para ello, vaya a la biblioteca de API en la consola de GCP y busque "Compute Engine". Haga clic en él y, a continuación, en "Habilitar" para activar la API.

Una vez habilitada la API, podrá crear una nueva instancia. Para ello, vaya a la sección "Instancias VM" de la consola de GCP y haga clic en "Crear instancia".

A continuación, se te pedirá que elijas un tipo de máquina. Para LLaMA 3.1 405B en modo fp8, deberás elegir una máquina a3-highgpu-1g con 8xH100 GPUs.

Instancia GCP para LLaMA 3.1 405B Instancia GCP para LLaMA 3.1 405B

A continuación, tendrá que ser capaz de establecer muchos detalles para su VM como redes, almacenamiento, etc. No vamos a revisar todos estos ajustes en este artículo, pero nos centraremos en el tipo de imagen y el almacenamiento.

Para descargar los pesos del modelo LLaMA 3.1 405B en formato fp8, necesitarás al menos 500 GB de espacio en disco. También te recomendamos que utilices una imagen Linux Deep Learning con CUDA 12 ya instalado, ya que puede ahorrarte trabajo más adelante. Puedes conseguirlo en la sección "Sistema operativo y almacenamiento":

Imagen GCP y espacio en disco para LLaMA 3.1 405B Imagen GCP y espacio en disco para LLaMA 3.1 405B

Instalación de vLLM

vLLM, acrónimo de Virtual Large Language Model, representa un avance significativo en el campo de la IA, sobre todo en la forma de servir y utilizar los grandes modelos lingüísticos (LLM) para la inferencia.

vLLM está diseñado para realizar inferencias de alto rendimiento y baja latencia, lo que lo hace ideal para aplicaciones en las que es crucial un procesamiento rápido y eficaz del lenguaje. Lo consigue gracias a técnicas innovadoras como PagedAttention, que optimiza el uso de la memoria gestionando la clave de atención y la memoria de valores de forma más eficiente, lo que permite un rendimiento hasta 24 veces superior en comparación con métodos tradicionales como los transformadores HuggingFace.

El núcleo de la eficiencia de vLLM reside en su gestión de la memoria. Mediante el uso de PagedAttention, vLLM divide la caché de clave-valor (KV) en bloques, lo que permite una mejor utilización de la memoria y reduce la fragmentación, un cuello de botella habitual en el uso de la memoria de la GPU para los LLM. Este enfoque no sólo acelera el procesamiento, sino que también permite gestionar más peticiones simultáneamente sin caídas significativas del rendimiento.

Como motor de inferencia y servicio, vLLM se centra no sólo en ejecutar LLM, sino en hacerlo de forma que se maximice la utilización de los recursos. Emplea técnicas como la agrupación continua de las solicitudes entrantes, que garantiza que la GPU se utilice al máximo, reduciendo así los tiempos de inactividad y aumentando la eficiencia global.

vLLM admite varias técnicas de cuantificación (como GPTQ, AWQ, INT4, INT8, FP8) que reducen la precisión de los pesos del modelo, disminuyendo así el uso de memoria y acelerando potencialmente la inferencia.

Instalar vLLM es relativamente fácil. Vamos a conectarnos a nuestra instancia GCP VM, e instalar vLLM usando pip:

pip install vllm

Vamos a realizar inferencia distribuida en 8 x GPUs H100, por lo que también necesitamos instalar Ray:

pip install ray

Si experimenta problemas de compatibilidad al instalar vLLM, puede que le resulte más sencillo compilar vLLM desde el código fuente o utilizar su imagen Docker: eche un vistazo a las instrucciones de instalación de vLLM.

Servidor de inferencias para LLaMA 3.1 405B

Empezaremos con un ejemplo básico en Python para probar nuestro modelo:

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?"))

Puedes ejecutar el script de Python. Si es la primera vez que lo ejecutas, tendrás que esperar a que el modelo se descargue y se cargue en la GPU, entonces recibirás una respuesta como esta:

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. 

El modelo LLaMA 3.1 405B ya ha sido cuantizado en fp8 para vLLM por Neural Magic, por lo que no necesitamos realizar la cuantización de nuevo. Simplemente cargamos el modelo cuantizado desde el Hub HuggingFace.

El parámetro tensor_parallel_size se establece en función del número de GPUs que poseamos en nuestra máquina.

Sin embargo, este sencillo script de Python no es un servidor de producción propiamente dicho. Ahora iniciaremos el servidor de inferencia para consumir muchas peticiones en paralelo y maximizar el rendimiento:

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

Una vez cargado el modelo, puede iniciar un segundo terminal y realizar algunas peticiones:

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."

Conclusión

LLaMA 3.1 405B es un modelo de IA generativa de vanguardia, pero su implantación en producción no es fácil.

El mayor reto es encontrar el hardware adecuado. Las GPU son muy caras y escasean en todo el mundo. Pero una vez que se consigue aprovisionar las GPU adecuadas, implantar el modelo con un servidor de inferencia como vLLM es bastante fácil.

Para modelos tan grandes, puede que quieras aprovechar la cuantización para reducir el uso de VRAM y mejorar la latencia, como hicimos nosotros. Pero ten cuidado: la cuantización no siempre es una bala de plata, ya que puede disminuir la precisión del modelo.

Si no puedes o no quieres desplegar LLaMA 3.1 405B por ti mismo, puedes utilizarlo fácilmente en NLP Cloud y aprovechar este gran modelo a escala en producción. ¡Pruebe LLaMA 3.1 405B en NLP Cloud ahora!

Si tiene alguna pregunta sobre LLaMA 3.1 405B y la IA en general, no dude en consultarnos, ¡siempre es un placer asesorarle!

Julien
Director Técnico de NLP Cloud