¿Cómo instalar e implantar LLaMA 3 en producción?

Meta presentó hace un par de días el modelo de IA generativa LLaMA 3, que ya muestra unas capacidades impresionantes.

Aprenda a instalar y desplegar LLaMA 3 en producción con esta guía paso a paso. Desde los requisitos de hardware hasta la implementación y el escalado, cubrimos todo lo que necesitas saber para una implementación sin problemas.

LLaMA 3

Introducción al LLaMA 3

Meta ha presentado las versiones iniciales de su modelo de IA de código abierto Llama 3, que puede utilizarse para la creación de textos, programación o chatbots. Además, Meta ha anunciado sus planes de incorporar LLaMA 3 a sus principales aplicaciones de redes sociales. Este movimiento pretende competir con otros asistentes de IA, como ChatGPT de OpenAI, Copilot de Microsoft y Gemini de Google.

Al igual que Llama 2, Llama 3 destaca por ser un gran modelo lingüístico de libre acceso con pesos abiertos, ofrecido por una empresa líder en IA (aunque no se puede calificar de "código abierto" en el sentido convencional).

Actualmente, Llama 3 puede descargarse gratuitamente desde el sitio web de Meta en dos tamaños de parámetros diferentes: 8.000 millones (8B) y 70.000 millones (70B). Los usuarios pueden registrarse para acceder a estas versiones. Llama 3 se ofrece en dos variantes: preentrenada, que es un modelo básico para la predicción del siguiente token, y ajustada a instrucciones, que se ajusta con precisión a las órdenes del usuario. Ambas versiones tienen un límite de contexto de 8.192 tokens.

En una entrevista con Dwarkesh Patel, Mark Zuckerberg, CEO de Meta, mencionó que entrenaron dos modelos personalizados utilizando un clúster de 24.000 GPU. El modelo 70B se entrenó con aproximadamente 15 billones de tokens de datos, y nunca alcanzó un punto de saturación o un límite en sus capacidades. Después, Meta decidió centrarse en el entrenamiento de otros modelos. La compañía también ha revelado que actualmente está trabajando en una versión de Llama 3 con parámetros de 400B, que expertos como Jim Fan, de Nvidia, creen que podría tener un rendimiento similar a GPT-4 Turbo, Claude 3 Opus y Gemini Ultra en pruebas como MMLU, GPQA, HumanEval y MATH.

Según Meta, Llama 3 ha sido evaluado utilizando varias pruebas de referencia, como MMLU (conocimientos de nivel universitario), GSM-8K (matemáticas de primaria), HumanEval (codificación), GPQA (preguntas de nivel universitario) y MATH (problemas matemáticos de palabras). Estas pruebas demuestran que el modelo 8B supera a modelos de ponderación abierta como Gemma 7B y Mistral 7B Instruct de Google, y que el modelo 70B es competitivo frente a Gemini Pro 1.5 y Claude 3 Sonnet.

Meta informa de que el modelo Llama 3 se ha mejorado con la capacidad de comprender codificación, similar a Llama 2, y por primera vez se ha entrenado utilizando tanto imágenes como texto. Sin embargo, su rendimiento actual se limita al texto.

Puntos de referencia de LLaMA 3 Puntos de referencia de LLaMA 3

Requisitos de hardware de LLaMA 3 y selección de las instancias adecuadas en AWS EC2

Dado que muchas organizaciones utilizan AWS para sus cargas de trabajo de producción, veamos cómo implementar LLaMA 3 en AWS EC2.

Existen múltiples obstáculos a la hora de implementar LLM, como el consumo de VRAM (memoria de la GPU), la velocidad de inferencia, el rendimiento y la utilización del espacio en disco. En este escenario, debemos asegurarnos de asignar una instancia de GPU en AWS EC2 con suficiente capacidad de VRAM para soportar la ejecución de nuestros modelos.

LLaMA 3 8B requiere alrededor de 16GB de espacio en disco y 20GB de VRAM (memoria GPU) en FP16. Por supuesto, podrías implementar LLaMA 3 en una CPU, pero la latencia sería demasiado alta para un caso de uso en producción real. En cuanto a LLaMA 3 70B, requiere alrededor de 140 GB de espacio en disco y 160 GB de VRAM en FP16.

Conseguir 20 GB de VRAM para LLaMA 3 8B es bastante fácil. Te recomiendo que aprovisiones una GPU NVIDIA A10: esta GPU viene con 24GB de VRAM y es una GPU rápida basada en la plataforma Ampere. En AWS EC2, debe seleccionar una instancia G5 para aprovisionar una GPU A10. Una instancia g5.xlarge será suficiente.

Sin embargo, desplegar el modelo LLaMA 3 70B es mucho más complicado. Ninguna GPU tiene suficiente VRAM para este modelo, por lo que tendrás que aprovisionar una instancia multi-GPU. Si aprovisionas una instancia g5.48xlarge en AWS obtendrás 192 GB de VRAM (8 x GPUs A10), lo que será suficiente para LLaMA 3 70B.

En una configuración de este tipo, cabe esperar las siguientes latencias (tiempos de respuesta): 50 tokens generados en 1 segundo para LLaMA 3 8B, y 50 tokens generados en 5 segundos para LLaMA 3 70B.

