Training
🎓 AI Training & Fine-Tuning Module (Native Rust)
Ce module gère la préparation des données et l’entraînement Fine-Tuning au sein de l’application. Il utilise Candle (HuggingFace) pour un entraînement QLoRA natif, permettant de spécialiser l’IA par domaine métier sans dépendre de Python.
📂 Structure du Module et Arborescence
L’organisation des fichiers suit une séparation stricte entre la gestion des données, la structure mathématique des modèles et l’orchestration Tauri :
src-tauri/src/ai/training/
├── mod.rs # Point d'entrée, commandes Tauri et orchestration
├── dataset.rs # Extraction, filtrage par domaine et formatage JSON-DB
├── lora.rs # Implémentation technique des couches LoraLinear (Matrices A & B)
└── README.md # Documentation technique et mathématique
Rôle des fichiers :
mod.rs: Contient la commandeai_train_domain_native. Il initialise leVarMap, configure l’optimiseur AdamW et gère la boucle d’entraînement ainsi que la sauvegarde finale des adaptateurs.dataset.rs: Gère l’interface avec leStorageEngine. Il filtre les collections de la base de données selon le domaine (ex: “safety”) et transforme les documents bruts en structuresTrainingExample(Instruction/Input/Output).lora.rs: Définit la logique des tenseurs. C’est ici qu’est injectée la branche de bas rang qui permet l’apprentissage sans modifier les poids originaux du modèle.
🏗️ Architecture du Système
Le flux de travail est entièrement intégré au backend Rust :
graph TD
subgraph "Couche Données (JSON-DB)"
DB[(Fichiers .json par domaine)]
DS[dataset.rs: extract_domain_data]
DB -->|Filtrage Domaine| DS
end
subgraph "Préparation (In-Memory)"
EX[TrainingExamples]
TK[NLP Module: Tokenizer]
DS --> EX
EX --> TK
end
subgraph "Moteur Candle (lora.rs)"
direction TB
input[Input Tensors]
subgraph "LoraLinear Layer"
W[W: Frozen Weights 4-bit]
A[Matrice A: Entraînable]
B[Matrice B: Entraînable]
end
TK --> input
input --> W
input --> B
B --> A
W --> Sum[Addition + Scale]
A --> Sum
end
subgraph "Sortie"
LOSS[Calcul de Loss: CrossEntropy]
OPT[Optimiseur: AdamW]
SAFE[Export: .safetensors]
Sum --> LOSS
LOSS --> OPT
OPT -->|Update Gradients| A
OPT -->|Update Gradients| B
OPT -->|Final Save| SAFE
end
➗ Détails Mathématiques : L’opération LoRA
L’adaptation de bas rang (LoRA) permet de ne pas modifier la matrice de poids originale (gelée), mais d’ajouter une déviation apprise par deux matrices plus petites et . Pour une entrée de dimension , le calcul se décompose ainsi :
- Branche Standard (Frozen) : Calcul de la sortie classique du modèle :
- Branche LoRA (Adaptation) : L’entrée subit une réduction puis une projection :
- Réduction () : (où est de dimension ). Résultat : .
- Projection () : (où est de dimension ). Résultat : .
- Combinaison :
Le facteur
scaleest défini par .
🚀 Utilisation (Tauri)
L’entraînement est déclenché depuis le frontend par domaine métier :
await invoke('ai_train_domain_native', {
space: 'Projet_Arcadia',
dbName: 'main_db',
domain: 'safety',
epochs: 5,
lr: 0.0001,
});
🧪 Validation et Tests
Le module inclut des tests unitaires pour garantir la stabilité :
- Dimensions : Vérifie que le calcul matriciel respecte les formes .
- Filtrage : Valide que seules les collections du domaine demandé sont extraites de JSON-DB.
cargo test ai::training