El uso de grandes modelos de lenguaje (LLM) y la IA generativa se ha disparado durante el último año. Con el lanzamiento de potentes modelos básicos disponibles públicamente, las herramientas para capacitar, ajustar y alojar su propio LLM también se han democratizado. Usando vllm en AWS trenio y inferencia hace posible alojar LLM para lograr inferencia y escalabilidad de alto rendimiento.
En esta publicación, le explicaremos cómo puede implementar rápidamente Los últimos modelos de Llama de Metausando vLLM en un Instancia Inf2 de Amazon Elastic Compute Cloud (Amazon EC2). Para este ejemplo, usaremos la versión 1B, pero se pueden implementar otros tamaños siguiendo estos pasos, junto con otros LLM populares.
Implemente vLLM en instancias AWS Trainium e Inferentia EC2
En estas secciones, se le guiará a través del uso de vLLM en una instancia AWS Inferentia EC2 para implementar el modelo Llama 3.2 más nuevo de Meta. Aprenderá cómo solicitar acceso al modelo, crear un contenedor Docker para usar vLLM para implementar el modelo y cómo ejecutar inferencias en línea y fuera de línea en el modelo. También hablaremos sobre el ajuste del rendimiento del gráfico de inferencia.
Requisito previo: cuenta de Hugging Face y acceso a modelo
Para usar el meta-llama/Llama-3.2-1B modelo, necesitarás una cuenta de Hugging Face y acceso al modelo. Por favor ve al tarjeta modeloregístrese y acepte la licencia del modelo. Luego necesitarás una ficha de Hugging Face, que puedes obtener siguiendo estos pasos. Cuando llegues al Guarde su token de acceso pantalla, como se muestra en la siguiente figura, asegúrese de copiar el token porque no se volverá a mostrar.
Crear una instancia EC2
Puede crear una instancia EC2 siguiendo las instrucciones guía. Algunas cosas a tener en cuenta:
- Si es la primera vez que utiliza instancias inf/trn, deberá solicitar un aumento de cuota.
- usarás
inf2.xlargecomo su tipo de instancia.inf2.xlargeLas instancias solo están disponibles en estas regiones de AWS. - Aumente el volumen del gp3 a 100 G.
- usarás
Deep Learning AMI Neuron (Ubuntu 22.04)como su AMI, como se muestra en la siguiente figura.
Una vez lanzada la instancia, puede conéctate a él para acceder a la línea de comando. En el siguiente paso, utilizará Docker (preinstalado en esta AMI) para ejecutar una Imagen de contenedor vLLM para neurona.
Iniciar el servidor vLLM
Utilizará Docker para crear un contenedor con todas las herramientas necesarias para ejecutar vLLM. Cree un Dockerfile usando el siguiente comando:
Luego ejecuta:
Construir la imagen tardará unos 10 minutos. Una vez hecho esto, use la nueva imagen de Docker (reemplace YOUR_TOKEN_HERE con la ficha de Hugging Face):
Ahora puede iniciar el servidor vLLM con el siguiente comando:
Este comando ejecuta vLLM con los siguientes parámetros:
serve meta-llama/Llama-3.2-1B: La cara que abrazamodelIDdel modelo que se está implementando para la inferencia.--device neuron: Configura vLLM para ejecutarse en el dispositivo neuronal.--tensor-parallel-size 2: establece el número de particiones para el paralelismo tensorial. inf2.xlarge tiene 1 dispositivo neuronal y cada dispositivo neuronal tiene 2 núcleos neuronales.--max-model-len 4096: Se establece en la longitud máxima de secuencia (tokens de entrada más tokens de salida) para compilar el modelo.--block-size 8: Para dispositivos neuronales, esto se configura internamente en max-model-len.--max-num-seqs 32: Esto se establece en el tamaño del lote de hardware o en un nivel deseado de simultaneidad que el servidor modelo necesita manejar.
La primera vez que carga un modelo, si no hay un modelo previamente compilado, será necesario compilarlo. Este modelo compilado se puede guardar opcionalmente, por lo que el paso de compilación no es necesario si se vuelve a crear el contenedor. Una vez hecho todo y el servidor modelo esté ejecutándose, debería ver los siguientes registros:
Esto significa que el servidor modelo se está ejecutando, pero aún no está procesando solicitudes porque no se ha recibido ninguna. Ahora puede separarse del contenedor presionando ctrl + p y ctrl + q.
Inferencia
Cuando inició el contenedor Docker, lo ejecutó con el comando -p 8000:8000. Esto le indicó a Docker que reenviara el puerto 8000 desde el contenedor al puerto 8000 de su máquina local. Cuando ejecuta el siguiente comando, debería ver que el servidor modelo con meta-llama/Llama-3.2-1B está corriendo.
Esto debería devolver algo como:
Ahora, envíale un mensaje:
Debería recibir una respuesta similar a la siguiente de vLLM:
Inferencia fuera de línea con vLLM
Otra forma de utilizar vLLM en Inferentia es enviando algunas solicitudes al mismo tiempo en un script. Esto es útil para la automatización o cuando tiene un lote de mensajes que desea enviar todos al mismo tiempo.
Puede volver a conectarse a su contenedor Docker y detener el servidor de inferencia en línea con lo siguiente:
En este punto, debería ver un cursor en blanco, presione ctrl + c para detener el servidor y debería volver al indicador de bash en el contenedor. Cree un archivo para usar el motor de inferencia sin conexión:
Ahora, ejecuta el script. python offline_inference.py y debería recibir respuestas a las cuatro indicaciones. Esto puede tardar un minuto ya que es necesario reiniciar el modelo.
Ahora puedes escribir exit y presione regresar y luego presione ctrl + c para cerrar el contenedor Docker y volver a su instancia inf2.
Limpiar
Ahora que ha terminado de probar Llama 3.2 1B LLM, debe terminar su instancia EC2 para evitar cargos adicionales.
Ajuste de rendimiento para longitudes de secuencia variables
Probablemente tendrá que procesar secuencias de longitud variable durante la inferencia LLM. El SDK de Neuron genera depósitos y un gráfico de cálculo que funciona con la forma y el tamaño de los depósitos. Para ajustar el rendimiento en función de la longitud de los tokens de entrada y salida en las solicitudes de inferencia, puede configurar dos tipos de depósitos correspondientes a las dos fases de la inferencia LLM a través de las siguientes variables de entorno como una lista de números enteros:
NEURON_CONTEXT_LENGTH_BUCKETSCorresponde a la fase de codificación del contexto. Establezca esto en la duración estimada de las indicaciones durante la inferencia.NEURON_TOKEN_GEN_BUCKETSCorresponde a la fase de generación de tokens. Establezca esto en un rango de potencias de dos dentro de la duración de su generación.
Puede usar el comando de ejecución de Docker para configurar las variables de entorno al iniciar el servidor vLLM (recuerde reemplazar YOUR_TOKEN_HERE con tu ficha de Cara Abrazada):
Luego puede iniciar el servidor usando el mismo comando:
vllm serve meta-llama/Llama-3.2-1B --device neuron --tensor-parallel-size 2 --block-size 8 --max-model-len 4096 --max-num-seqs 32
Como el gráfico del modelo ha cambiado, será necesario volver a compilar el modelo. Si se canceló el contenedor, el modelo se descargará nuevamente. Luego puede enviar una solicitud separándose del contenedor presionando ctrl + p y ctrl + q y usando el mismo comando:
curl localhost:8000/v1/completions \-H "Content-Type: application/json" \-d '{"model": "meta-llama/Llama-3.2-1B", "prompt": "What is Gen AI?", "temperature":0, "max_tokens": 128}' | jq '.choices[0].text'
Para obtener más información sobre cómo configurar los depósitos, consulte la guía para desarrolladores sobre el agrupamiento. Nota, NEURON_CONTEXT_LENGTH_BUCKETS corresponde a context_length_estimate en la documentación y NEURON_TOKEN_GEN_BUCKETS corresponde a n_positions en la documentación.
Conclusión
Acabas de ver cómo implementar meta-llama/Llama-3.2-1B utilizando vLLM en una instancia Amazon EC2 Inf2. Si está interesado en implementar otros LLM populares de Hugging Face, puede reemplazar el modelID en el vLLM serve dominio. Se pueden encontrar más detalles sobre la integración entre Neuron SDK y vLLM en Guía del usuario de Neuron para procesamiento por lotes continuo y el Guía vLLM para Neuron.
Una vez que haya identificado un modelo que desea utilizar en producción, querrá implementarlo con escalado automático, observabilidad y tolerancia a fallas. También puedes consultar esto. publicación de blog comprender cómo implementar vLLM en Inferentia a través de Servicio Amazon Elastic Kubernetes (Amazon EKS). En la próxima publicación de esta serie, analizaremos el uso de Amazon EKS con Ray Serve para implementar vLLM en producción con escalado automático y observabilidad.
Sobre los autores
Omri Shiva es un ingeniero de aprendizaje automático de código abierto que se centra en ayudar a los clientes en su viaje de IA/ML. En su tiempo libre, le gusta cocinar, jugar con código abierto y hardware abierto, y escuchar y tocar música.
Panigrahi rosa trabaja con clientes para crear soluciones basadas en ML para resolver problemas comerciales estratégicos en AWS. En su puesto actual, trabaja en la optimización del entrenamiento y la inferencia de modelos de IA generativa en chips de IA de AWS.