À propos du projet

ferrite est un moteur d'inférence haute performance écrit en Rust, spécialement conçu pour le modèle GLM-5.3-Flash. Le moteur utilise une architecture hybride combinant une attention linéaire GatedDeltaNet, une attention parcimonieuse DSA et des couches FFN denses/MoE. Son objectif principal est de réduire les coûts de fonctionnement associés aux cadres de service traditionnels en utilisant une spécialisation de modèle à temps de compilation et une planification de couche statique. Les principales caractéristiques architecturales comprennent : 1. **Désagrégation PDAF** : les phases de Prefill, Decode, Attention et FFN sont traitées comme des citoyens de première classe avec un routeur dédié et un graphique d'opération statique, éliminant ainsi les coûts de dispatch à l'exécution. 2. **Parallélisme composable** : le moteur prend en charge le parallélisme Tensoriel (TP), le parallélisme de Contenu (CP) et le parallélisme de Contenu-Data (DCP) grâce à un système d'algèbre d'axe unifié. Cela permet des configurations de maillage 3D flexibles (axes Q, Kv et Head) qui peuvent être composées pour optimiser le débit et la latence. 3. **MHC exact et GatedDeltaNet** : il met en œuvre des résidus de connexion multi-tête (MHC) exacts et une récurrence GatedDeltaNet par morceaux parallèle WYF, vérifiés par rapport aux normes CPU. 4. **Optimisation CUDA** : le moteur comprend des noyaux CUDA personnalisés pour les architectures sm_100a/sm_103a, avec prise en charge de la capture et de la vérification du graphe CUDA pour garantir la stabilité de la séquence d'opérations pendant le décodage. Le projet met l'accent sur la correction numérique, en utilisant un backend CPU comme standard pour valider tous les autres backends. Il prend actuellement en charge le batching continu, le décodage spéculatif (MTP) et a atteint des améliorations de performances significatives sur les GPU B300, atteignant 64,8 tok/s en mode décodage avec exécution spéculative activée. La base de code est modulaire, avec des crates séparés pour les types, la configuration du modèle, les noyaux backend, la gestion KV, le batching, la planification et l'exécution.