Cómo implementar Llama 3.1 405B con Novita AI

Cómo implementar Llama 3.1 405B con Novita AI

El lanzamiento de Llama3.1 ha captado de inmediato la atención mundial, marcando la primera vez que un modelo de código abierto se ha acercado e incluso superado a los modelos propietarios en ciertas métricas. Este artículo presenta el método y los pasos para implementar el modelo Llama3.1-405B desde cero utilizando una instancia de GPU de Novita AI. Cabe destacar que implementar un modelo grande desde cero es una tarea que consume mucho tiempo y esfuerzo. Si deseas evitar este trabajo tedioso y utilizar directamente el modelo Llama3.1-405B, puedes buscar una excelente plataforma de alojamiento de modelos en la industria para llamar al servicio de inferencia en forma de API de OpenAI. No solo es fácil de usar, sino que también es muy amigable en términos de costo, con un costo total muy bajo y controlable. Actualmente, Novita AI ha lanzado un servicio de API para Llama3.1, y puedes experimentarlo directamente en el Playground: https://novita.ai/model-api/llm-api/playground

Requisitos básicos para la implementación de Llama3.1-405B

La serie de modelos Llama3.1 de código abierto publicada por Meta incluye tres tamaños: 8B, 70B y 405B, de los cuales el modelo 405B es el modelo de lenguaje grande de código abierto más grande hasta la fecha, con una escala de parámetros de 40.5 mil millones. El rendimiento del modelo en múltiples resultados de evaluación ha superado a los modelos GPT-4 y GPT-4o, y es comparable a Claude3.5-Sonnet. Es un desafío cargar un modelo tan grande en la GPU. La versión original FP16 del modelo 405B requiere 810 GB de memoria de GPU, como se muestra en la siguiente figura. Sin embargo, incluso con la GPU H100 de mayor especificación disponible en el mercado, un servidor con la configuración máxima de 8 tarjetas no puede cargar directamente esta versión del modelo. Es necesario cuantizar la versión FP16 del modelo en una representación de menor precisión, reduciendo así los requisitos de memoria y logrando cargarlo con éxito en la GPU.

La arquitectura del modelo de la serie Llama3.1 hereda de Llama3, y la estructura es muy similar, lo que resulta muy amigable para el framework de inferencia. Soluciones de inferencia de código abierto como vLLM pueden completar rápidamente la adaptación y soportar la inferencia de modelos grandes como Llama3.1-405B. En resumen, para completar la implementación del servicio de inferencia de Llama3.1-405B, debemos prepararnos desde tres aspectos:

  • Hardware: Se recomienda elegir una instancia de servidor GPU configurada con 8 GPUs H100 y reservar aproximadamente 1.5 TB de espacio de almacenamiento. Puedes seleccionar la instancia a través de la consola de Novita AI y proporcionar capacidad de almacenamiento montando un volumen de red.

  • Modelo: Prepara una cuenta de Huggingface, descarga el modelo original Llama3.1-405B, o también puedes descargar la versión FP8 o INT4 del modelo.
  • Framework de inferencia: Descarga la última versión de vLLM v0.5.3.post1.

Preparación del modelo

Después de preparar el servidor GPU con 8 tarjetas H100, inicia sesión en el servidor y comienza a descargar el modelo. Aquí se introduce el método de descargar la versión FP16 del modelo y convertirla manualmente en versiones cuantizadas FP8 e INT4 (por supuesto, también puedes descargar directamente el modelo cuantizado en la plataforma Huggingface). Se recomienda descargar la versión Instruct desde la plataforma Huggingface. Primero, regístrate e inicia sesión en la plataforma Huggingface, y crea y guarda el Access Token del usuario actual en la página de configuración, que se utilizará al descargar el modelo. Abre la página principal del modelo Llama3.1-405B: https://huggingface.co/meta-llama/Meta-Llama-3.1-405B-Instruct, envía la solicitud del modelo a Meta y espera aproximadamente media hora para la autorización. De vuelta en el servidor GPU, instala el programa cliente de Huggingface y comienza a descargar el modelo con los siguientes comandos:

pip install huggingface-hub
huggingface-cli login  ## Ingresa el Access Token
huggingface-cli download meta-llama/Meta-Llama-3.1-405B-Instruct  ## Comienza a descargar el modelo grande 405B

Después de una larga espera (dependiendo de la velocidad actual de la red), el modelo grande 405B de 800 GB se descarga correctamente en el área local, y se puede ver la información específica del modelo llamando a “huggingface-cli scan-cache”. A continuación, realiza la cuantización FP8 e INT4 en el modelo original. Primero, descarga la herramienta de cuantización FP8, puedes usar directamente el código abierto AutoFP8: https://github.com/neuralmagic/AutoFP8, y usar el script que contiene para la cuantización manual, con el modo de cuantización dinámico, de la siguiente manera:

