- RustGPT est un modèle de langage basé sur un transformeur implémenté sans framework de machine learning externe, uniquement avec Rust pur et
ndarray
- Il est conçu pour apprendre des connaissances factuelles et des schémas conversationnels via le pré-entraînement (pre-training) et le réglage par instructions (instruction tuning)
- Sa structure suit une architecture LLM classique : tokenizer → embeddings → blocs de transformeur → projection de sortie
- Il fournit une structure de code modulaire et du code de test, ce qui permet de comprendre en détail les processus d’entraînement, d’inférence et d’optimisation
- C’est une ressource de référence importante pour les développeurs et apprenants de l’écosystème Rust qui veulent implémenter un LLM depuis zéro sans dépendre d’un framework
Aperçu du projet
- RustGPT est un projet open source qui implémente un LLM uniquement avec le langage Rust et la bibliothèque d’algèbre linéaire (
ndarray), sans framework de machine learning externe ni dépendances complexes
- Son objectif principal est d’implémenter directement les composants essentiels des LLM modernes (transformeur, attention, embeddings, optimisation, etc.) et de comprendre le processus d’entraînement
- Contrairement à d’autres LLM grand public, il conçoit directement en code Rust l’ensemble de la structure du transformeur, de la rétropropagation, du tokenizer et de l’optimiseur, ce qui permet aux développeurs et chercheurs Rust de comprendre et d’étendre les principes du deep learning depuis les bases
- Son élément distinctif est l’utilisation de ndarray pour les opérations matricielles, sans dépendre de packages de machine learning externes comme PyTorch ou TensorFlow
- Grâce à une modularité solide et à une bonne couverture de tests, il convient à divers expérimentations et améliorations, ainsi qu’à un usage pédagogique de type « LLM from scratch »
Principales caractéristiques et méthode d’implémentation
- Architecture transformeur : texte d’entrée → tokenisation → embeddings → blocs de transformeur → prédiction finale
- Le texte d’entrée passe par un processus de tokenisation avant d’être converti en vecteurs d’embeddings
- Les embeddings traversent des Transformer Blocks (attention multi-tête + réseau feed-forward)
- Enfin, la couche de projection de sortie génère une distribution de probabilité sur le vocabulaire afin d’effectuer la prédiction
Structure de l’implémentation
main.rs : pipeline d’entraînement, préparation des données, exécution du mode interactif
llm.rs : logique globale de propagation avant, rétropropagation et entraînement du LLM
transformer.rs, self_attention.rs, feed_forward.rs : blocs de transformeur principaux
embeddings.rs, output_projection.rs : embeddings et couche de sortie finale
adam.rs : implémentation de l’optimiseur Adam
- Chaque module inclut un code de test correspondant (
tests/) permettant de valider les fonctionnalités
Méthode d’entraînement, de test et flux de données
- Processus d’entraînement
- Construction du vocabulaire → pré-entraînement (100 epochs, données de phrases factuelles) → instruction tuning (100 epochs, données conversationnelles)
- Exemple de pré-entraînement : "The sun rises in the east and sets in the west"
- Exemple d’instruction tuning : "User: How do mountains form? Assistant: ..."
- Prise en charge du mode interactif
- Une fois l’entraînement terminé, il est possible de tester des échanges basés sur prompt-réponse
- Exemple : "How do mountains form?" → "Mountains are formed through tectonic forces or volcanism..."
Détails techniques
- Taille du vocabulaire : configuration dynamique basée sur les données d’entraînement
- Dimension des embeddings : 128, couches cachées : 256
- Longueur maximale de séquence : 80 tokens
- Architecture : 3 blocs de transformeur + embeddings + couche de sortie
- Algorithme d’entraînement : optimiseur Adam, gradient clipping (limite de norme L2 à 5.0)
- Taux d’apprentissage : pre-training 0.0005, instruction tuning 0.0001
- Fonction de perte : cross-entropy loss
Caractéristiques du modèle et du code
- Tokenizer personnalisé (gestion de la ponctuation)
- Génération de texte basée sur le greedy decoding
- Structure en couches modulaire et interfaces claires
- Couverture de tests : tests unitaires fournis pour chaque couche et fonctionnalité
- Dépendances : uniquement
ndarray (opérations matricielles), rand / rand_distr (initialisation aléatoire), sans ML externe comme PyTorch/TensorFlow
- Valeur pédagogique : idéal pour apprendre la structure interne et les principes d’entraînement des LLM modernes
Possibilités d’évolution
- Intégration d’architectures avancées : attention multi-tête, RoPE, encodage positionnel, etc.
- Optimisation des performances : SIMD, entraînement parallèle, amélioration de l’efficacité mémoire
- Prise en charge de la sauvegarde/du chargement du modèle
- Ajout d’un échantillonnage amélioré (beam search, Top-k/Top-p) et de métriques d’évaluation
Importance
- Projet d’apprentissage et d’expérimentation montrant qu’il est possible d’implémenter directement un LLM uniquement en Rust, sans dépendre de frameworks Python comme PyTorch ou TensorFlow
- Une référence utile pour les développeurs qui veulent comprendre le fonctionnement interne des LLM et construire des systèmes de ML dans un environnement Rust
Aucun commentaire pour le moment.