Implementación de LLaMA 3, Mistral y Mixtral en AWS EC2 con vLLM

En 2023, se han publicado muchos LLM avanzados de código abierto, pero implementar estos modelos de IA en producción sigue siendo un desafío técnico. En este artículo mostraremos cómo implementar algunos de los mejores LLM en AWS EC2: LLaMA 3 70B, Mistral 7B y Mixtral 8x7B. Utilizaremos un motor de inferencia avanzado que admite la inferencia por lotes para maximizar el rendimiento: vLLM.

vLLM

LLaMA 3, Mistral y Mixtral

Meta ha creado y lanzado la serie LLaMA 3 de grandes modelos lingüísticos (LLM), que incluye una variedad de modelos generativos de texto preentrenados y ajustados. Estos modelos varían en tamaño, con parámetros que oscilan entre 7.000 y 70.000 millones.

Mistral AI, una startup cofundada por personas con experiencia en DeepMind de Google y Meta, hizo una entrada significativa en el mundo de los LLM con Mistral 7B y luego Mixtral 8x7B.

Lo que hace que Mistral 7B sea especialmente impresionante es su rendimiento. En varias pruebas, ha superado a Llama2-13B, e incluso a Llama1-34B en muchas métricas. Esto sugiere que Mistral 7B proporciona capacidades similares o mejores con una sobrecarga computacional significativamente menor. Cuando se trata de tareas de codificación, Mistral 7B compite con CodeLlama 7B, y su tamaño compacto de 13,4 GB le permite funcionar en máquinas estándar.

Mixtral 8x7B es un modelo adaptable y rápido adecuado para diversas aplicaciones. Funciona a una velocidad seis veces superior y alcanza o supera el rendimiento de LLaMA 3 70B en todas las métricas de prueba. Este modelo admite varios idiomas y posee capacidades de codificación inherentes. Puede gestionar secuencias de hasta 32.000 tokens de longitud.

Todos estos modelos son de código abierto y puedes implementarlos en tu propio servidor si consigues acceder al hardware adecuado. Veamos cómo implementarlos en AWS EC2 con vLLM.

Inferencia por lotes y multi GPU con vLLM

vLLM es una biblioteca rápida y fácil de usar diseñada para la inferencia y el despliegue eficientes de LLM. El rendimiento de vLLM proviene de varias técnicas avanzadas como la atención paginada para una gestión eficaz de la memoria de valores y claves de atención, el procesamiento por lotes de las consultas entrantes en tiempo real y los kernels CUDA personalizados.

Además, vLLM ofrece una gran flexibilidad gracias a la inferencia distribuida (a través del paralelismo tensorial), el streaming de salida y la adaptación a las arquitecturas de GPU de NVIDIA y AMD.

En concreto, vLLM será muy útil para desplegar LLaMA 3, Mistral y Mixtral, ya que nos permitirá desplegar nuestros modelos en instancias de AWS EC2 que incorporen varias GPUs pequeñas (como la NVIDIA A10), en lugar de una única GPU grande (como la NVIDIA A100 o la H100). Además, vLLM nos permitirá aumentar drásticamente el rendimiento de nuestro modelo gracias a la inferencia por lotes.

Aprovisionar el hardware adecuado en AWS EC2

El despliegue de LLM es un reto por muchas razones: Uso de VRAM (memoria de la GPU), velocidad de inferencia, rendimiento, uso de espacio en disco... Aquí tenemos que asegurarnos de que vamos a aprovisionar una instancia de GPU en AWS EC2 que tenga suficiente VRAM para ejecutar nuestros modelos.

Las instancias G5 son una buena opción porque te dan acceso a las modernas GPUs NVIDIA A10, y pueden escalar hasta 192 GB de VRAM (ver la instancia g5.48xlarge), sin dejar de ser bastante rentables.

Mistral 7B es el modelo más fácil de implantar, ya que requiere unos 14 GB de VRAM. Luego vienen Mixtral 8x7B con 110GB y LLaMA 3 70B con 140GB. Aquí sólo consideramos fp16, no fp32, y no aplicamos ningún tipo de cuantización.

En consecuencia, Mistral 7B puede ejecutarse en una instancia g5.xlarge, pero Mixtral 8x7B y LLaMA 3 70B requieren una instancia g5.48xlarge, por lo que vamos a aprovisionar una instancia g5.48xlarge en este tutorial.

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.48xlarge. Necesitarás al menos 300 GB de espacio en disco.

AMI de aprendizaje profundo en una instancia G5 en AWS

Instalación de vLLM para la inferencia distribuida

La instalación de vLLM es bastante sencilla. Abramos una conexión SSH a nuestra instancia de AWS recién creada e instalemos vLLM con pip:

pip install vllm

Como vamos a utilizar vLLM para la inferencia distribuida en 8 GPUs A10, necesitamos instalar Ray también:

pip install ray

En caso de problemas de compatibilidad durante el proceso de instalación, puede que le resulte más fácil compilar vLLM desde el código fuente o utilizar su imagen Docker: consulte la documentación de instalación para más detalles.

Crear el script de inferencia

Ahora puede crear su primer script de inferencia. Cree un archivo Python que contenga lo siguiente:

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

Ahora ejecute su script con Python, que devuelve algo como esto:

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.

Como puedes ver esto es pan comido. Tienes que adaptar tensor_parallel_size en función del número de GPUs subyacentes que tengas.

Lo anterior era un escenario de una sola vez. Ahora queremos iniciar un servidor de inferencia adecuado que pueda manejar múltiples peticiones y realizar inferencia por lotes sobre la marcha. En primer lugar, inicie el servidor:

python -m vllm.entrypoints.openai.api_server \
--model mistralai/Mixtral-8x7B-Instruct-v0.1
--tensor-parallel-size 8

Después de algún tiempo, una vez que el modelo esté correctamente cargado en la VRAM, puedes abrir una segunda ventana shell y hacer algunas peticiones:

curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
    "model": "mistralai/Mixtral-8x7B-Instruct-v0.1",
    "prompt": "What is batch inference?"
}'

Esto devolverá el mismo resultado que antes, pero esta vez puede realizar varias peticiones al mismo tiempo.

Conclusión

Aprovechar un servidor de inferencia avanzado como vLLM es beneficioso si se desea maximizar la utilización de la GPU y desplegar fácilmente el modelo en varias GPU en paralelo.

Como puedes ver, es bastante fácil desplegar los modelos de IA de código abierto más avanzados, como LLaMA 3, Mistral y Mixtral, en tu propio servidor gracias a esta técnica.

En este tutorial hemos utilizado AWS EC2 pero, por supuesto, podríamos haber utilizado otros proveedores. El principal reto será el coste de las GPU y también su disponibilidad.

Si no desea desplegar tales LLMs por sí mismo, le recomendamos que utilice nuestra NLP Cloud API en su lugar. Le ahorrará mucho tiempo y puede que incluso le resulte más barato que desplegar sus propios LLM. Si aún no lo has hecho, ¡pruébalo!

Vincent
Defensor del desarrollador en NLP Cloud