SGLang 0.5.21 adopta Rust y cambia el equilibrio entre precisión y velocidad
Índice de contenidos
Claves de la noticia
- SGLang 0.5.21 adopta Rust como núcleo predeterminado de su caché de prefijos, con excepciones documentadas que mantienen Python.
- La versión permite cambiar instancias entre procesamiento de entrada y generación sin reiniciar, previa activación y vaciado de las solicitudes en curso.
- Una opción de FlashInfer se desactiva por precisión numérica: sus pruebas muestran que la actualización no garantiza más velocidad en todas las cargas.
SGLang ha publicado este 2 de octubre la versión 0.5.21 de su motor para servir modelos de inteligencia artificial. El lanzamiento modifica cómo se reutiliza memoria, cómo se distribuye el trabajo y cómo se prioriza la precisión de ciertas operaciones. Para quienes mantienen un servicio de IA, la consecuencia es práctica: conservar el mismo modelo y los mismos servidores no garantiza conservar el comportamiento anterior.
Rust entra en la caché, Python conserva la memoria
Una caché de prefijos aprovecha cálculos ya realizados cuando varias solicitudes empiezan con los mismos tokens. El artículo técnico del proyecto, publicado el 23 de septiembre, explica por qué los modelos híbridos complican esa reutilización: la atención completa necesita datos de todo el prefijo, la atención de ventana deslizante requiere una franja continua y los componentes recurrentes necesitan un estado guardado en el punto adecuado.
Unified Radix Cache coordina esas necesidades en un árbol compartido. Rust se ocupa del recorrido del árbol, los bloqueos y la gestión de expulsiones; Python sigue asignando la memoria física y coordinando las operaciones. Por tanto, el cambio no convierte todo el servidor en una aplicación Rust ni elimina su dependencia de Python.
La separación también explica dónde buscar el beneficio: reducir trabajo del planificador en la CPU, no cambiar los pesos del modelo. Las mejoras de un prototipo publicadas en septiembre usaban conversaciones de 200 turnos y una caché limitada al primer nivel. Son antecedentes de la arquitectura, no una medición universal de la versión que acaba de distribuirse.
El valor predeterminado tiene excepciones
La propuesta integrada que activa Rust centraliza las comprobaciones de compatibilidad. Documenta retorno a Python para cachés con sesiones, plataformas distintas de Linux, versiones de PyTorch fuera del intervalo 2.11–2.13 y componentes personalizados o no admitidos. También contempla instalaciones sin extensión Rust ni sus fuentes y compilaciones desde código sin una herramienta Rust utilizable.
Al cruzar estas condiciones con el anuncio, se obtiene una conclusión operativa: dos instalaciones de SGLang 0.5.21 pueden ejecutar núcleos de caché diferentes sin que ninguna haya rechazado la actualización. Una que conserve caché asociada a sesiones puede seguir con Python. Comprobar únicamente el número de versión no acredita que el árbol esté funcionando con Rust.
La variable SGLANG_UNIFIED_RADIX_TREE_CORE_BACKEND=python permite solicitar Python explícitamente. No es una garantía de recuperación ante cualquier error: en configuraciones admitidas, el nuevo código puede hacer visibles fallos de compilación, importación o ejecución. Compatibilidad y tratamiento de errores son controles distintos.
Más precisión puede costar latencia
Otro cambio merece atención antes de comparar rendimiento. SGLang desactiva por defecto la finalización fusionada de FlashInfer para modelos de mezcla de expertos, con el objetivo declarado de mejorar la precisión numérica. El cambio afecta a los caminos que respetan esa opción; no describe todos los kernels ni todos los modelos.
La propuesta correspondiente aporta un ensayo sobre una GPU NVIDIA B300 con FlashInfer 0.6.18.post1. En CuTe W4A4 con escala por tensor, desactivar la opción aumenta la latencia un 21,75 % para un token y un 12,55 % para 16.384. En CuTe W4A16, el mismo extremo de 16.384 tokens reduce la latencia un 9,20 %. El signo de la diferencia cambia según la configuración.
El ensayo mide operaciones locales de expertos con paralelismo simulado, no el servicio completo ni la comunicación entre varias GPU. Tampoco mide la mejora de precisión. No permite afirmar que una aplicación vaya a sufrir esos porcentajes. Sí demuestra que desactivar una optimización tiene un coste dependiente de la carga. Recuperar la opción con SGLANG_FLASHINFER_MOE_FUSED_FINALIZE=1 exige evaluar ese compromiso.
Cambiar de función sin recargar el modelo
La alternancia entre prefill, que procesa la entrada, y decode, que genera la respuesta, permite redistribuir instancias sin derribar el servidor y volver a cargar sus pesos. La propuesta utiliza el mismo espacio de memoria de claves y valores para ambas funciones y reconstruye las estructuras específicas de cada papel.
La función está desactivada inicialmente y requiere --enable-pd-role-switch. Antes del cambio hay que dejar terminar el trabajo pendiente: una solicitud de generación puede depender de datos enviados por otra instancia. Por eso, «sin reiniciar» no equivale a una transformación instantánea con solicitudes activas. El backend de transferencia también debe admitir la operación.
Una migración que afecta a resultados y configuraciones
La retirada del árbol experimental C++ elimina otra posible ruta de caché. Su propuesta explica que ya no coincidía con la interfaz actual y carecía de cobertura real en la integración continua. También desaparece HiRadixCache: el proyecto documenta que HiCache utiliza UnifiedRadixCache desde 0.5.19. Los nombres heredados en código propio necesitan revisión.
Hay además una API de decisiones que devuelve probabilidades para opciones sin generar una respuesta textual. Su documentación advierte que esas cifras no son probabilidades calibradas de acertar. En sus comprobaciones, las probabilidades cambiaron hasta 0,07 entre solicitudes frías y solicitudes que reutilizaban el prefijo, aunque la opción elegida permaneció igual. Un umbral automático necesita validación con datos de la aplicación.
Para un equipo español que sirve sus propios modelos, la dependencia entre motor, bibliotecas y hardware ya resulta visible en los límites del despliegue de DeepSeek sobre Ascend. Esta actualización añade una distinción verificable: núcleo de caché, opción numérica y función de la instancia cambian por mecanismos diferentes. Una comparación útil debe registrar los tres; fijar solo versión y modelo deja sin controlar condiciones que pueden alterar latencia y resultados.




