View a markdown version of this page

Ejecute la inferencia de LLM por lotes con vLLM - Deadline Cloud

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Ejecute la inferencia de LLM por lotes con vLLM

En este tutorial se explica cómo ejecutar inferencias de modelos de lenguaje extensos (LLM) de alto rendimiento en un archivo JSONL de indicaciones utilizando el motor de inferencias vLLM activado. GitHub Envías el paquete de trabajos de inferencia por lotes de vLLM GitHub con un archivo en el que cada línea es un mensaje, eliges un modelo y el trabajo se distribuye en una flota de GPU. Cada solicitud recibe una respuesta de LLM y un paso agregado empaqueta todo en un archivo JSONL además de un visor HTML independiente que puedes abrir en cualquier navegador.

El paquete gestiona cargas de trabajo sin conexión y embarazosamente paralelas: generación de contenido, conjuntos de datos de evaluación, traducción, extracción y clasificación. Se adapta a cualquier lugar en el que necesites un modelo para responder a muchas solicitudes independientes sin un servidor de API activo. En esencia, utiliza la función de fragmentación de tareas de Deadline Cloud para agrupar las solicitudes en tareas por lotes, lo que permite establecer paralelismos con la sobrecarga de programación con un solo parámetro. ChunkSize Para obtener más información, consulte Fragmentación de tareas para plantillas de trabajo.

Cargar un B-parameter LLM de 7 años lleva 30 segundos o más, por lo que pagar ese coste por tarea dominaría el tiempo de ejecución por lotes. Los entornos abiertos por etapas de descripción del trabajo resuelven este problema: el servidor vLLM se inicia cuando un trabajador recoge el trabajo y permanece ocupado durante todas las tareas que ejecuta el trabajador, y luego se cierra con la sesión. Un lote de 24 puestos de trabajo en una flota de 4 trabajadores paga 4 cargas de modelo en lugar de 24.

Tiempo estimado: 30 a 60 minutos, incluida la configuración de la granja.

La ejecución de este tutorial implica gastos para las instancias de trabajo de la GPU que procesan el trabajo.

Descripción general de

Para completar este tutorial, sigue estos pasos:

  1. Configura tu granja.

  2. Prepara el archivo de entrada.

  3. Envíe el trabajo de inferencia por lotes.

  4. Descargue y vea los resultados.

  5. Eliminación de recursos.

Configura tu granja

La forma más rápida de obtener una granja compatible es implementar la CloudFormation plantilla de granja de CUDA en GitHub. Cuando llegue la pilaCREATE_COMPLETE, configure la CLI de Deadline Cloud para usar la nueva granja:

deadline config set defaults.farm_id FarmId-from-stack-outputs deadline config set defaults.queue_id CUDAQueueId-from-stack-outputs

Si ya tienes una granja, necesitas una flota gestionada por servicios con GPU NVIDIA y al menos 32 GB de RAM, y una cola con un entorno de colas integrado que lea los parámetros y los trabajos. CondaPackages CondaChannels

Prepara el archivo de entrada

La entrada es un archivo JSONL con un objeto JSON por línea. Cada línea debe tener un prompt campo:

{"prompt": "What is photosynthesis?", "id": "001"} {"prompt": "Write a haiku about clouds.", "id": "002"} {"prompt": "Explain gravity to a 5 year old.", "id": "003", "max_tokens": 256, "temperature": 0.9}

Los campos opcionales por solicitud incluyen los campos id para el seguimiento, max_tokens para limitar la longitud de la respuesta y temperature para controlar la aleatoriedad del muestreo. Per-promptlos campos anulan los valores predeterminados a nivel de trabajo únicamente para esa línea, y cualquier campo adicional pasa a la salida sin cambios.

El paquete incluye una herramienta HTML de dependencia cero para crear archivos de entrada. Ábrelo tools/prompt_builder.html en tu navegador para añadir mensajes, configurar opciones por mensaje y exportar como JSONL.

Envíe el trabajo de inferencia por lotes

Para enviarlo con el remitente de la GUI
  1. Desde el directorio del vllm_batch paquete, abre el remitente:

    deadline bundle gui-submit .
  2. Elige tu archivo JSONL de entrada.

  3. Establezca el rango de solicitudes (por ejemplo, 1-10 para las 10 primeras solicitudes del archivo).

  4. Establezca el tamaño del fragmento, que es el número de solicitudes que procesa cada tarea (predeterminado). 5

  5. Elige un directorio de salida y, a continuación, selecciona Enviar.

Si lo prefiere, envíelo con la CLI:

deadline bundle submit . \ --parameter InputFile=prompts.jsonl \ --parameter Prompts=1-10 \ --parameter ChunkSize=5 \ --parameter OutputDir=$PWD/results

El ModelName parámetro por defecto es Qwen/Qwen2.5-7B-Instruct y acepta cualquier ID de modelo de Hugging Face. El Prompts parámetro acepta la sintaxis completa del rango entero de la descripción del trabajo abierto, por ejemplo, para líneas específicas o 2,5,8-9 para volver 4,7 a ejecutar solo las líneas fallidas. En lugar de fijar el tamaño de los fragmentos, también puedes dejar que Deadline Cloud los ajuste automáticamente: establece TargetRuntimeSeconds el tiempo que quieres que dure cada fragmento (120 segundos por defecto) y el programador aumenta o reduce el tamaño del fragmento en las tareas futuras para alcanzar el objetivo. Para ver la lista completa de parámetros, consulta la tabla de parámetros del archivo README de ejemplo, publicado en. GitHub

Descargue y visualice los resultados

Para descargar y ver los resultados
  1. Una vez finalizado el trabajo, descarga el resultado:

    deadline job download-output --job-id job-id
  2. Todas las salidas llegan a una output/ subcarpeta dentro del directorio que seleccionó. Ábrelo results/output/results.html en tu navegador para ver el visor visual de resultados o lee results/output/output.jsonl para ver el resultado combinado sin procesar.

Cada línea de salida contiene la solicitud original y sus campos de transferencia, además de la generated_text respuesta, el motivo de finalización y el recuento de fichas:

{"prompt": "What is photosynthesis?", "id": "001", "generated_text": "Photosynthesis is...", "finish_reason": "stop", "prompt_tokens": 7, "completion_tokens": 42}

Encadena la salida para generar imágenes por lotes

El output.jsonl archivo es una entrada lista para usar para el paquete por lotes de texto a imágenes. Genere texto con este paquete (lemas, subtítulos, descripciones de escenas) y, a continuación, envíe el archivo resultante al paquete de generación de imágenes, que utiliza automáticamente cada línea generated_text como subtítulo compuesto sobre la imagen generada. Para ver el tutorial completo, consulte. Genere imágenes por lotes con un modelo de difusión

Limpieza

Para evitar cargos continuos, limpie los recursos que creó para este tutorial:

Para limpiar los recursos del tutorial
  1. Si implementó la CloudFormation plantilla de granja de CUDA, elimine la CloudFormation pila de la CloudFormation consola.

  2. Si usaste una granja existente y creaste una flota de GPU específicamente para este tutorial, detiene o elimina esa flota. Si usaste una flota compartida preexistente, déjala en su lugar.

  3. Elimine los archivos de salida locales si ya no los necesita.

Los siguientes recursos proporcionan información adicional: