Spaces:
Sleeping
Sleeping
Commit History
-
Revenir a ZeroGPU pour toutes les fonctions : le mode hybride plante
functionNormallyTentative de garder seulement train_cnn_callback sur @spaces.GPU et de forcer torch.device("cpu") ailleurs (MLP, evaluation, prediction, extraction de features) pour eviter de toucher au quota GPU sur ces chemins. Ca plante en production : import spaces monkey-patche torch pour que torch.cuda.is_available() reponde True partout (meme hors decorateur), et un chemin bas niveau echappe a cette emulation des que du vrai calcul (construction de modele, forward/backward) est declenche hors du decorateur -> "CUDA error: no CUDA-capable device is detected" malgre device=cpu explicite. L'exception est avalee par le try/except du callback donc pas moyen d'avoir la trace complete sans instrumenter davantage, ce qui ne vaut pas le detour pour un contournement qui reste fragile de toute facon. Retour a la configuration deja validee : les six fonctions (MLP, CNN, extraction de features, evaluation, prediction, test aleatoire) sont a nouveau decorees @spaces.GPU, avec les durees dynamiques calibrees…7a0bb55 -
Forcer le CPU sur les chemins non decores @spaces.GPU
functionNormallySur du materiel ZeroGPU, torch.cuda.is_available() repond True meme en dehors d'un decorateur @spaces.GPU (mode emulation, pour que .to('cuda') au chargement des modules ne plante pas), mais aucun GPU reel n'est alloue hors de ce decorateur. train_mlp plantait donc en production avec "Low-level CUDA init reached" des que get_runtime_device() detectait "cuda" a tort. Meme risque sur tous les autres chemins non decores : evaluate_callback, predict_callback, random_test_callback, extract_features_callback. Ces cinq chemins forcent maintenant explicitement torch.device("cpu") au lieu de faire confiance a la detection automatique. train_cnn (seul chemin reellement decore @spaces.GPU) garde get_runtime_device().1d6e1d9
-
Isoler le stockage des modeles par session et corriger le role de la CV
functionNormallyChaque session de navigateur (session_hash Gradio) a maintenant son propre sous-repertoire dans saved_models/ et saved_models_meta/, pour qu'un(e) etudiant(e) ne voie plus les modeles entraines par un(e) autre sur le meme Space partage. Pour les classifieurs ML classiques, la validation croisee effectue desormais une vraie recherche par grille (GridSearchCV) sur l'hyperparametre expose dans l'UI au lieu de se contenter de noter la valeur choisie a la main : elle selectionne le meilleur candidat, et c'est ce modele-la qui est sauvegarde et evalue.c72538b
-
Restructurer l'app : backbone préentraîné + ML classique + FC head + CNN de zéro
functionNormally- Ajout backbone_utils.py : chargement du backbone ResNet18 depuis HF, extraction de features 512-dim avec cache mémoire - Ajout classical_ml_utils.py : SVM / LogReg / k-NN / RF / LDA sur les features extraites (pipeline sklearn avec StandardScaler + joblib) - Refactorisation train_utils.py : train_fc_head (tête FC seule, ~200Ko sauvegardés) et train_cnn (SimpleCNN de zéro) ; evaluate_saved_model unifié pour tous les types - Mise à jour model.py : BackboneWithFC (backbone gelé + tête FC) + SimpleCNN conservé - Mise à jour predict_utils.py : dispatch automatique selon model_type - Mise à jour app.py : 4 onglets (dataset / ML classique / neuronaux / test-prédiction) - Ajout config.py : HF_BACKBONE_REPO, CLASSICAL_MODEL_TYPES - Ajout .gitignore : exclut data/, backbone/, saved_models/, __pycache__/ - Ajout finetune_backbone.py : script local pour entraîner le backbone sur les donnéescdc317a
-
Update predict_utils.py
c722f9c -
Create predict_utils.py
a616e56