Faire le travail une fois, et pouvoir le prouver
La recherche se répète : la même grille de réglages sur les mêmes plis, le même tableau de variables reconstruit pour chaque expérience. joblib supprime ce gaspillage. Parallel(n_jobs=k)(delayed(f)(x) for x in items) exécute les appels indépendants f(x) sur k travailleurs et renvoie les résultats dans l'ordre des éléments ; n_jobs=-1 utilise tous les cœurs et n_jobs=1 les exécute l'un après l'autre, ce que fait un navigateur. Le coût d'une tâche doit dépasser celui de l'envoi de ses données à un travailleur, donc regroupez les tâches minuscules. Une recherche sur grille s'y prête parfaitement : 5 alphas fois 5 plis glissants font 25 ajustements indépendants, et la réponse ne dépend pas du nombre de travailleurs qui les ont exécutés.
Memory(location).cache(f) enveloppe f dans un cache disque. Le premier appel avec certains arguments exécute f et stocke le résultat sous un hachage des arguments ; l'appel suivant avec les mêmes arguments lit le fichier. Le cache survit à la fin du programme et remarque quand f ou un argument change. Hachez des tableaux NumPy plutôt que des DataFrames : le hachage d'un DataFrame peut dépendre de sa disposition mémoire interne, donc deux tables de contenu égal peuvent avoir des hachages différents, et le cache échoue alors. joblib.hash(array) est une empreinte du contenu : égale pour une copie, différente après tout changement, ce qui prouve que deux expériences ont utilisé les mêmes données. Enfin joblib.dump(model, path, compress=3) écrit un modèle ajusté dans un fichier compressé et joblib.load(path) rend un objet qui prédit exactement pareil. Dans le lab, 25 tâches donnent des corrélations de rang glissantes à moins de 0,06 de zéro pour chaque alpha, slow_features s'exécute une fois pour deux appels en cache, et le Ridge rechargé prédit à l'identique.
- Les tâches indépendantes passent par
Paralleletdelayed; la réponse ne doit pas dépendre den_jobs. Memory.cacherange les résultats sur disque selon un hachage des arguments ; passez des tableaux, pas des tables.joblib.hashprouve que deux exécutions ont utilisé les mêmes données ;dumpetloadsauvegardent un modèle qui prédit à l'identique.
Lab : ce qui est noté
- Une tâche de pli15 pts
- La grille de tâches25 pts
- Le cache disque15 pts
- L'empreinte10 pts
- Sauvegarder un modèle15 pts
- L'étude20 pts