- Créer et utiliser un artefact W&B.
- Utiliser et créer des Registered Models dans le registre W&B.
- Exécuter des tâches d’entraînement sur une infrastructure de calcul dédiée avec W&B Launch.
- Utiliser le client wandb dans les ops et les assets.
wandb_resource: une ressource Dagster utilisée pour s’authentifier auprès de l’API W&B et communiquer avec elle.wandb_artifacts_io_manager: un gestionnaire d’E/S Dagster utilisé pour consommer des artefacts W&B.
Avant de commencer
- Clé API W&B.
- Entité W&B (utilisateur ou équipe) : une entité est un nom d’utilisateur ou un nom d’équipe vers lequel vous envoyez les runs et Artifacts W&B. Veillez à créer votre compte ou votre entité d’équipe dans l’interface de l’application W&B avant d’enregistrer des runs. Si vous ne spécifiez pas d’entité, le run sera envoyé à votre entité par défaut, qui correspond généralement à votre nom d’utilisateur. Modifiez votre entité par défaut dans vos paramètres, sous Project Defaults.
- Projet W&B : le nom du projet dans lequel les runs W&B sont stockés.
Configurez votre clé API
- Connectez-vous à W&B. Remarque : si vous utilisez le serveur W&B, demandez à votre administrateur le nom d’hôte de l’instance.
- Créez une clé API dans Paramètres utilisateur. Pour un environnement de production, nous vous recommandons d’utiliser un compte de service comme propriétaire de cette clé.
- Définissez une variable d’environnement pour cette clé API :
export WANDB_API_KEY=YOUR_KEY.
wandb_config. Vous pouvez transmettre différentes valeurs de wandb_config à différentes ops/ressources si vous souhaitez utiliser un autre projet W&B. Pour plus d’informations sur les clés que vous pouvez transmettre, voir la section Configuration ci-dessous.
- Configuration pour @job
- Configuration pour @repository à l’aide de ressources
Exemple : configuration pour
@jobConfiguration
wandb_resource: ressource Dagster utilisée pour communiquer avec l’API W&B. Elle s’authentifie automatiquement à l’aide de la clé API fournie. Propriétés :api_key: (str, requis) : une clé API W&B nécessaire pour communiquer avec l’API W&B.host: (str, facultatif) : l’hôte de l’API que vous souhaitez utiliser. Requis uniquement si vous utilisez W&B Server. Par défaut, l’hôte Public Cloudhttps://api.wandb.aiest utilisé.
wandb_artifacts_io_manager: IO Manager Dagster permettant de consommer des W&B Artifacts. Propriétés :base_dir: (int, facultatif) Répertoire de base utilisé pour le stockage local et la mise en cache. Les W&B Artifacts et les journaux de W&B Run seront écrits et lus depuis ce répertoire. Par défaut, le répertoireDAGSTER_HOMEest utilisé.cache_duration_in_minutes: (int, facultatif) permet de définir la durée pendant laquelle les W&B Artifacts et les journaux de W&B Run doivent être conservés dans le stockage local. Seuls les fichiers et répertoires qui n’ont pas été ouverts pendant cette durée sont supprimés du cache. La purge du cache a lieu à la fin de l’exécution d’un IO Manager. Vous pouvez la définir sur 0 si vous voulez désactiver complètement la mise en cache. La mise en cache améliore les performances lorsqu’un Artifact est réutilisé entre des jobs exécutés sur la même machine. La valeur par défaut est de 30 jours.run_id: (str, facultatif) : un ID unique pour ce run, utilisé pour la reprise. Il doit être unique dans le projet, et si vous supprimez un run, vous ne pouvez pas réutiliser cet ID. Utilisez le champ name pour un nom descriptif court, ou config pour enregistrer les hyperparamètres à comparer entre les runs. L’ID ne peut pas contenir les caractères spéciaux suivants :/\#?%:..Vous devez définir le Run ID lorsque vous effectuez le suivi des expériences dans Dagster pour permettre à l’IO Manager de reprendre le run. Par défaut, il est défini sur le Dagster Run ID, par exemple7e4df022-1bf2-44b5-a383-bb852df4077e.run_name: (str, facultatif) Un nom d’affichage court pour ce run afin de vous aider à l’identifier dans l’interface utilisateur. Par défaut, il s’agit d’une chaîne au format suivant :dagster-run-[8 first characters of the Dagster Run ID]. Par exemple,dagster-run-7e4df022.run_tags: (list[str], facultatif) : une liste de chaînes qui alimentera la liste des tags de ce run dans l’interface utilisateur. Les tags sont utiles pour regrouper les runs ou leur appliquer des libellés temporaires commebaselineouproduction. Il est facile d’ajouter et de supprimer des tags dans l’interface utilisateur, ou de filtrer pour n’afficher que les runs ayant un tag spécifique. Tout W&B Run utilisé par l’intégration aura le tagdagster_wandb.
Utiliser W&B Artifacts
@op ou @asset Dagster de créer et de consommer des W&B Artifacts de manière native. Voici un exemple simple d’un @asset qui produit un artefact W&B de type jeu de données contenant une liste Python.
@op, @asset et @multi_asset avec une configuration de métadonnées afin de créer des Artifacts. De même, vous pouvez aussi consommer des W&B Artifacts, même s’ils ont été créés en dehors de Dagster.
Écrire des artefacts W&B
- Objets Python (
int,dict,list…) - Objets W&B (
Table,Image,Graph…) - Objets artefact W&B
@asset) :
- Objets Python
- Objet W&B
- Artefact W&B
Tout ce qui peut être sérialisé avec le module pickle est sérialisé avec pickle et ajouté à un artefact créé par l’intégration. Le contenu est désérialisé lorsque vous lisez cet artefact dans Dagster (voir Lire les artefacts pour plus de détails).W&B prend en charge plusieurs modules de sérialisation basés sur pickle (pickle, dill, cloudpickle, joblib). Vous pouvez également utiliser des formats de sérialisation plus avancés comme ONNX ou PMML. Veuillez vous référer à la section Serialization pour plus d’informations.
Configuration
@op, un @asset et un @multi_asset. Ce dictionnaire doit être transmis dans les arguments du décorateur sous forme de métadonnées. Cette configuration est requise pour contrôler les lectures et écritures du gestionnaire d’E/S des Artifacts W&B.
Pour @op, il se trouve dans les métadonnées de sortie via l’argument de métadonnées Out.
Pour @asset, il se trouve dans l’argument metadata de l’asset.
Pour @multi_asset, il se trouve dans les métadonnées de chaque sortie via les arguments de métadonnées AssetOut.
Les exemples de code suivants montrent comment définir ce dictionnaire de configuration pour des calculs @op, @asset et @multi_asset :
- Exemple pour @op
- Exemple pour @asset
- Exemple pour @multi_asset
Exemple pour
@op :name: (str) nom explicite de cet artefact, qui vous permet de l’identifier dans l’interface utilisateur ou d’y faire référence dans les appelsuse_artifact. Les noms peuvent contenir des lettres, des chiffres, des traits de soulignement, des traits d’union et des points. Le nom doit être unique au sein d’un projet. Requis pour@op.type: (str) Le type de l’artefact, utilisé pour organiser et distinguer les artefacts. Les types courants incluentdatasetoumodel, mais vous pouvez utiliser n’importe quelle chaîne contenant des lettres, des chiffres, des traits de soulignement, des traits d’union et des points. Requis lorsque la sortie n’est pas déjà un Artifact.description: (str) Texte libre fournissant une description de l’artefact. La description est rendue en Markdown dans l’interface utilisateur, c’est donc un bon emplacement pour ajouter des tableaux, des liens, etc.aliases: (list[str]) Une liste contenant un ou plusieurs alias que vous souhaitez appliquer à l’Artifact. L’intégration ajoute également à cette liste le tag « latest », qu’il soit défini ou non. C’est un moyen efficace d’assurer la gestion des versions des modèles et des datasets.add_dirs: (list[dict[str, Any]]): Une liste contenant la configuration de chaque répertoire local à inclure dans l’Artifact.add_files: (list[dict[str, Any]]): Une liste contenant la configuration de chaque fichier local à inclure dans l’Artifact.add_references: (list[dict[str, Any]]): Une liste contenant la configuration de chaque référence externe à inclure dans l’Artifact.serialization_module: (dict) Configuration du module de sérialisation à utiliser. Référez-vous à la section Serialization pour plus d’informations.name: (str) Nom du module de sérialisation. Valeurs acceptées :pickle,dill,cloudpickle,joblib. Le module doit être disponible localement.parameters: (dict[str, Any]) Arguments facultatifs transmis à la fonction de sérialisation. Elle accepte les mêmes paramètres que la méthodedumpde ce module. Par exemple,{"compress": 3, "protocol": 4}.
- Côté W&B : le nom et la version de l’intégration source, la version de Python utilisée, la version du protocole pickle, etc.
- Côté Dagster :
- ID du run Dagster
- W&B Run : ID, nom, chemin, URL
- W&B Artifact : ID, nom, type, version, taille, URL
- W&B Entity
- W&B Project