Para disminuir el coste operativo de estos modelos y aumentar la latencia, puede investigar técnicas de cuantización, pero tenga en cuenta que estas optimizaciones pueden perjudicar la precisión de su modelo. La cuantización queda fuera del ámbito de este artículo.

Para aprovisionar estas instancias, inicie sesión en la consola de AWS EC2 y cree una nueva instancia: seleccione la AMI de aprendizaje profundo de NVIDIA en una instancia g5.xlarge o g5.48xlarge. No olvides aprovisionar también suficiente espacio en disco.

AMI de aprendizaje profundo en una instancia G5 en AWS

Inferencia de producción con vLLM

vLLM es una biblioteca diseñada para la inferencia y despliegue rápidos y sencillos de LLM. Su eficacia se atribuye a varios métodos sofisticados, como la atención paginada para una gestión óptima de la memoria de claves y valores de atención, el procesamiento en tiempo real de las consultas entrantes por lotes y los kernels CUDA personalizados.

Además, vLLM proporciona un alto grado de adaptabilidad al emplear computación distribuida (utilizando paralelismo tensorial), streaming en tiempo real y compatibilidad con tarjetas gráficas NVIDIA y AMD.

En concreto, vLLM será de gran ayuda en la implantación de LLaMA 3, ya que nos permitirá utilizar instancias EC2 de AWS equipadas con varias GPU NVIDIA A10 compactas. Esto resulta ventajoso frente al uso de una única GPU de gran tamaño, como las NVIDIA A100 o H100. Además, vLLM mejorará significativamente la eficiencia de nuestro modelo gracias a la inferencia continua por lotes.

Configurar vLLM es bastante sencillo. Establezcamos una conexión SSH a nuestra instancia de AWS recién creada e instalemos vLLM con pip:

pip install vllm

Dado que planeamos realizar inferencia distribuida utilizando vLLM en 8 GPUs A10, también es necesaria la instalación de Ray:

pip install ray

En caso de que encuentre problemas de compatibilidad durante la instalación, 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.

Iniciar el servidor de inferencia

Ahora vamos a crear nuestro script de inferencia en Python:

from vllm import LLM

# Use LLaMA 3 8B on 1 GPU
llm = LLM("meta-llama/Meta-Llama-3-8B-Instruct")

# Use LLaMA 3 70B on 8 GPUs
# llm = LLM("meta-llama/Meta-Llama-3-70B-Instruct", tensor_parallel_size=8)

print(llm.generate("What are the most popular quantization techniques for LLMs?"))

Puedes ejecutar el script anterior. Si es la primera vez que ejecutas este script, tendrás que esperar a que el modelo se descargue y se cargue en la GPU, entonces recibirás algo como esto:

The most popular quantization techniques for Large Language Models (LLMs) are:
1. Integer Quantization
2. Floating-Point Quantization
3. Mixed-Precision Training
4. Knowledge Distillation

Es bastante sencillo de entender. Simplemente tienes que ajustar el tensor_parallel_size en función del número de GPUs que poseas.

Ahora se trata de iniciar un servidor de inferencias adecuado, capaz de gestionar numerosas peticiones y ejecutar inferencias simultáneas. Para empezar, inicie el servidor:

Para LLaMA 3 8B:

python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Meta-Llama-3-8B-Instruct

Para LLaMA 3 70B:

python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Meta-Llama-3-70B-Instruct
--tensor-parallel-size 8

El modelo debería tardar hasta 1 minuto en cargarse en la GPU. A continuación, puede iniciar un segundo terminal y empezar a hacer algunas peticiones:

curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
    "model": "meta-llama/Meta-Llama-3-8B-Instruct",
    "prompt": "What are the most popular quantization techniques for LLMs?"
}'

Ahora tienes un servidor de inferencia listo para producción que puede manejar muchas peticiones paralelas gracias a la dosificación continua. En algún momento, si el número de peticiones es demasiado alto, la GPU se sobrecargará. En ese caso necesitarás replicar el modelo en varias instancias de GPU y balancear la carga de tus peticiones (pero esto está fuera del alcance de este artículo).

Conclusión

Como puede ver, el despliegue de LLaMA 3 en producción no requiere ningún código complejo gracias a servidores de inferencia como vLLM.

Sin embargo, conseguir el hardware adecuado es todo un reto. En primer lugar, porque estas GPU son muy caras, pero también por la actual escasez mundial de GPU. Si es la primera vez que intenta aprovisionar un servidor de GPU en AWS, es posible que no tenga permiso para crear un servidor de GPU. En ese caso tendrás que contactar con soporte y explicar tu caso de uso. En este artículo hemos utilizado AWS EC2 pero por supuesto hay otros proveedores disponibles (Azure, GCP, OVH, Scaleway...).

Si no estás interesado en desplegar LLaMA 3 por ti mismo, te sugerimos utilizar nuestra NLP Cloud API. Esta opción puede ser más eficiente y potencialmente mucho más rentable que gestionar tu propia infraestructura de LLaMA 3. ¡Pruebe LLaMA 3 en NLP Cloud ahora!

Si tienes alguna pregunta sobre LLaMA 3 y la implantación de IA en general, no dudes en consultarnos, ¡siempre es un placer ayudar!

Julien
Director Técnico de NLP Cloud