Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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.

Toulouse Data Science

November 19, 2019
Tweet

More Decks by Toulouse Data Science

Other Decks in Programming

Transcript

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide