Construir con IA

Burn 0.22 elimina los genéricos de backend para acelerar las compilaciones de ML en Rust

Burn 0.22 elimina los parámetros de tipo de backend de las APIs de usuario, reduciendo los tiempos de reconstrucción hasta 15 veces y añadiendo soporte para LoRA.

Mecanismo de engranajes de Rust interconectado con placas de circuito iluminadas
Ilustración generada para este artículo

Traducido automáticamente del original en inglés.

El framework de aprendizaje automático Burn para Rust ha lanzado la versión 0.22, una actualización significativa que simplifica el código de aplicación y reduce drásticamente los tiempos de compilación. Lanzada en octubre de 2026, esta versión elimina los tipos genéricos de backend de la API orientada al usuario, permitiendo a los desarrolladores seleccionar dispositivos de ejecución en tiempo de ejecución en lugar de en tiempo de compilación. La actualización también introduce soporte nativo para el ajuste fino con LoRA y QLoRA, una mejor gestión de memoria y procesos de construcción más rápidos para modelos complejos.

Qué ocurrió

Las versiones anteriores de Burn requerían que los desarrolladores propagaran los parámetros de tipo de backend, como B: Backend, a lo largo de toda la pila de su aplicación. Este enfoque ofrecía flexibilidad pero creaba una cadena de dependencias pesada que ralentizaba la compilación cada vez que cambiaban las estructuras del modelo. Con la versión 0.22, estos genéricos de backend se eliminan del código de usuario. En su lugar, el contexto de ejecución se selecciona mediante la inicialización del dispositivo, por ejemplo, Device::cuda(0) o Device::wgpu(). Este cambio desacopla las operaciones de tensor de alto nivel de las implementaciones específicas de backend, agilizando el flujo de trabajo de desarrollo.

El impacto en los tiempos de compilación es sustancial. En los benchmarks proporcionados por el equipo de desarrollo, eliminar una capa oculta de una pequeña red neuronal convolucional redujo los tiempos medianos de reconstrucción en modo release de 28,42 segundos a 4,57 segundos. Para un modelo transformer con un bucle de entrenamiento personalizado, alternar expresiones equivalentes de feedforward vio cómo los tiempos de reconstrucción caían de 14,73 segundos a solo 1,00 segundo. Estas mejoras provienen de romper la cadena de dependencias que previamente forzaba la recompilación de grandes porciones de la base de código ante ediciones menores del modelo.

Más allá de los cambios en la API, el lanzamiento se centra en el rendimiento en tiempo de ejecución y la experiencia del desarrollador. Introduce pools de memoria adaptativos que ajustan los tamaños de asignación basándose en estadísticas de carga de trabajo, reduciendo el uso pico de VRAM casi a la mitad en algunos benchmarks de CNN. La actualización también añade soporte para el ajuste fino de modelos existentes usando LoRA y QLoRA, permitiendo la adaptación eficiente de modelos grandes sin modificar sus capas base. Además, el framework ahora soporta la exportación de modelos a ONNX e integra capacidades de cómputo remoto mediante el protocolo de transporte Iroh.

Cómo funciona

El cambio arquitectónico central implica una nueva ruta de ejecución: Tensor → Bridge → Dispatch → Backend. La capa bridge oculta las representaciones concretas de backend de la API de tensores de alto nivel, borrando efectivamente los tipos que previamente ataban el código de aplicación a backends específicos. Esta borradura de tipos permite que el sistema de dispatch enrute las operaciones al backend apropiado en tiempo de ejecución. Aunque el trait Backend sigue siendo central para implementar operaciones personalizadas, el código de aplicación ya no necesita llevar restricciones genéricas. Los contextos de autodiff ahora se configuran en el dispositivo y son heredados por los tensores, moviendo las comprobaciones de precondición al tiempo de ejecución.

La gestión de memoria ha sido renovada mediante los nuevos pools de memoria adaptativos de CubeCL. En lugar de tamaños de pool estáticos, el sistema monitorea las estadísticas de asignación durante una ejecución de prueba (dry run) y ajusta dinámicamente los tamaños de página. Libera páginas obsoletas cuando quedan vacías y mueve las asignaciones activas a memoria libre más pronto. Las asignaciones pequeñas y frecuentemente cambiantes se mantienen en un pool separado para minimizar la fragmentación. Este enfoque asegura que la memoria reservada coincida estrechamente con el uso real, reduciendo significativamente los requisitos de VRAM pico sin configuración manual.

