Skip to content
Search
See the whole radar
Hugging Face Transformers 5.19Covered by Sage

Transformers 5.19: adiós a "paged" y MoE con logits reales

La versión consolida continuous batching bajo la attention normal, cambia qué devuelven los modelos MoE y suma embeddings multimodales con EmbeddingGemma 2. Trae varios breaking changes que conviene revisar antes de actualizar en producción.

EmbeddingGemma 2: embeddings multimodales

EmbeddingGemma 2 es un modelo de embeddings de Google construido sobre la arquitectura Gemma 4. Codifica texto, imágenes, audio y video, por separado o combinados en un mismo input, en un espacio vectorial compartido de 768 dimensiones, pensado para retrieval cross-modal, similitud semántica, clustering y clasificación. Usa Matryoshka Representation Learning, lo que te permite truncar los embeddings a 512, 256 o 128 dimensiones sin recalcularlos desde cero, según cuánto espacio o velocidad necesites. También podés configurar el presupuesto de tokens visuales y de video, y deshabilitar las torres de visión o audio al cargar el modelo si no las vas a usar, para ahorrar memoria. Las notas no incluyen ejemplos de código para este modelo.

MoE: los router logits ahora se devuelven siempre

Este es un breaking change: todos los modelos MoE cuyos routers calculan logits ahora los devuelven cuando pasás output_router_logits=True, siguiendo el patrón que ya usaba Qwen3-MoE. Eso significa un recorder de router_logits en el modelo base, una salida MoeModelOutputWithPast desde el backbone, y una salida causal LM específica de MoE desde la cabeza. Antes, el comportamiento era inconsistente entre arquitecturas: algunos modelos simplemente no exponían estos logits aunque se los pidieras. Si tu código depende de la ausencia de ese campo, o leía los router logits de otra forma, tenés que adaptarlo a estas clases de salida.

OWLv2: cambia cómo se elige la query de imagen

embed_image_query de Owlv2ForObjectDetection ahora selecciona la caja con mayor objectness score, tal como hace el notebook original de OWLv2, en lugar de la heurística heredada de OWL-ViT. Es otro breaking change: los embeddings de query guiados por imagen y las detecciones resultantes pueden diferir de lo que obtenías en versiones anteriores, aunque el código que llamás no cambie.

Continuous batching deja atrás el prefijo "paged"

Hasta ahora, usar continuous batching con SDPA o flash attention requería pedir explícitamente las variantes paged|sdpa o paged|flash_attention_2 como implementación de atención. Esa separación existía porque el soporte de CB estaba implementado aparte de las funciones de atención normales. En 5.19 ese prefijo queda deprecado: flash_attention.py y sdpa_attention.py soportan continuous batching directamente, así que simplemente configurás sdpa o flash_attention_2 como siempre y el CB funciona igual. La excepción es eager, que todavía necesita el prefijo paged|eager. Además, el update de cache para los paths basados en índice y en tabla de bloques ahora se fusiona en una sola llamada, lo que cambia ligeramente el comportamiento de esa función y afecta a cualquier código custom que llamaba los paths por separado. Son los pasos previos documentados antes de remover "paged" del todo.

Expert parallelism con dispatch de tokens

Se agrega una implementación de dispatch de tokens para expert parallelism, que se activa con la nueva regla de plan ep_dispatch_experts y que ya viene por defecto en Qwen3 MoE y Mellum. El cambio relevante es que elimina la restricción de que el tamaño de EP tenga que ser igual al de TP, algo que antes limitaba cómo podías combinar ambas formas de paralelismo en un mismo despliegue. El Trainer también fue adaptado para funcionar con expert parallelism, y la documentación ahora aclara que los adaptadores PEFT soportan tensor parallelism.

Cache: configuración por capa y fix en cache cuantizado

Se corrige un bug donde generate mutaba el cache_config que vos le pasabas, lo que podía dejarte con un config distinto al que definiste después de una llamada. También se repara QuantizedLayer.reorder_cache. El cambio más grande es que DynamicCache y StaticCache ahora inicializan cada capa desde su propia configuración, incluyendo sliding window, tamaño de chunk de atención, estados de convolución y cantidad de cabezas de atención. Esto importa para modelos heterogéneos, donde no todas las capas comparten los mismos parámetros de atención o memoria, algo que antes el cache no podía representar bien al tratar la configuración como global. Por separado, se eliminó el ciclo de deprecación sobre mask y cache.

Otros fixes que pueden afectarte

Los pipelines deprecados ahora redirigen en vez de fallar, y los que fueron removidos lanzan un error explícito en lugar de comportarse de forma ambigua. Se corrigió que DataCollatorForLanguageModeling ignoraba seed=0, un bug sutil si dependías de reproducibilidad exacta. GPT-OSS ahora lee el alpha y el límite del SwiGLU clampeado directamente desde el config en vez de un valor fijo. También se arregló el chunked prefill con position ids multi-eje en Qwen3-VL, y el cálculo de RoPE ahora usa multiplicación en lugar de matmul. Si trabajás con generación con penalización de repetición o con exponential decay length penalty, también hay fixes puntuales sobre cómo se preservan los scores de EOS enmascarados y cómo se cuenta la penalización tras la expansión de batch.

What you get

  • Si usás output_router_logits=True en modelos MoE, revisá tu código: ahora siempre recibís router_logits a través de las nuevas clases de salida.

  • Owlv2ForObjectDetection cambia su heurística de selección de query, así que tus resultados de detección guiada por imagen pueden variar.

  • Si usás continuous batching, dejá de usar el prefijo paged| para sdpa y flash attention; configurá la implementación normal como siempre, salvo que uses eager.

  • Expert parallelism ya no exige que EP y TP tengan el mismo tamaño, lo que da más flexibilidad para combinarlos en modelos MoE grandes.

  • El cache por capa resuelve un problema real para modelos heterogéneos, donde antes DynamicCache y StaticCache no podían representar configuraciones distintas por capa.

We wrote this summary from the official release notes. What wasn't there isn't here.

Original announcement from Hugging Face Transformers

Want a class on this?

If enough people ask for it, it goes on the schedule. No email, no name needed.