Sobre el proyecto
Surogate es un kit de herramientas bajo licencia Apache 2.0 que combina el entrenamiento y el servicio de LLM en un solo proyecto, con motores nativos en C++/CUDA diseñados para GPUs NVIDIA. Está dirigido a Linux x86_64 con Python 3.12 y CUDA 13 (controlador 580+), y se distribuye como un wheel, un script de instalación y una imagen de contenedor.
Motor de entrenamiento
El lado de entrenamiento cubre preentrenamiento y ajuste fino completo, adaptadores LoRA y QLoRA, y recetas de precisión que incluyen BF16, FP8 híbrido y NVFP4 de Blackwell. Soporta aprendizaje por refuerzo GRPO con entornos de recompensa, entrenamiento de preferencias DPO y destilación de conocimiento desde distribuciones top-K del profesor. La ejecución multi-GPU y multi-nodo utiliza paralelismo de datos con hilos, fragmentación ZeRO, superposición de comunicación y Ray. El paralelismo de pipeline puede transmitir pesos congelados para LoRA a través de GPUs PCIe sin NVLink. El entrenamiento MoE incluye paralelismo de expertos y equilibrio de carga. Los controles de memoria incluyen descarga a CPU para pesos, gradientes, estado del optimizador, activaciones y cuantizaciones, además de recomputación y ejecución de MLP en mosaico. Los optimizadores incluyen AdamW de 8 bits y NorMuon, con registro en Weights & Biases, puntos de control y reanudación. Los modelos se definen mediante un DSL en Python con diferenciación automática anticipada.
Motor de servicio
El lado de servicio es un servidor HTTP nativo en C++/CUDA que expone endpoints de Chat Completions, Completions y Responses compatibles con OpenAI, además de Messages compatibles con Anthropic. Soporta streaming, contenido de razonamiento separado, controles de pensamiento y analizadores de llamadas a funciones específicos del modelo. Las características de concurrencia incluyen batching continuo, procesamiento de prompts fragmentados, gráficos CUDA, hasta 128 secuencias activas por modelo, caché de prefijos y decodificación especulativa mediante MTP o DFlash. Carga GGUF nativo (K-quants, Q8_0, formatos legacy e IQ), puntos de control safetensors de Hugging Face y exportaciones BF16/FP8/NVFP4. La caché KV es elástica y puede compartirse entre modelos. Los adaptadores LoRA en tiempo de ejecución pueden cargarse y seleccionarse por solicitud. Varios modelos nombrados pueden compartir una GPU con prioridades y comportamiento de suspensión/activación. Los modelos grandes pueden abarcar múltiples GPUs o descargar pesos a CPU, con caché de expertos en GPU para familias MoE. El soporte de visión e incrustaciones incluye imágenes/video para modelos de visión compatibles y EmbeddingGemma en GPU o CPU AVX-512. Las características operativas incluyen autenticación por clave API, comprobaciones de salud, métricas Prometheus, registros de solicitudes y estadísticas de caché.
Cobertura de modelos
Los ejemplos de entrenamiento cubren Qwen3 denso y MoE, Qwen3-VL, Qwen3.5/3.6 denso y MoE, Llama 3.1/3.2, MiniCPM5, Spark-X2.5, Gemma 4, Nemotron 3/Cascade 2, GPT-OSS, Laguna y LFM2/LFM2.5. El servicio cubre Qwen3, Qwen3.5/3.6/3.8, Qwen3.8 Flash-Next, GLM-5.3-Flash, Llama, Gemma 3/4, LFM2/LFM2.5, MiniCPM5, Spark-X2.5 y EmbeddingGemma 300M. El README señala que las definiciones de entrenamiento de DeepSeek-V4, Flash-Next y GLM-5.3-Flash aún tienen componentes pendientes.
Flujo de trabajo
Un flujo típico es: instalar, servir un modelo con `surogate serve`, entrenar un adaptador con una configuración YAML mediante `surogate sft`, fusionar el adaptador en su modelo base, opcionalmente cuantizar a GGUF y luego servir el resultado. Un modo GRPO de una sola GPU puede co-ubicar servicio y entrenamiento con pesos compartidos para familias LoRA BF16 compatibles.
Notas de hardware
Las compilaciones de entrenamiento apuntan a SM89+ (Ada, Hopper, Blackwell compatible). FP8 requiere SM89+; NVFP4 nativo requiere hardware Blackwell compatible. Las compilaciones de servicio predeterminadas apuntan a SM120a (serie RTX 50 y RTX PRO Blackwell), con un puerto SM89/Ada que compila pero tiene validación de tiempo de ejecución pendiente. El entrenamiento distribuido usa NCCL; la descarga a CPU requiere suficiente RAM del sistema.
El README presenta tablas de referencia que comparan el rendimiento de entrenamiento y servicio contra Unsloth, vLLM y llama.cpp en hardware y cargas de trabajo específicas; estas son mediciones propias del proyecto y deben tratarse como tales.
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.