Description
Shumai est une bibliothèque de tenseurs différentiables conçue pour JavaScript et TypeScript, exploitant la vitesse de Bun et la puissance de Flashlight. Elle vise à rendre la manipulation des données, l'entraînement des modèles et la logique d'inférence avancée plus accessibles et efficaces pour les développeurs au sein de l'écosystème JavaScript. En utilisant les tableaux typés natifs et le compilateur Just-In-Time (JIT) de Bun, Shumai offre une solution performante pour des tâches allant de la création de jeux de données à l'entraînement de petits modèles d'apprentissage automatique.
La bibliothèque fournit des opérations de tenseurs de base, la différentiation automatique pour le calcul des gradients, et une conversion transparente vers et depuis les tableaux natifs JavaScript. Cela permet aux développeurs de travailler avec les données directement en JavaScript, de les préparer pour des tableaux compatibles GPU, puis d'entraîner des modèles sans quitter l'environnement. L'architecture de Shumai est conçue pour minimiser la surcharge, permettant à JavaScript de ne pas interférer pendant l'entraînement et l'inférence, en particulier pour les modèles plus petits.
Les capacités clés incluent des utilitaires de tableaux standard, la création de tenseurs, des opérations mathématiques et le suivi des gradients. Les utilisateurs peuvent activer le calcul des gradients pour les tenseurs, effectuer des opérations, puis accéder aux gradients calculés. La bibliothèque offre également des fonctionnalités pour l'optimisation de la gestion de la mémoire, permettant aux utilisateurs d'ajuster les paramètres de garbage collection pour optimiser les performances en fonction des capacités matérielles. De plus, Shumai inclut un système de collecte de statistiques qui peut enregistrer les performances des opérations dans la console ou via HTTP, avec des options pour le profilage par portée et la collecte de traces de pile.
Shumai est particulièrement bénéfique pour les ingénieurs logiciels et les chercheurs qui travaillent déjà dans l'écosystème JavaScript et souhaitent intégrer des capacités d'apprentissage automatique sans la courbe d'apprentissage abrupte associée à d'autres langages ou frameworks. Ses benchmarks de performance montrent des avantages significatifs par rapport à des bibliothèques comme TensorFlow.js dans diverses opérations, en particulier sur les GPU Apple M1 Pro et Nvidia. Le projet est expérimental et les contributions sont les bienvenues pour améliorer sa fonctionnalité et sa stabilité.
Fonctionnalités principales de Shumai
Bibliothèque de tenseurs différentiables et rapide pour JavaScript et TypeScript
Construite avec Bun et Flashlight pour de hautes performances
Prend en charge la différentiation automatique pour le calcul des gradients
Conversion transparente entre les tenseurs et les tableaux natifs JavaScript
Optimisée pour l'entraînement de petits modèles et la logique d'inférence avancée
Exploite les tableaux typés natifs et la compilation JIT
Optimisation de l'utilisation de la mémoire pour l'amélioration des performances
Collecte de statistiques intégrée pour le profilage des opérations
Collecte de statistiques par portée pour un profilage isolé
Logiciel expérimental avec développement actif
Prend en charge le calcul GPU via les backends ArrayFire (CUDA sous Linux, CPU sous macOS)
Journalisation extensible des statistiques avec options Console et HTTP
Premiers pas avec Shumai
Installer Bun et ArrayFire : Suivez les instructions spécifiques à la plateforme pour macOS et Linux.
Installer Shumai : Exécutez `bun install @shumai/shumai`.
Importer Shumai : Utilisez `import * as sm from '@shumai/shumai'` dans votre code TypeScript/JavaScript.
Créer des Tenseurs : Utilisez des fonctions comme `sm.randn()` ou `sm.tensor()` pour créer des tenseurs.
Effectuer des Opérations : Appliquez des opérations mathématiques telles que `matmul()`, `mul()` et `sum()`.
Activer les Gradients : Définissez `tensor.requires_grad = true` pour les tenseurs qui nécessitent le suivi des gradients.
Calculer les Gradients : Appelez `.backward()` sur le tenseur de perte pour remplir les gradients.
Optimiser la Mémoire : Ajustez les options de mémoire à l'aide de `util.memoryOptions()` pour les performances.
Cas d'utilisation de Shumai
- Création de jeux de données
- Entraînement de modèles
- Logique d'inférence
- Prétraitement des données
- Prototypage de recherche
- Développement d'applications








