Metaflow est un framework créé par Netflix pour créer et exécuter des flux de travail de ML.
Cette intégration permet aux utilisateurs d’appliquer des décorateurs aux étapes et flows Metaflow afin d’enregistrer automatiquement les paramètres et les artifacts dans W&B.
- Décorer une étape permet d’activer ou de désactiver l’enregistrement pour certains types au sein de cette étape.
- Décorer le flow permet d’activer ou de désactiver l’enregistrement pour chaque étape du flow.
Inscrivez-vous et créez une clé API
Une clé API authentifie votre machine auprès de W&B. Vous pouvez générer une clé API depuis votre profil.
Pour une méthode plus directe, créez une clé API en accédant directement aux Paramètres utilisateur. Copiez immédiatement la clé API nouvellement créée et conservez-la dans un endroit sûr, par exemple dans un gestionnaire de mots de passe.
- Cliquez sur l’icône de votre profil en haut à droite.
- Sélectionnez Paramètres utilisateur, puis faites défiler jusqu’à la section API Keys.
Installez la bibliothèque wandb et connectez-vous
Pour installer la bibliothèque wandb en local et vous connecter :
Pour wandb version 0.19.8 ou antérieure, installez fastcore version 1.8.0 ou antérieure (fastcore<1.8.0) au lieu de plum-dispatch.
Ligne de commande
Python
Python notebook
-
Définissez la variable d’environnement
WANDB_API_KEY sur votre clé API.
export WANDB_API_KEY=<your_api_key>
-
Installez la bibliothèque
wandb et connectez-vous.
pip install -Uqqq metaflow "plum-dispatch<3.0.0" wandb
wandb login
pip install -Uqqq metaflow "plum-dispatch<3.0.0" wandb
import wandb
wandb.login()
!pip install -Uqqq metaflow "plum-dispatch<3.0.0" wandb
import wandb
wandb.login()
Décorez vos flows et vos étapes
Étape
Flow
Flow et étapes
Décorer une étape active ou désactive la journalisation pour certains types au sein de cette étape.Dans cet exemple, tous les jeux de données et modèles de start seront enregistrés.from wandb.integration.metaflow import wandb_log
class WandbExampleFlow(FlowSpec):
@wandb_log(datasets=True, models=True, settings=wandb.Settings(...))
@step
def start(self):
self.raw_df = pd.read_csv(...). # pd.DataFrame -> téléverser comme jeu de données
self.model_file = torch.load(...) # nn.Module -> téléverser comme modèle
self.next(self.transform)
Décorer un flow revient à décorer toutes les étapes qui le composent avec une configuration par défaut.Dans ce cas, toutes les étapes de WandbExampleFlow enregistrent par défaut les jeux de données et les modèles, comme si chaque étape était décorée avec @wandb_log(datasets=True, models=True).from wandb.integration.metaflow import wandb_log
@wandb_log(datasets=True, models=True) # décorer tous les @step
class WandbExampleFlow(FlowSpec):
@step
def start(self):
self.raw_df = pd.read_csv(...). # pd.DataFrame -> téléverser comme jeu de données
self.model_file = torch.load(...) # nn.Module -> téléverser comme modèle
self.next(self.transform)
Décorer le flow revient à décorer toutes les étapes avec une configuration par défaut. Cela signifie que si vous décorez ensuite une étape avec un autre @wandb_log, celui-ci remplace la décoration définie au niveau du flow.Dans cet exemple :
start et mid enregistrent à la fois les jeux de données et les modèles.
end n’enregistre ni jeux de données ni modèles.
from wandb.integration.metaflow import wandb_log
@wandb_log(datasets=True, models=True) # équivaut à décorer start et mid
class WandbExampleFlow(FlowSpec):
# cette étape enregistrera les jeux de données et les modèles
@step
def start(self):
self.raw_df = pd.read_csv(...). # pd.DataFrame -> téléverser comme jeu de données
self.model_file = torch.load(...) # nn.Module -> téléverser comme modèle
self.next(self.mid)
# cette étape enregistrera également les jeux de données et les modèles
@step
def mid(self):
self.raw_df = pd.read_csv(...). # pd.DataFrame -> téléverser comme jeu de données
self.model_file = torch.load(...) # nn.Module -> téléverser comme modèle
self.next(self.end)
# cette étape est redéfinie et n'enregistrera PAS les jeux de données NI les modèles
@wandb_log(datasets=False, models=False)
@step
def end(self):
self.raw_df = pd.read_csv(...).
self.model_file = torch.load(...)
Accédez à vos données par programmation
Vous pouvez accéder aux informations que nous avons collectées de trois façons : dans le processus Python d’origine en cours d’enregistrement à l’aide de la bibliothèque cliente wandb, via l’interface de l’application web, ou par programmation à l’aide de notre API publique. Les Parameters sont enregistrés dans le config de W&B et sont disponibles dans l’onglet Vue d’ensemble. Les datasets, models et others sont enregistrés dans W&B Artifacts et sont disponibles dans l’onglet Artifacts. Les types Python de base sont enregistrés dans le dict summary de W&B et sont disponibles dans l’onglet Vue d’ensemble. Voir notre guide de l’API publique pour en savoir plus sur l’utilisation de l’API afin d’obtenir ces informations par programmation depuis l’extérieur.
| Données | Bibliothèque cliente | UI |
|---|
Parameter(...) | wandb.Run.config | onglet Vue d’ensemble, Config |
datasets, models, others | wandb.Run.use_artifact("{var_name}:latest") | onglet Artifacts |
Types Python de base (dict, list, str, etc.) | wandb.Run.summary | onglet Vue d’ensemble, Summary |
| kwarg | Options |
|---|
datasets | True: Journaliser les variables d’instance correspondant à un jeu de donnéesFalse
|
models | True: Journaliser les variables d’instance correspondant à un modèleFalse
|
others | True: Journaliser tout autre élément sérialisable avec pickleFalse
|
settings | wandb.Settings(…): Spécifiez vos propres paramètres wandb pour cette étape ou ce flowNone: Équivaut à passer wandb.Settings()
Par défaut, si : settings.run_group vaut None, il sera défini sur {flow_name}/{run_id}settings.run_job_type vaut None, il sera défini sur {run_job_type}/{step_name}
|
Qu’enregistrez-vous exactement ? Enregistrez-vous toutes les variables d’instance et les variables locales ?
wandb_log enregistre uniquement les variables d’instance. Les variables locales ne sont JAMAIS enregistrées. Cela permet d’éviter d’enregistrer des données inutiles.
Quels types de données sont enregistrés ?
Nous prenons actuellement en charge les types suivants :
| Paramètre de journalisation | Type |
|---|
| par défaut (toujours activé) | dict, list, set, str, int, float, bool
|
datasets | |
models | nn.Modulesklearn.base.BaseEstimator
|
others | |
| Type de variable | comportement | Exemple | Type de données |
|---|
| Instance | Enregistré automatiquement | self.accuracy | float |
| Instance | Enregistré si datasets=True | self.df | pd.DataFrame |
| Instance | Non enregistré si datasets=False | self.df | pd.DataFrame |
| Locale | Jamais enregistré | accuracy | float |
| Locale | Jamais enregistré | df | pd.DataFrame |
La traçabilité des artifacts est-elle prise en charge ?
Oui. Si vous avez un artifact qui est la sortie de l’étape A et l’entrée de l’étape B, nous construisons automatiquement le DAG de traçabilité pour vous.
Pour voir un exemple de ce comportement, consultez ce notebook et la page W&B Artifacts correspondante