Si vous utilisez un vérificateur de types statique comme mypy, importez l’objet de définition du type de configuration comme suit :
Utiliser des partitions
DailyPartitionsDefinition.
my_daily_partitioned_asset.2023-01-01, my_daily_partitioned_asset.2023-01-02 ou my_daily_partitioned_asset.2023-01-03. Pour les ressources partitionnées selon plusieurs dimensions, chaque dimension est affichée au format délimité par des points. Par exemple, my_asset.car.blue.
Utilisation avancée
- Job partitionné
- Ressource partitionnée simple
- Ressource multi-partitionnée
- Utilisation avancée des partitions
Lire les Artifacts W&B
wandb_artifact_configuration peut être défini sur un @op ou un @asset. La seule différence est que vous devez définir la configuration sur l’entrée plutôt que sur la sortie.
Pour @op, elle se trouve dans les métadonnées d’entrée via l’argument de métadonnées In. Vous devez
indiquer explicitement le nom de l’Artifact.
Pour @asset, elle se trouve dans les métadonnées d’entrée via l’argument de métadonnées Asset In. Vous ne devez pas indiquer de nom d’Artifact, car le nom de la ressource parente doit correspondre.
Si vous souhaitez déclarer une dépendance à un Artifact créé en dehors de l’intégration, vous devrez utiliser SourceAsset. Il lira toujours la dernière version de cette ressource.
Les exemples suivants montrent comment lire un Artifact à partir de différentes ops.
- À partir d’un @op
- Créé par un autre @asset
- Artifact créé en dehors de Dagster
Lecture d’un artifact à partir d’un
@opConfiguration
- Pour obtenir un objet nommé contenu dans un Artifact, utilisez get :
- Pour obtenir le chemin local d’un fichier téléchargé contenu dans un Artifact, utilisez get_path :
- Pour obtenir l’objet Artifact complet (avec le contenu téléchargé localement) :
get: (str) Obtient l’objet W&B correspondant au nom relatif de l’artefact.get_path: (str) Obtient le chemin du fichier correspondant au nom relatif de l’artefact.
Configuration de la sérialisation
yield génèrent une erreur si vous essayez de les sérialiser avec pickle.
Nous prenons également en charge d’autres modules de sérialisation basés sur Pickle (dill, cloudpickle, joblib). Vous pouvez aussi utiliser des méthodes de sérialisation plus avancées, comme ONNX ou PMML, en renvoyant une chaîne sérialisée ou en créant directement un Artifact. Le bon choix dépend de votre cas d’usage ; veuillez vous référer à la littérature disponible sur ce sujet.
Modules de sérialisation basés sur pickle
serialization_module dans wandb_artifact_configuration. Assurez-vous que le module est disponible sur la machine qui exécute Dagster.
L’intégration saura automatiquement quel module de sérialisation utiliser lorsque vous lirez cet artifact.
Les modules actuellement pris en charge sont pickle, dill, cloudpickle et joblib.
Voici un exemple simplifié dans lequel nous créons un « modèle » sérialisé avec joblib, puis l’utilisons pour l’inférence.
Formats de sérialisation avancés (ONNX, PMML)
- Convertissez votre modèle dans le format sélectionné, puis retournez la représentation sous forme de chaîne de ce format comme s’il s’agissait d’un objet Python ordinaire. L’intégration sérialisera cette chaîne avec Pickle. Vous pourrez ensuite reconstruire votre modèle à partir de cette chaîne.
- Créez un nouveau fichier local contenant votre modèle sérialisé, puis créez un Artifact personnalisé avec ce fichier à l’aide de la configuration add_file.
Utiliser les partitions
L’intégration prend en charge nativement les partitions Dagster. Vous pouvez lire de façon sélective une, plusieurs ou toutes les partitions d’une ressource. Toutes les partitions sont fournies dans un dictionnaire, où la clé et la valeur représentent respectivement la clé de partition et le contenu de l’Artifact.- Lire toutes les partitions
- Lire des partitions spécifiques
Cette opération lit toutes les partitions de l’
@asset amont, fournies sous forme de dictionnaire. Dans ce dictionnaire, la clé et la valeur correspondent respectivement à la clé de partition et au contenu de l’Artifact.metadata détermine la façon dont W&B interagit avec les différentes partitions d’artifact de votre projet.
L’objet metadata contient une clé nommée wandb_artifact_configuration, qui contient elle-même un objet imbriqué partitions.
L’objet partitions associe le nom de chaque partition à sa configuration. La configuration de chaque partition peut préciser comment en récupérer les données. Ces configurations peuvent contenir différentes clés, à savoir get, version et alias, selon les exigences de chaque partition.
Clés de configuration
get: La clégetspécifie le nom de l’objet W&B (Table, Image…) à partir duquel récupérer les données.version: La cléversionest utilisée lorsque vous souhaitez récupérer une version spécifique de l’Artifact.alias: La cléaliasvous permet d’obtenir l’Artifact via son alias.
"*" désigne toutes les partitions non configurées. Il fournit une configuration par défaut pour les partitions qui ne sont pas explicitement mentionnées dans l’objet partitions.
Par exemple,
default_table_name.
Configuration spécifique des partitions
Vous pouvez redéfinir la configuration générique pour des partitions spécifiques en fournissant leurs configurations propres à l’aide de leurs clés.
Par exemple,
yellow, les données seront récupérées à partir du tableau nommé custom_table_name, en remplaçant la configuration générique.
Gestion des versions et alias
Pour la gestion des versions et des alias, vous pouvez fournir des clés version et alias spécifiques dans votre configuration.
Pour les versions,
v0 de la partition d’Artifact orange.
Pour les alias,
default_table_name de la partition Artifact avec l’alias special_alias (appelé blue dans la configuration).
Utilisation avancée
Pour consulter l’utilisation avancée de l’intégration, veuillez vous référer aux exemples de code complets suivants :- Exemple d’utilisation avancée des ressources
- Exemple de job partitionné
- Lier un modèle au Model Registry
Utiliser W&B Launch
- Exécuter un ou plusieurs agents Launch dans votre instance Dagster.
- Exécuter des jobs Launch locaux dans votre instance Dagster.
- Exécuter des jobs Launch distants sur site ou dans le cloud.
Agents de Launch
@op importable nommé run_launch_agent. Il démarre un agent Launch et l’exécute en tant que processus de longue durée jusqu’à son arrêt manuel.
Les agents sont des processus qui interrogent régulièrement les files d’attente Launch et exécutent les jobs dans l’ordre (ou les transmettent à des services externes pour exécution).
Consultez la page Launch.
Vous pouvez également consulter dans Launchpad des descriptions utiles pour toutes les propriétés.

Jobs Launch
@op importable nommé run_launch_job. Il exécute votre job Launch.
Un job Launch est attribué à une file d’attente pour être exécuté. Vous pouvez créer une file d’attente ou utiliser celle par défaut. Assurez-vous qu’un agent actif surveille cette file d’attente. Vous pouvez exécuter un agent dans votre instance Dagster, mais vous pouvez aussi envisager d’utiliser un agent déployable dans Kubernetes.
Consultez la page Launch.
Vous pouvez également consulter des descriptions utiles pour toutes les propriétés dans Launchpad.

Bonnes pratiques
-
Utilisez l’IO Manager pour lire et écrire des Artifacts.
Évitez d’utiliser directement
Artifact.download()ouRun.log_artifact(). Ces méthodes sont prises en charge par l’intégration. À la place, renvoyez les données que vous souhaitez stocker dans l’Artifact et laissez l’intégration s’occuper du reste. Cette approche offre une meilleure traçabilité pour l’Artifact. - Ne construisez vous-même un objet Artifact que pour des cas d’usage complexes. Les objets Python et les objets W&B doivent être renvoyés depuis vos ops/assets. L’intégration se charge de l’empaquetage de l’Artifact. Pour les cas d’usage complexes, vous pouvez construire un Artifact directement dans un job Dagster. Nous vous recommandons de transmettre un objet Artifact à l’intégration pour enrichir les métadonnées, par exemple avec le nom et la version de l’intégration source, la version de Python utilisée, la version du protocole pickle, etc.
-
Ajoutez des fichiers, des répertoires et des références externes à vos Artifacts via les métadonnées.
Utilisez l’objet d’intégration
wandb_artifact_configurationpour ajouter des références à des fichiers, des répertoires ou des ressources externes (Amazon S3, GCS, HTTP…). Voir l’exemple avancé dans la section de configuration des Artifacts pour plus d’informations. - Utilisez un @asset plutôt qu’un @op lorsqu’un Artifact est produit. Les Artifacts sont des assets. Il est recommandé d’utiliser un asset lorsque Dagster le gère. Cela offre une meilleure observabilité dans le catalogue d’assets de Dagit.
- Utilisez un SourceAsset pour consommer un Artifact créé en dehors de Dagster. Cela vous permet de tirer parti de l’intégration pour lire des Artifacts créés en dehors de Dagster. Sinon, vous ne pouvez utiliser que les Artifacts créés par l’intégration.
- Utilisez W&B Launch pour orchestrer l’entraînement sur des ressources de calcul dédiées pour les grands modèles. Vous pouvez entraîner de petits modèles dans votre cluster Dagster et exécuter Dagster dans un cluster Kubernetes avec des nœuds GPU. Nous vous recommandons d’utiliser W&B Launch pour l’entraînement de grands modèles. Cela évitera de surcharger votre instance et vous donnera accès à des ressources de calcul plus adaptées.
- Lors du suivi des expériences dans Dagster, définissez votre ID de Run W&B sur la valeur de votre ID de Run Dagster. Nous vous recommandons de faire les deux : rendre la Run reprenable et définir l’ID de Run W&B sur l’ID de Run Dagster ou sur la chaîne de votre choix. En suivant cette recommandation, vous vous assurez que vos métriques W&B et vos W&B Artifacts sont stockés dans la même Run W&B lorsque vous entraînez des modèles dans Dagster.
- Collectez uniquement les données dont vous avez besoin avec get ou get_path pour les W&B Artifacts volumineux. Par défaut, l’intégration télécharge un Artifact entier. Si vous utilisez des artefacts très volumineux, vous pouvez choisir de ne collecter que les fichiers ou objets spécifiques dont vous avez besoin. Cela améliorera la rapidité et l’utilisation des ressources.
- Pour les objets Python, adaptez le module de pickling à votre cas d’utilisation. Par défaut, l’intégration W&B utilise le module standard pickle. Mais certains objets ne sont pas compatibles avec celui-ci. Par exemple, les fonctions contenant yield génèrent une erreur si vous essayez de les sérialiser avec pickle. W&B prend en charge d’autres modules de sérialisation basés sur Pickle (dill, cloudpickle, joblib).