Las operaciones personalizadas ahora se integran mediante la macro #[backend_extension], que conecta kernels definidos por el usuario con el sistema de dispatch. Esto permite a los desarrolladores exponer funciones personalizadas, como multiplicación de matrices fusionada con sesgo y ReLU, a través de interfaces estándar de tensores sin reintroducir genéricos de backend. La macro genera el registro para ejecución perezosa y maneja los límites del grafo de fusión, asegurando que los kernels personalizados puedan optimizarse junto con las operaciones integradas. Este mecanismo sustenta nuevas bibliotecas como burn-linalg y burn-signal.

Detalles clave

  • Velocidad de compilación: Los tiempos medianos de reconstrucción disminuyeron hasta 15 veces, con modelos transformer pasando de 14,73s a 1,00s para cambios de código equivalentes.
  • Simplificación de la API: Los parámetros de tipo de backend (B: Backend) se eliminan de structs y funciones orientados al usuario, reemplazados por la selección de dispositivo en tiempo de ejecución.
  • Eficiencia de memoria: Los pools de memoria adaptativos redujeron el uso pico de VRAM en un 49% para CNNs (de 956 MiB a 486 MiB) y en un 17,7% para transformers.
  • Soporte de Ajuste Fino: La integración nativa para LoRA y QLoRA permite congelar pesos base mientras se entrenan adaptadores de rango bajo con configuraciones de optimizador independientes.
  • Cómputo Remoto: Burn Remote ahora usa Iroh para conexiones peer-to-peer autenticadas y cifradas, soportando la reproducción de grafos para reducir la sobrecarga de comunicación.
  • Actualizaciones del Compilador: CubeCL migró a Pliron para la representación de kernels y añadió objetivos LLVM para GPUs AMD y NVIDIA, mejorando la portabilidad y la optimización.

Por qué importa

Para ingenieros de software que construyen productos de ML en Rust, la velocidad de compilación es un cuello de botella importante para la productividad. La eliminación de los genéricos de backend significa que el desarrollo iterativo—ajustar arquitecturas de modelos o depurar bucles de entrenamiento—se vuelve significativamente más rápido. Los desarrolladores ya no necesitan esperar decenas de segundos para que cada cambio menor se recople, habilitando un ciclo de retroalimentación más receptivo. Este cambio baja la barrera de entrada para usar Rust en ML, donde C++ y Python han dominado tradicionalmente debido a ciclos de iteración más fáciles.

La adición de soporte para LoRA y QLoRA aborda una necesidad crítica para desplegar grandes modelos de lenguaje y otros modelos fundacionales en entornos con recursos limitados. Al permitir a los desarrolladores ajustar modelos eficientemente sin almacenar estados completos de gradiente para todos los parámetros, Burn 0.22 hace factible adaptar modelos grandes en hardware de consumo. La gestión de memoria adaptativa mejora aún más esta capacidad, asegurando que la VRAM disponible se use eficazmente, lo cual es crucial para ejecutar tamaños de lote mayores o modelos más complejos en memoria GPU limitada.

Qué puedes hacer

  • Actualiza tus dependencias de Burn a la versión 0.22 y elimina los parámetros genéricos de backend de tus structs de modelo y firmas de función.
  • Reemplaza la selección de backend en tiempo de compilación con la inicialización de dispositivo en tiempo de ejecución usando Device::cuda(), Device::wgpu() o Device::flex().
  • Experimenta con el nuevo módulo Lora para ajustar modelos existentes, usando ParamGroup para controlar qué capas reciben adaptadores.
  • Monitorea el uso de memoria con la API de dispositivo actualizada para observar cómo los pools adaptativos reducen el consumo de VRAM en tus cargas de trabajo específicas.
  • Si usas kernels personalizados, refactorízalos para usar la macro #[backend_extension] para integrarlos con el nuevo sistema de dispatch y habilitar la fusión.
  • Explora opciones de ejecución remota configurando un servidor Burn Remote con transporte Iroh para tareas de entrenamiento o inferencia distribuidos.

Herramientas de la Tienda de Bytechap

$89

DocBento

Gestión documental autoalojada que lee cada escaneo y responde con citas de página.

Demo en vivo
$79

WorkBento

Suite de RR. HH. y gestión del entorno laboral impulsada por IA que puedes alojar tú mismo.

Demo en vivo

Seguir leyendo

Todos los artículos