Andrew Jewell Sr / AutomataNexus LLC
Au cours de la dernière année et demie, j'ai construit AxonML, un framework d'apprentissage automatique dans Rust qui vise la parité des fonctionnalités avec PyTorch. Il en est maintenant à la version 0.3.2 : 22 caisses, 336 fichiers sources Rust, 1 095 tests réussis et il exécute l'inférence de production sur le matériel de pointe Raspberry Pi dans les bâtiments commerciaux. Cet article explique pourquoi je l'ai construit, comment il est architecturé, les problèmes techniques difficiles que j'ai rencontrés et où il est réellement utilisé.
GitHub : github.com/AutomataNexus/AxonML Licence : MIT / Apache-2.0
J'ai construit tout un écosystème d'automatisation des bâtiments à partir de zéro. NexusBMS est la plate-forme centrale de gestion des bâtiments - elle a remporté un hackathon InfluxDB et exécute InfluxDB 3.0 OSS aux côtés de ma propre base de données (Aegis-DB, également open source). Les contrôleurs de bord sont plus de 50 Raspberry Pi 4/5 exécutant mon logiciel NexusEdge personnalisé : démons matériels Rust pour les communications I2C, BACnet et Modbus, contrôle direct des équipements CVC via des sorties analogiques, des triacs 24 V, des entrées 0-10 V, des entrées de thermistance 10K/1K et des entrées à contact sec. Logique de contrôle personnalisée par type d'équipement. Plus de 16 installations, dont l'Université Taylor, Element Labs, Byrna Ammunition, l'école catholique St. Jude et les établissements de retraite Heritage Point dans deux villes différentes. Plus de 120 pièces d'équipement : appareils de traitement de l'air, chaudières, tours de refroidissement, pompes, unités DOAS, unités de piscine de natatorium, ventilateurs d'extraction, serres.
La surveillance utilise l'apprentissage automatique (auto-encodeurs LSTM pour la détection des anomalies, réseaux GRU pour la prédiction des pannes) fonctionnant sur les contrôleurs Pi Edge montés dans les salles mécaniques. Les Pi 5 sont équipés de puces Hailo NPU exécutant des modèles plus grands ; Les Pi 4 exécutent des modèles d’inférence AxonML Rust plus petits.
Le plan initial était de former des modèles dans PyTorch et de déployer l'inférence en Python sur Pis. Cela n'a pas bien fonctionné. L'empreinte mémoire de Python sur un Pi de 1 Go de RAM était trop élevée. La gestion de la dépendance était fragile. La prise en charge ARM de PyTorch était incomplète. Et je passais plus de temps à lutter contre le pipeline de déploiement qu'à construire des modèles.
Je voulais un framework où je pourrais :
Rust était le choix évident. La question était de savoir si une seule personne pouvait créer un cadre suffisamment important pour être réellement utile.
Il s’avère que la réponse est oui – avec les mises en garde que je vais aborder.
AxonML est structuré comme un espace de travail Cargo avec 22 caisses, organisées en couches. Chaque caisse est testable indépendamment et peut être intégrée via des indicateurs de fonctionnalités.
axonml-corefournit une abstraction des appareils sur CPU, CUDA, Vulkan, Metal et WebGPU. LeAppareilenum distribue les opérations au backend approprié.Stockageest la mémoire brute comptée en référence pour les tenseurs. Le backend CUDA implémente l'allocation de mémoire GPU, cuBLAS GEMM pour la multiplication matricielle et plus de 20 noyaux CUDA par éléments compilés à partir de la source PTX.
axoneml-tenseurimplémente des tenseurs à N dimensions génériques sur le type scalaire :Tenseur. La diffusion suit les règles de NumPy. Les vues et les découpages sont sans copie lorsque cela est possible (soutenus parArc). Plus de 60 opérations, dont l'arithmétique, les réductions (somme, moyenne, max, min, prod), le tri (sort, argsort, topk), l'indexation (ras...
[Courte citation de 8% de l'article original]