git clone https://github.com/neuralmagic/AutoFP8.git
cd AutoFP8
pip install -e .  ## Compila e instala la herramienta AutoFP8 localmente
python3 examples/quantize.py --model-id meta-llama/Meta-Llama-3.1-405B-Instruct --save-dir Meta-Llama-3-8B-Instruct-fp8 --activation-scheme dynamic --max-seq-len 2048 --num-samples 2048

El script de cuantización especifica la ruta de salida para el modelo cuantizado usando “–save-dir”. Dado que es solo cuantización de pesos, la velocidad general es muy rápida. También puedes descargar directamente la versión FP8 cuantizada por Meta: https://huggingface.co/meta-llama/Meta-Llama-3.1-405B-Instruct-FP8. El comando de descarga es el siguiente:

huggingface-cli download meta-llama/Meta-Llama-3.1-405B-Instruct-FP8

De manera similar a la cuantización FP8, puedes usar AutoAWQ de código abierto para la cuantización de la versión INT4. La dirección de esta solución de cuantización es: https://github.com/casper-hansen/AutoAWQ. El método de cuantización es el siguiente:

git clone https://github.com/casper-hansen/AutoAWQ.git
cd AutoAWQ
pip install -e .   ## Compila e instala la herramienta AutoAWQ localmente
## Modifica manualmente examples/quantize.py
    model_path = 'meta-llama/Meta-Llama-3.1-405B-Instruct'
    quant_path = 'meta-llama/Meta-Llama-3.1-405B-Instruct-awq'
    
# Comienza la cuantización
python examples/quantize.py

Construcción del framework de inferencia

Gracias al fuerte apoyo de la comunidad de código abierto, vLLM es reconocido como un framework de inferencia eficiente de grado industrial, y es muy rico en soporte para modelos grandes, con actualizaciones muy oportunas. A partir de v0.5.3.post1, vLLM soporta el servicio de inferencia de la serie de modelos Llama3.1. El método para descargar el código fuente de vLLM y compilarlo es el siguiente:

git clone https://github.com/vllm-project/vllm
cd vllm
git checkout -b v0.5.3.post1 v0.5.3.post1
pip install -e .

Después de una compilación exitosa, puedes iniciar el servicio de inferencia. Además de compilar vLLM localmente, también puedes compilar vLLM en una imagen Docker, de la siguiente manera:

git clone https://github.com/vllm-project/vllm
cd vllm
git checkout -b v0.5.3.post1 v0.5.3.post1
docker build -t vllm_0.5.3.p1 .

También puedes descargar directamente la imagen oficial de vLLM:

docker pull vllm/vllm-openai:v0.5.3.post1

Ejecución del servicio de inferencia

Después de completar la construcción del framework de inferencia vLLM, puedes iniciar vLLM y cargar el modelo Llama3.1-405B para iniciar el servicio de inferencia. Para el framework de inferencia vLLM compilado localmente, debes cambiar al directorio raíz del código fuente de vLLM y luego ejecutar el siguiente comando para iniciar el servicio de inferencia:

cd vllm
python3 -m vllm.entrypoints.openai.api_server --port 18001 --model meta-llama/Meta-Llama-3.1-405B-Instruct-FP8 --tensor-parallel-size 8 --pipeline-parallel-size 1 --swap-space 16 --gpu-memory-utilization 0.99 --dtype auto --served-model-name llama31-405b-fp8 --max-num-seqs 32 --max-model-len 32768 --max-num-batched-tokens 32768 --max-seq-len-to-capture 32768

Si ejecutas el servicio de inferencia en un contenedor Docker, puedes consultar el siguiente comando para ejecutarlo:

docker run -d --gpus all --privileged --ipc=host --net=host vllm/vllm-openai:v0.5.3.post1 --port 18001 --model meta-llama/Meta-Llama-3.1-405B-Instruct-FP8 --tensor-parallel-size 8 --pipeline-parallel-size 1 --swap-space 16 --gpu-memory-utilization 0.99 --dtype auto --served-model-name llama31-405b-fp8 --max-num-seqs 32 --max-model-len 32768 --max-num-batched-tokens 32768 --max-seq-len-to-capture 32768

Una vez que el framework de inferencia vLLM se ejecute correctamente, escuchará en.

Novita AI es la plataforma integral en la nube que impulsa tus ambiciones de IA. API integradas, serverless, instancias de GPU: las herramientas rentables que necesitas. Elimina la infraestructura, comienza gratis y haz realidad tu visión de IA.

Lecturas recomendadas:

  1. De Docker a Kubernetes
  2. Desmitificando la programación de Kubernetes: un análisis profundo de Predicados y Prioridades