LoRAX: servidor de inferencia Multi-LoRA que escala a miles de LLM ajustados
LoRAX (LoRA eXchange) es un marco que permite a los usuarios ofrecer miles de modelos ajustados en una sola GPU, lo que reduce drásticamente el costo de servicio sin comprometer el rendimiento o la latencia.
Tabla de contenido
Características
Modelos
?Empezando
Requisitos
Inicie el servidor LoRAX
Solicitar a través de API REST
Solicitar a través del cliente Python
Chatea a través de la API OpenAI
Próximos pasos
Expresiones de gratitud
Hoja de ruta
Carga dinámica de adaptadores: incluya cualquier adaptador LoRA ajustado de HuggingFace, Predibase o cualquier sistema de archivos en su solicitud; se cargará justo a tiempo sin bloquear solicitudes simultáneas. Combine adaptadores por solicitud para crear conjuntos potentes al instante.
Lote continuo heterogéneo: agrupa solicitudes de diferentes adaptadores en el mismo lote, manteniendo la latencia y el rendimiento casi constantes con la cantidad de adaptadores simultáneos.
Programación de intercambio de adaptadores: capta y descarga de forma asincrónica adaptadores entre la memoria de la GPU y la CPU, programa el procesamiento por lotes de solicitudes para optimizar el rendimiento agregado del sistema.
Inferencia optimizada: optimizaciones de alto rendimiento y baja latencia que incluyen paralelismo tensorial, núcleos CUDA precompilados (atención flash, atención paginada, SGMV), cuantificación y transmisión de tokens.
Imágenes Docker prediseñadas listas para producción , gráficos Helm para Kubernetes, métricas de Prometheus y seguimiento distribuido con Open Telemetry. API compatible con OpenAI que admite conversaciones de chat de varios turnos. Adaptadores privados mediante aislamiento de inquilinos por solicitud. Salida estructurada (modo JSON).
? Gratis para uso comercial: Licencia Apache 2.0. ¿Ya hemos dicho suficiente?.
Servir un modelo ajustado con LoRAX consta de dos componentes:
Modelo base: modelo grande previamente entrenado compartido entre todos los adaptadores.
Adaptador: pesos de adaptador específicos de tareas cargados dinámicamente por solicitud.
LoRAX admite varios modelos de lenguajes grandes como modelo base, incluidos Llama (incluido CodeLlama), Mistral (incluido Zephyr) y Qwen. Consulte Arquitecturas admitidas para obtener una lista completa de los modelos base admitidos.
Los modelos base se pueden cargar en fp16 o cuantificar con bitsandbytes
, GPT-Q o AWQ.
Los adaptadores compatibles incluyen adaptadores LoRA entrenados con las bibliotecas PEFT y Ludwig. Cualquiera de las capas lineales del modelo se puede adaptar mediante LoRA y cargar en LoRAX.
Recomendamos comenzar con nuestra imagen de Docker prediseñada para evitar compilar kernels CUDA personalizados y otras dependencias.
Los requisitos mínimos del sistema necesarios para ejecutar LoRAX incluyen:
GPU Nvidia (generación de amperios o superior)
Controladores de dispositivos compatibles con CUDA 11.8 y superiores
Sistema operativo Linux
Docker (para esta guía)
Instale nvidia-container-toolkit y luego
sudo systemctl daemon-reload
sudo systemctl restart docker
modelo=mistralai/Mistral-7B-Instruct-v0.1 volumen=$PWD/datos ejecución de la ventana acoplable --gpus all --shm-size 1g -p 8080:80 -v $volumen:/data ghcr.io/predibase/lorax:main --model-id $modelo
Para obtener un tutorial completo que incluye la transmisión de tokens y el cliente Python, consulte Introducción: Docker.
LLM base inmediata:
curl 127.0.0.1:8080/generar -X PUBLICACIÓN -d '{ "inputs": "[INST] Natalia vendió clips a 48 de sus amigos en abril, y luego vendió la mitad de clips en mayo. ¿Cuántos clips vendió Natalia en total en abril y mayo? [/INST] ", "parámetros": { "max_new_tokens": 64 } }' -H 'Tipo de contenido: aplicación/json'
Solicite un adaptador LoRA:
curl 127.0.0.1:8080/generar -X PUBLICACIÓN -d '{ "inputs": "[INST] Natalia vendió clips a 48 de sus amigos en abril, y luego vendió la mitad de clips en mayo. ¿Cuántos clips vendió Natalia en total en abril y mayo? [/INST] ", "parámetros": { "max_new_tokens": 64, "adapter_id": "vineetsharma/qlora-adapter-Mistral-7B-Instruct-v0.1-gsm8k" } }' -H 'Tipo de contenido: aplicación/json'
Consulte Referencia: API REST para obtener detalles completos.
Instalar:
pip instala el cliente lorax
Correr:
from lorax import Clientclient = Client("http://127.0.0.1:8080")# Solicitar la base LLMprompt = "[INST] Natalia vendió clips a 48 de sus amigos en abril, y luego vendió la mitad de clips en mayo ¿Cuántos clips vendió Natalia en total en abril y mayo? [/INST]"print(client.generate(prompt, max_new_tokens=64).generated_text)# Solicitar un adaptador LoRAadapter_id = "vineetsharma/qlora-adapter-Mistral-7B-Instruct-v0.1-gsm8k"print(client.generate(prompt, max_new_tokens=64, adaptor_id=adapter_id).generated_text )
Consulte Referencia: Cliente Python para obtener detalles completos.
Para conocer otras formas de ejecutar LoRAX, consulte Introducción: Kubernetes, Introducción: SkyPilot y Introducción: Local.
LoRAX admite conversaciones de chat de varios turnos combinadas con la carga dinámica de adaptadores a través de una API compatible con OpenAI. Simplemente especifique cualquier adaptador como parámetro model
.
desde openai importar OpenAIclient = OpenAI(api_key="EMPTY",base_url="http://127.0.0.1:8080/v1", )resp = client.chat.completions.create(model="alignment-handbook/zephyr-7b-dpo-lora",messages=[ {"role": "system","content": "Eres un chatbot amigable que siempre responde al estilo de un pirata", }, {"role": "user", "content": "¿Cuántos helicópteros puede comerse un humano de una sola vez?"}, ],max_tokens=100, )print("Respuesta:", resp.opciones[0].message.content)
Consulte API compatible con OpenAI para obtener más detalles.
Aquí hay algunos otros modelos interesantes Mistral-7B afinados para probar:
alineación-handbook/zephyr-7b-dpo-lora: Mistral-7b ajustado en el conjunto de datos de Zephyr-7B con DPO.
IlyaGusev/saiga_mistral_7b_lora: chatbot ruso basado en Open-Orca/Mistral-7B-OpenOrca
.
Undi95/Mistral-7B-roleplay_alpaca-lora: Ajustado mediante indicaciones de juego de roles.
Puede encontrar más adaptadores LoRA aquí o intentar ajustar el suyo con PEFT o Ludwig.
LoRAX está construido sobre la inferencia de generación de texto de HuggingFace, bifurcada desde v0.9.4 (Apache 2.0).
También nos gustaría agradecer a Punica por su trabajo en el kernel SGMV, que se utiliza para acelerar la inferencia de múltiples adaptadores bajo carga pesada.
Nuestra hoja de ruta se rastrea aquí.