DataTalk#40 2/3 -- Sacred pour la gestion des expériences en sciences des données

DataTalk#40 2/3 -- Sacred pour la gestion des expériences en sciences des données

Speaker: Vincent Chabot, Meteo France

"Comment gérer ses expériences de machine learning avec Sacred ou comment rendre ses expériences (quasi) reproductible sans effort."

Dans cette présentation les principes de sacred, une librairie python, seront présentés.
Sacred permet via l’utilisation de décorateur (et de la “magie” liée à sacred) de :
- conserver une trace de l’ensemble des paramètres d’une expérience,
- sauver les configurations utilisées et les résultats dans des bases de données,
- gérer et combiner différentes configurations pour former de nouvelles expériences.

6aa4f3c589d3108830b371d0310bc4da?s=128

Toulouse Data Science

November 19, 2019
Tweet

Transcript

  1. 1.

    Comment gérer ses expériences de machine learning avec Sacred ou

    comment rendre ses expériences (quasi) reproductible sans effort. Vincent chabot November 18, 2019
  2. 2.

    Qui suis-je ? Ingénieur INSA (2010) Thèse à l’INRIA liant

    math et météo (2010 – 2014) Post-doc à Météo-France (2014 – 2017) Data Scientist à WeatherForce (2017 – Octobre 2019) Depuis Oct. 2019 Data Scientist à Météo-France 1 / 12 November 18, 2019 - Présentation de sacred - V. Chabot
  3. 3.

    Pourquoi s’embêter avec un gestionnaire d’expériences ? 1 Idée géniale

    ⇒ Création d’un projet. Résultats sont prometteurs. 2 / 12 November 18, 2019 - Présentation de sacred - V. Chabot
  4. 4.

    Pourquoi s’embêter avec un gestionnaire d’expériences ? 1 Idée géniale

    ⇒ Création d’un projet. Résultats sont prometteurs. 2 Test de méthodes. Fichiers de config (éditées à la volée) et pleins de résultats. 2 / 12 November 18, 2019 - Présentation de sacred - V. Chabot
  5. 5.

    Pourquoi s’embêter avec un gestionnaire d’expériences ? 1 Idée géniale

    ⇒ Création d’un projet. Résultats sont prometteurs. 2 Test de méthodes. Fichiers de config (éditées à la volée) et pleins de résultats. 3 Approfondissement des tests. Les résultats empirent. Comment j’ai fait pour obtenir les résultats de l’étape 2 ????? 2 / 12 November 18, 2019 - Présentation de sacred - V. Chabot
  6. 6.

    Pourquoi s’embêter avec un gestionnaire d’expériences ? 1 Idée géniale

    ⇒ Création d’un projet. Résultats sont prometteurs. 2 Test de méthodes. Fichiers de config (éditées à la volée) et pleins de résultats. 3 Approfondissement des tests. Les résultats empirent. Comment j’ai fait pour obtenir les résultats de l’étape 2 ????? Sacred (ou d’autres) vont vous aider à ne pas vous retrouver dans ce cas. 2 / 12 November 18, 2019 - Présentation de sacred - V. Chabot
  7. 7.

    Sacred en bref Philosophie de sacred Que peut-on faire avec

    ? Gérer ses configurations d’expériences, Manipuler/Combiner différentes configurations, Logger l’environnement utilisé et les résultats souhaités. https://github.com/IDSIA/sacred 3 / 12 November 18, 2019 - Présentation de sacred - V. Chabot
  8. 8.

    Comment faire en quelques lignes ? https://gitlab.com/chabotv/tds_sacred Avant 1 from

    numpy.random import permutation 2 from sklearn import svm , datasets 3 C = 1.0 4 gamma = 0.7 5 iris = datasets.load_iris () 6 per = permutation(iris.target.size) 7 iris.data = iris.data[per] 8 iris.target = iris.target[per] 9 clf = svm.SVC(C, ’rbf’, gamma=gamma) 10 clf.fit(iris.data [:90] , iris.target [:90]) 11 clf.score(iris.data [90:] , iris.target [90:]) 4 / 12 November 18, 2019 - Présentation de sacred - V. Chabot
  9. 9.

    Comment faire en quelques lignes ? Après 1 from numpy

    . random import permutation 2 from s k l e a r n import svm , d a t a s e t s 3 from s a c r e d import Experiment 4 from s a c r e d . o b s e r v e r s import F i l e S t o r a g e O b s e r v e r 5 ex = Experiment ( ’ i r i s _ r b f _ s v m ’ ) 6 ex . o b s e r v e r s . append ( F i l e S t o r a g e O b s e r v e r . c r e a t e ( " ./ I r i s _ T e s t /" ) ) 7 @ex . c o n f i g 8 def cfg () : 9 C = 1.0 10 gamma = 0.7 11 @ex . automain 12 def my_main_name(C, gamma) : 13 i r i s = d a t a s e t s . l o a d _ i r i s () 14 per = permutation ( i r i s . t a r g e t . s i z e ) 15 i r i s . data = i r i s . data [ per ] 16 i r i s . t a r g e t = i r i s . t a r g e t [ per ] 17 c l f = svm . SVC(C, ’ r b f ’ , gamma=gamma) 18 c l f . f i t ( i r i s . data [ : 9 0 ] , i r i s . t a r g e t [ : 9 0 ] ) 19 r e t u r n c l f . s c o r e ( i r i s . data [ 9 0 : ] , i r i s . t a r g e t [ 9 0 : ] ) 5 / 12 November 18, 2019 - Présentation de sacred - V. Chabot
  10. 10.

    Et qu’est ce que ça change ? python test_iris.py Création

    d’un dossier de résultats 6 / 12 November 18, 2019 - Présentation de sacred - V. Chabot
  11. 11.

    Et qu’est ce que ça change ? python test_iris.py Création

    d’un dossier de résultats une identification et une sauvegarde des paramètres de l’expérience ⇒ config.json une identification des dépendances (et de leurs versions) ⇒ run.json une sauvegarde de la version du code utilisée (sauf avec des notebooks) ⇒ run.json, _sources/ une sauvegarde du résultat de l’expérience ⇒ run.json. 6 / 12 November 18, 2019 - Présentation de sacred - V. Chabot
  12. 12.

    Logger/Visualiser ses expériences Avantage Nombreux outils de login/de visualisation :FileStorage,

    MongoDB,Slack, Neptune,...) NeptuneObserver : Partager ses résultats en ligne 1 from n e p t u n e c o n t r i b . monitoring . sac red import NeptuneObserver 2 ex . o b s e r v e r s . append ( NeptuneObserver ( project_name=’ vchabot /TDS − sacredDemo ’ ) ) 3 https://ui.neptune.ml/vchabot/TDS- sacredDemo/experiments FileStorageObserver : Sauvegarde en local 7 / 12 November 18, 2019 - Présentation de sacred - V. Chabot
  13. 13.

    Visualiser/manipuler des configuration Trois types de configurations : dans le

    script/notebook python dans des fichiers de conf [json,yaml,...], à la volée en ligne de commande https://sacred.readthedocs.io/en/stable/configuration.html Une des grandes forces de sacred. On peut combiner de nombreuses configurations lors d’une même expérience. 8 / 12 November 18, 2019 - Présentation de sacred - V. Chabot
  14. 14.

    Visualiser/manipuler des configuration Trois types de configurations : dans le

    script/notebook python dans des fichiers de conf [json,yaml,...], à la volée en ligne de commande Prioritaire https://sacred.readthedocs.io/en/stable/configuration.html Une des grandes forces de sacred. On peut combiner de nombreuses configurations lors d’une même expérience. 8 / 12 November 18, 2019 - Présentation de sacred - V. Chabot
  15. 15.

    Backup configuration slide 1 # Print configuration only 2 python

    test_iris.py --unobserved print_config 3 # Perform operation and print config 4 python test_iris.py --unobserved -p 5 # Load a config file 6 python test_iris.py --unobserved -p with conf_iris.json 7 # Use name configuration 8 python test_iris.py --unobserved -p with cfg2 9 # Combine named and file configuration 10 python test_iris.py -p with cfg2 conf_iris.json 11 python test_iris.py -p with conf_iris.json cfg2 12 # Act on config. Preserve dependencies in config. 13 python test_iris.py -p with conf_iris.json C=50.0 14 # Raise an error because parameter is not used anywhere 15 python test_iris.py --unobserved -p with gmma =10 9 / 12 November 18, 2019 - Présentation de sacred - V. Chabot
  16. 16.

    Comment compléter les sorties ? 1 _run.add_artifact : Ajouter un

    fichier de résultats, 1 clf.fit(iris.data [:90] , iris.target [:90]) 2 with open("fit_svm_iris .pkl","wb") as fp: 3 pickle.dump(clf ,fp) 4 _run. add_artifact ("fit_svm_iris .pkl", 5 name="model_fit.pkl") 6 2 _run.log_scalar : Logger des métriques durant l’expérience Voir l’expérience mnist_sacred.py 3 _run.open_resource : Ajouter un fichier de ressource si inexistant (check using md5sum), Ne fonctionne pas avec Neptune 10 / 12 November 18, 2019 - Présentation de sacred - V. Chabot
  17. 17.

    Sacred et la magie 1 @ex.config 2 def cfg(): 3

    C = 1.0 4 gamma = 0.7 5 to_print ={"C":C, 6 "gamma":2.5} 7 @ex.capture(prefix=’to_print ’) 8 def print_param (C,gamma): 9 print(C) 10 print(gamma) 11 12 @ex.automain 13 def my_main(C, gamma , opt , _run): 14 print_param () Les paramètres sont passés par injection (si non présent dans le call) via les décorateurs. 11 / 12 November 18, 2019 - Présentation de sacred - V. Chabot
  18. 18.

    En résumé Sacred permet de : créer différentes configurations et

    les mixer, modifier à la volée certains arguments, On peut sauvegarder (local/BDD/ligne) : L’environnement de travail, Le code utilisé - sauf pour les notebooks, Le dataset d’entrée - selon l’observateur, Différentes sorties. Cela permet de savoir exactement dans quel environnement une expérience a tourné (et ce même quelques mois plus tard quand on est plus dans le code). 12 / 12 November 18, 2019 - Présentation de sacred - V. Chabot