Despliegue del servicio de inferencia Llama 3.1 405B: Guía para principiantes

Despliegue del servicio de inferencia Llama 3.1 405B: Guía para principiantes

Introducción

Este artículo utiliza la instancia de GPU 8 x H100 para mostrar cómo desplegar Llama3.1–405B. Desplegar modelos grandes por tu cuenta es una tarea que consume tiempo y es costosa. Para evitar este trabajo tedioso y caro, puedes considerar usar directamente Llama3.1–405B. Busca plataformas proveedoras de modelos excelentes dentro de la industria de IA y utilízalas a través del estándar de API de OpenAI para servicios de inferencia. Son fáciles de usar y su modelo de pago por uso es rentable y manejable. Recomendamos el servicio de API de inferencia Llama3.1–405B proporcionado por Novita AI.

Requisitos de despliegue de Llama3.1–405B

Todos los modelos Llama3.1 lanzados por Meta incluyen 8B, 70B y 405B. El modelo Llama3.1–405B es el modelo de lenguaje grande de código abierto más grande hasta la fecha, con parámetros que alcanzan los 405 mil millones. Los resultados de evaluación de rendimiento del modelo superan a GPT-4 y GPT-4o y están a la par con Claude3.5-Sonnet.

Es difícil cargar un modelo tan grande en una GPU. La versión original FP16 del modelo 405B requiere 810 GB de memoria de GPU, como se muestra en la imagen a continuación. Sin embargo, tomando como ejemplo la GPU H100 más potente disponible actualmente, el servidor de 8 sockets no puede cargar directamente esta versión del modelo. Es necesario cuantizar la versión FP16 del modelo y convertirla a una representación de baja precisión, reduciendo así los requisitos de memoria y cargándola exitosamente en la GPU.

Los modelos Llama3.1 tienen una arquitectura similar a los modelos Llama3, lo que facilita la adaptación del framework de inferencia. Soluciones de inferencia de código abierto como vLLM pueden adaptarse rápidamente para soportar el gran Llama3.1–405B.

Para desplegar un servicio de inferencia para Llama3.1–405B, las tres preparaciones clave son:

  • Hardware: Recomendamos alquilar la instancia de servidor GPU 8 x H100 y reservar alrededor de 1.5 TB de espacio de almacenamiento.
  • Modelo: Prepara una cuenta de Hugging Face y descarga el Llama3.1–405B original o las versiones cuantizadas 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 un servidor GPU de 8 sockets H100, inicia sesión en el servidor y descarga el modelo. Explicamos cómo descargar la versión FP16 del modelo y convertirla a versiones cuantizadas FP8 e INT4 (por supuesto, también puedes descargar los modelos pre-cuantizados desde Hugging Face).

Recomendamos descargar la versión Instruct desde la plataforma Hugging Face. Primero, regístrate e inicia sesión en Hugging Face. Crea y guarda el Access Token del usuario actual en la página de Configuración, que se usará al descargar el modelo.

Abre la página del modelo Llama3.1–405B: https://huggingface.co/meta-llama/Meta-Llama-3.1-405B-Instruct, envía una solicitud de modelo a Meta y espera aproximadamente media hora para la autorización.

De vuelta en el servidor GPU, instala la aplicación cliente de Hugging Face y comienza a descargar el modelo. El comando es el siguiente:

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 405B

Después de una larga espera (dependiendo de la conexión a internet), el modelo 405B de 800 GB se descargará en la máquina local. Ejecuta “huggingface-cli scan-cache” para ver la información detallada del modelo.

A continuación, realizaremos la cuantización FP8 e INT4 en el modelo original.

Primero, descarga la herramienta de cuantización FP8. Puedes usar AutoFP8 de código abierto: https://github.com/neuralmagic/AutoFP8. Ejecuta los scripts incluidos para cuantizar en modo dinámico. Hazlo 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 la versión cuantizada del modelo usando “–save-dir”. Como se trata de una cuantización solo de pesos, la velocidad general es rápida.

También puedes descargar la versión cuantizada FP8 proporcionada 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

Al igual que con la cuantización FP8, puedes usar la herramienta AutoAWQ de código abierto para realizar la cuantización INT4. La dirección de este método de cuantización es https://github.com/casper-hansen/AutoAWQ. Los pasos de cuantización son los siguientes:

Construcción del framework de inferencia

Aprovechando la potente comunidad de código abierto, vLLM es un framework de inferencia eficiente que proporciona soporte para varios LLM con actualizaciones oportunas. Desde v0.5.3.post1, vLLM admite el servicio de inferencia para los modelos Llama 3.1.

Los pasos para descargar el código fuente de vLLM y compilarlo son los siguientes:

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 la compilación, puedes iniciar el servicio de inferencia.

Además de compilar vLLM en la máquina local, puedes construir vLLM como una imagen Docker. El método es el siguiente:

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 la imagen de vLLM:

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

Ejecución del servicio de inferencia

Después de construir el framework de inferencia vLLM, puedes iniciar vLLM y cargar el modelo Llama 3.1–405B para realizar el servicio de inferencia. Para la compilación local del framework de inferencia vLLM, 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 deseas ejecutar el servicio de inferencia mediante un contenedor Docker, puedes usar el siguiente comando:

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 esté en ejecución, escuchará en el puerto 18001 mientras recibe y procesa las solicitudes de los usuarios. Puedes verificar rápidamente el servicio de inferencia enviando una solicitud POST al endpoint de completions desde tu terminal local. El comando es el siguiente:

curl -X POST -H “Content-Type: application/json”
http://localhost:18001/v1/completions
-d ‘{“model”: “llama31-405b-fp8”, “prompt”: “San Francisco is a”}’

Con esto, el despliegue del modelo Llama 3.1 está completo.

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