Burn 0.22 supprime les génériques de backend pour accélérer les builds ML en Rust
Burn 0.22 élimine les paramètres de type de backend des API utilisateur, réduisant les temps de reconstruction jusqu'à 15 fois et ajoutant la prise en charge de LoRA.
Traduit automatiquement depuis l'original anglais.
Le framework d'apprentissage automatique Burn pour Rust a publié la version 0.22, une mise à jour majeure qui simplifie le code applicatif et réduit drastiquement les temps de compilation. Sortie en octobre 2026, cette version supprime les types génériques de backend de l'API destinée aux utilisateurs, permettant aux développeurs de sélectionner les dispositifs d'exécution à l'exécution plutôt qu'à la compilation. La mise à jour introduit également une prise en charge native du fine-tuning LoRA et QLoRA, une gestion améliorée de la mémoire et des processus de build plus rapides pour les modèles complexes.
Ce qui s'est passé
Les versions précédentes de Burn obligeaient les développeurs à propager les paramètres de type de backend, tels que B: Backend, dans toute leur pile applicative. Cette approche offrait de la flexibilité mais créait une chaîne de dépendances lourde qui ralentissait la compilation chaque fois que la structure des modèles changeait. Avec la version 0.22, ces génériques de backend sont supprimés du code utilisateur. À la place, le contexte d'exécution est sélectionné via l'initialisation du dispositif, par exemple Device::cuda(0) ou Device::wgpu(). Ce changement découple les opérations tensorielles de haut niveau des implémentations spécifiques au backend, rationalisant le flux de travail de développement.
L'impact sur les temps de build est considérable. Dans les benchmarks fournis par l'équipe de développement, la suppression d'une couche cachée d'un petit réseau neuronal convolutif a réduit les temps médians de reconstruction en mode release de 28,42 secondes à 4,57 secondes. Pour un modèle transformer avec une boucle d'entraînement personnalisée, l'alternance d'expressions feedforward équivalentes a vu les temps de reconstruction chuter de 14,73 secondes à seulement 1,00 seconde. Ces améliorations découlent de la rupture de la chaîne de dépendances qui forçait auparavant la recompilation de grandes portions de la base de code lors de modifications mineures du modèle.
Au-delà des changements d'API, la sortie se concentre sur les performances à l'exécution et l'expérience développeur. Elle introduit des pools de mémoire adaptatifs qui ajustent les tailles d'allocation en fonction des statistiques de charge, réduisant l'utilisation maximale de la VRAM de près de moitié dans certains benchmarks CNN. La mise à jour ajoute également la prise en charge du fine-tuning de modèles existants utilisant LoRA et QLoRA, permettant une adaptation efficace de grands modèles sans modifier leurs couches de base. De plus, le framework prend désormais en charge l'exportation de modèles vers ONNX et intègre des capacités de calcul distant via le protocole de transport Iroh.
Comment cela fonctionne
Le changement architectural central implique un nouveau chemin d'exécution : Tensor → Bridge → Dispatch → Backend. La couche bridge masque les représentations concrètes du backend de l'API tensorielle de haut niveau, effaçant efficacement les types qui liaient auparavant le code applicatif à des backends spécifiques. Cet effacement de types permet au système de dispatch de router les opérations vers le backend approprié à l'exécution. Bien que le trait Backend reste central pour l'implémentation d'opérations personnalisées, le code applicatif n'a plus besoin de porter des contraintes génériques. Les contextes Autodiff sont désormais configurés sur le dispositif et hérités par les tenseurs, déplaçant les vérifications préalables à l'exécution.
La gestion de la mémoire a été entièrement refondue grâce aux nouveaux pools de mémoire adaptatifs de CubeCL. Au lieu de tailles de pool statiques, le système surveille les statistiques d'allocation lors d'une exécution à blanc (dry run) et ajuste dynamiquement les tailles de page. Il libère les pages obsolètes lorsqu'elles deviennent vides et déplace les allocations actives vers la mémoire libre plus tôt. Les petites allocations fréquemment modifiées sont conservées dans un pool séparé pour minimiser la fragmentation. Cette approche garantit que la mémoire réservée correspond étroitement à l'utilisation réelle, abaissant significativement les exigences maximales en VRAM sans configuration manuelle.
Les opérations personnalisées sont désormais intégrées via la macro #[backend_extension], qui connecte les kernels définis par l'utilisateur au système de dispatch. Cela permet aux développeurs d'exposer des fonctions personnalisées, telles que la multiplication matricielle fusionnée avec biais et ReLU, via des interfaces tensorielles standard sans réintroduire de génériques de backend. La macro génère l'enregistrement pour l'exécution paresseuse et gère les limites des graphes de fusion, garantissant que les kernels personnalisés peuvent être optimisés aux côtés des opérations intégrées. Ce mécanisme sous-tend de nouvelles bibliothèques comme burn-linalg et burn-signal.
Détails clés
- Vitesse de Build : Les temps médians de reconstruction ont diminué jusqu'à 15 fois, les modèles transformers passant de 14,73 s à 1,00 s pour des modifications de code équivalentes.
- Simplification de l'API : Les paramètres de type de backend (
B: Backend) sont supprimés des structures et fonctions destinées aux utilisateurs, remplacés par une sélection de dispositif à l'exécution. - Efficacité Mémoire : Les pools de mémoire adaptatifs ont réduit l'utilisation maximale de la VRAM de 49 % pour les CNNs (de 956 MiB à 486 MiB) et de 17,7 % pour les transformers.
- Prise en Charge du Fine-Tuning : L'intégration native de LoRA et QLoRA permet de geler les poids de base tout en entraînant des adaptateurs de rang faible avec des configurations d'optimiseur indépendantes.
- Calcul Distant : Burn Remote utilise désormais Iroh pour des connexions pair-à-pair authentifiées et chiffrées, prenant en charge la relecture de graphes pour réduire la surcharge de communication.
- Mises à Jour du Compilateur : CubeCL a migré vers Pliron pour la représentation des kernels et ajouté des cibles LLVM pour les GPU AMD et NVIDIA, améliorant la portabilité et l'optimisation.
Pourquoi c'est important
Pour les ingénieurs logiciels construisant des produits ML en Rust, la vitesse de compilation est un goulot d'étranglement majeur pour la productivité. La suppression des génériques de backend signifie que le développement itératif—ajuster les architectures de modèles ou déboguer les boucles d'entraînement—devient significativement plus rapide. Les développeurs n'ont plus besoin d'attendre des dizaines de secondes pour chaque modification mineure afin de recompiler, permettant une boucle de retour plus réactive. Ce changement abaisse la barrière à l'entrée pour l'utilisation de Rust en ML, où C++ et Python ont traditionnellement dominé en raison de cycles d'itération plus faciles.
L'ajout de la prise en charge de LoRA et QLoRA répond à un besoin critique pour le déploiement de grands modèles de langage et d'autres modèles fondamentaux dans des environnements à ressources limitées. En permettant aux développeurs d'affiner les modèles efficacement sans stocker les états de gradient complets pour tous les paramètres, Burn 0.22 rend feasible l'adaptation de grands modèles sur du matériel grand public. La gestion adaptative de la mémoire renforce davantage cette capacité, garantissant que la VRAM disponible est utilisée efficacement, ce qui est crucial pour exécuter des tailles de batch plus importantes ou des modèles plus complexes sur une mémoire GPU limitée.
Ce que vous pouvez faire
- Mettez à jour vos dépendances Burn vers la version 0.22 et supprimez les paramètres génériques de backend de vos structures de modèle et signatures de fonctions.
- Remplacez la sélection de backend à la compilation par l'initialisation de dispositif à l'exécution en utilisant
Device::cuda(),Device::wgpu()ouDevice::flex(). - Expérimentez avec le nouveau module
Lorapour affiner des modèles existants, en utilisantParamGrouppour contrôler quelles couches reçoivent des adaptateurs. - Surveillez l'utilisation de la mémoire avec l'API de dispositif mise à jour pour observer comment les pools adaptatifs réduisent la consommation de VRAM dans vos charges de travail spécifiques.
- Si vous utilisez des kernels personnalisés, refactorisez-les pour utiliser la macro
#[backend_extension]afin de s'intégrer au nouveau système de dispatch et activer la fusion. - Explorez les options d'exécution distante en configurant un serveur Burn Remote avec le transport Iroh pour des tâches d'entraînement ou d'inférence distribués.



