> ## Documentation Index
> Fetch the complete documentation index at: https://wb-21fd5541-docs-2751.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Intégrez W&B à Dagster pour suivre les expériences de ML et gérer les pipelines de données avec journalisation et surveillance automatiques.

# Dagster

Utilisez Dagster et W\&B ensemble pour orchestrer vos pipelines MLOps et gérer vos assets ML. Dans vos flux de travail Dagster existants, vous pouvez suivre les expériences, gérer les données et exécuter des tâches d'entraînement. L'intégration W\&B prend en charge les tâches suivantes :

* Créer et utiliser un [artefact W\&B](/fr/models/artifacts).
* Utiliser et créer des Registered Models dans [W\&B Registry](/fr/models/registry).
* Exécuter des tâches d'entraînement sur une infrastructure dédiée à l'aide de [W\&B Launch](/fr/platform/launch).
* Utiliser le client [wandb](/fr/models/ref/python) dans les ops et les assets.

L'intégration W\&B pour Dagster fournit une ressource Dagster spécifique à W\&B et un IO Manager :

* `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 IO Manager Dagster utilisé pour consommer des artefacts W\&B.

Ce guide s'adresse aux praticiens du ML et aux ingénieurs plateforme qui utilisent déjà Dagster et souhaitent ajouter le suivi W\&B et la gestion des artefacts. Vous apprendrez à configurer Dagster, à créer et utiliser des artefacts W\&B dans les ops et les assets, à utiliser W\&B Launch et à appliquer les bonnes pratiques.

<div id="before-you-get-started">
  ## Avant de commencer
</div>

Vous aurez besoin des ressources suivantes pour utiliser Dagster dans W\&B :

* **Clé API W\&B**.
* **entité W\&B** : le nom de votre [équipe W\&B](/fr/platform/hosting/iam/org_team_struct).
* **projet W\&B** : le nom du projet dans lequel les [W\&B Runs](/fr/models/runs) sont stockés.

Pour trouver votre entité W\&B, consultez la page de profil de votre équipe dans W\&B. Vous pouvez utiliser un projet W\&B existant ou en créer un nouveau. Vous pouvez créer de nouveaux projets sur la page d’accueil de W\&B ou sur la page de profil de votre équipe. Si un projet n’existe pas, W\&B le crée automatiquement lorsque vous l’utilisez pour la première fois.

<div id="set-up-your-api-key">
  ### Configurer votre clé API
</div>

L’intégration s’authentifie auprès de W\&B à l’aide d’une clé API, que vous devez rendre disponible pour Dagster sous forme de variable d’environnement.

1. [Connectez-vous à W\&B](https://wandb.ai/login). Si vous utilisez W\&B Server, demandez à votre administrateur le nom d’hôte de l’instance.
2. Créez une clé API dans les [Paramètres utilisateur](https://wandb.ai/settings). Pour un environnement de production, utilisez un [compte de service](/fr/support/models/articles/what-is-a-service-account-and-why-is-it-) comme propriétaire de cette clé.
3. Définissez une variable d’environnement pour cette clé API : `export WANDB_API_KEY=<your_api_key>`.

Après avoir effectué ces étapes, Dagster peut lire votre clé API depuis l’environnement lorsqu’il charge `wandb_resource`.

Les exemples suivants montrent où spécifier votre clé API dans votre code Dagster. Renseignez votre entité et le nom de votre projet dans le dictionnaire imbriqué `wandb_config`. Vous pouvez transmettre des valeurs `wandb_config` différentes à différentes ops ou assets si vous souhaitez utiliser un autre projet W\&B. Pour plus d’informations sur les clés possibles que vous pouvez transmettre, voir la section [Configuration](#configuration).

<Tabs>
  <Tab title="Configuration pour @job">
    Exemple de configuration pour `@job` :

    ```python theme={null}
    # ajoutez ceci à votre config.yaml
    # vous pouvez également définir la configuration dans le Launchpad de Dagit ou dans JobDefinition.execute_in_process
    # Référence : https://docs.dagster.io/concepts/configuration/config-schema#specifying-runtime-configuration
    resources:
     wandb_config:
       config:
         entity: my_entity # remplacez ceci par votre entité W&B
         project: my_project # remplacez ceci par votre projet W&B


    @job(
       resource_defs={
           "wandb_config": make_values_resource(
               entity=str,
               project=str,
           ),
           "wandb_resource": wandb_resource.configured(
               {"api_key": {"env": "WANDB_API_KEY"}}
           ),
           "io_manager": wandb_artifacts_io_manager,
       }
    )
    def simple_job_example():
       my_op()
    ```
  </Tab>

  <Tab title="Configuration pour @repository avec des assets">
    Exemple de configuration pour `@repository` avec des assets :

    ```python theme={null}
    from dagster_wandb import wandb_artifacts_io_manager, wandb_resource
    from dagster import (
       load_assets_from_package_module,
       make_values_resource,
       repository,
       with_resources,
    )

    from . import assets

    @repository
    def my_repository():
       return [
           *with_resources(
               load_assets_from_package_module(assets),
               resource_defs={
                   "wandb_config": make_values_resource(
                       entity=str,
                       project=str,
                   ),
                   "wandb_resource": wandb_resource.configured(
                       {"api_key": {"env": "WANDB_API_KEY"}}
                   ),
                   "wandb_artifacts_manager": wandb_artifacts_io_manager.configured(
                       {"cache_duration_in_minutes": 60} # mettez les fichiers en cache pendant une heure seulement
                   ),
               },
               resource_config_by_key={
                   "wandb_config": {
                       "config": {
                           "entity": "my_entity", # remplacez ceci par votre entité W&B
                           "project": "my_project", # remplacez ceci par votre projet W&B
                       }
                   }
               },
           ),
       ]
    ```

    Cet exemple configure la durée du cache de l’IO Manager, contrairement à l’exemple pour `@job`.
  </Tab>
</Tabs>

<div id="configuration">
  ### Configuration
</div>

L’intégration fournit une ressource Dagster spécifique à W\&B ainsi qu’un IO Manager avec les options de configuration suivantes.

* `wandb_resource` : [ressource](https://docs.dagster.io/guides/build/external-resources) 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) : le serveur hôte de l’API que vous souhaitez utiliser. Requis uniquement si vous utilisez W\&B Server. Par défaut, l’hôte Public Cloud `https://api.wandb.ai` est utilisé.
* `wandb_artifacts_io_manager` : [IO Manager](https://docs.dagster.io/guides/build/io-managers) Dagster permettant d’utiliser des artefacts W\&B. Propriétés :
  * `base_dir` : (int, facultatif) Répertoire de base utilisé pour le stockage local et la mise en cache. Les artefacts W\&B et les journaux des W\&B Run sont écrits et lus dans ce répertoire. Par défaut, il utilise le répertoire `DAGSTER_HOME`.
  * `cache_duration_in_minutes` : (int, facultatif) Définit la durée de conservation des artefacts W\&B et des journaux des W\&B Run dans le stockage local. Le cache supprime uniquement les fichiers et répertoires qui n’ont pas été ouverts pendant cette durée. La purge du cache a lieu à la fin de l’exécution d’un IO Manager. Définissez cette valeur sur 0 pour désactiver complètement la mise en cache. La mise en cache améliore les performances lorsqu’un artefact 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 des hyperparamètres à comparer entre les runs. L’ID ne peut pas contenir les caractères spéciaux suivants : `/\#?%:..` Définissez le Run ID lorsque vous effectuez le suivi des expériences dans Dagster afin de permettre à l’IO Manager de reprendre le run. Par défaut, il est défini sur le Dagster Run ID, par exemple `7e4df022-1bf2-44b5-a383-bb852df4077e`.
  * `run_name` : (str, facultatif) 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 premiers caractères du Dagster Run ID]`. Par exemple, `dagster-run-7e4df022`.
  * `run_tags` : (list\[str], facultatif) : liste de chaînes qui alimente la liste des tags de ce run dans l’interface utilisateur. Les tags sont utiles pour regrouper des runs ou appliquer des libellés temporaires comme `baseline` ou `production`. Vous pouvez ajouter et supprimer des tags dans l’interface utilisateur, ou filtrer les runs pour n’afficher que ceux ayant un tag spécifique. Tout W\&B Run utilisé par l’intégration possède le tag `dagster_wandb`.

<div id="use-wb-artifacts">
  ## Utiliser les artefacts W\&B
</div>

Cette section explique comment l’intégration utilise un Dagster IO Manager pour faire le lien entre les artefacts W\&B et les ops et assets Dagster.

L’intégration avec un artefact W\&B repose sur un Dagster IO Manager.

Les [IO Managers](https://docs.dagster.io/guides/build/io-managers) sont des objets fournis par l’utilisateur, chargés de stocker la sortie d’un asset ou d’une op, puis de la charger comme entrée pour les assets ou ops en aval. Par exemple, un IO Manager peut stocker et charger des objets à partir de fichiers sur un système de fichiers.

L’intégration fournit un IO Manager pour les artefacts W\&B. Cela permet à n’importe quel `@op` ou `@asset` Dagster de créer et de consommer directement des artefacts W\&B. L’exemple suivant montre un `@asset` qui produit un artefact W\&B de type jeu de données contenant une liste Python.

```python theme={null}
@asset(
    name="my_artifact",
    metadata={
        "wandb_artifact_arguments": {
            "type": "dataset",
        }
    },
    io_manager_key="wandb_artifacts_manager",
)
def create_dataset():
    return [1, 2, 3] # ceci sera stocké dans un Artifact
```

Vous pouvez annoter vos `@op`, `@asset` et `@multi_asset` avec une configuration de métadonnées pour écrire des Artifacts. De même, vous pouvez également consommer des artefacts W\&B même s’ils ont été créés en dehors de Dagster.

<div id="write-wb-artifacts">
  ## Écrire des artefacts W\&B
</div>

Les sections suivantes décrivent comment produire des artefacts W\&B à partir d’opérations et d’assets Dagster, y compris les types de retour pris en charge et la manière de configurer l’Artifact résultant.

Avant de continuer, assurez-vous de bien comprendre comment utiliser les artefacts W\&B. Voir le [Guide sur les Artifacts](/fr/models/artifacts).

Pour écrire un artefact W\&B, renvoyez un objet depuis une fonction Python. W\&B prend en charge les objets suivants :

* Objets Python (`int`, `dict`, `list`, etc.)
* Objets W\&B (Table, Image, Graph, etc.)
* Objets artefact W\&B

Les exemples suivants montrent comment écrire des artefacts W\&B avec des assets Dagster (`@asset`) :

<Tabs>
  <Tab title="Objets Python">
    Tout ce qui peut être sérialisé avec le module [pickle](https://docs.python.org/3/library/pickle.html) est sérialisé avec pickle et ajouté à un Artifact créé par l'intégration. Le contenu est désérialisé lorsque vous lisez cet Artifact dans Dagster (voir [Lire les artifacts](#read-wb-artifacts) pour plus de détails).

    ```python theme={null}
    @asset(
        name="my_artifact",
        metadata={
            "wandb_artifact_arguments": {
                "type": "dataset",
            }
        },
        io_manager_key="wandb_artifacts_manager",
    )
    def create_dataset():
        return [1, 2, 3]
    ```

    W\&B prend en charge plusieurs modules de sérialisation basés sur Pickle ([pickle](https://docs.python.org/3/library/pickle.html), [dill](https://github.com/uqfoundation/dill), [cloudpickle](https://github.com/cloudpipe/cloudpickle), [joblib](https://github.com/joblib/joblib)). Vous pouvez également utiliser des formats de sérialisation plus avancés comme [ONNX](https://onnx.ai/) ou [PMML](https://en.wikipedia.org/wiki/Predictive_Model_Markup_Language). Pour en savoir plus, consultez la section [Serialization](#serialization-configuration).
  </Tab>

  <Tab title="Objet W&B">
    Tout objet W\&B, comme une [Table](/fr/models/ref/python/data-types/table) ou une [Image](/fr/models/ref/python/data-types/image), est ajouté à un Artifact créé par l'intégration. Cet exemple ajoute une Table à un Artifact :

    ```python theme={null}
    import wandb

    @asset(
        name="my_artifact",
        metadata={
            "wandb_artifact_arguments": {
                "type": "dataset",
            }
        },
        io_manager_key="wandb_artifacts_manager",
    )
    def create_dataset_in_table():
        return wandb.Table(columns=["a", "b", "c"], data=[[1, 2, 3]])
    ```
  </Tab>

  <Tab title="artefact W&B">
    Pour les cas d'utilisation complexes, il peut être nécessaire de créer votre propre objet Artifact. L'intégration fournit également des fonctionnalités supplémentaires utiles, comme l'enrichissement des métadonnées de part et d'autre de l'intégration.

    ```python theme={null}
    import wandb

    MY_ASSET = "my_asset"

    @asset(
        name=MY_ASSET,
        io_manager_key="wandb_artifacts_manager",
    )
    def create_artifact():
       artifact = wandb.Artifact(MY_ASSET, "dataset")
       table = wandb.Table(columns=["a", "b", "c"], data=[[1, 2, 3]])
       artifact.add(table, "my_table")
       return artifact
    ```
  </Tab>
</Tabs>

<div id="configuration">
  ### Configuration
</div>

Vous pouvez définir un dictionnaire de configuration appelé `wandb_artifact_configuration` pour `@op`, `@asset` et `@multi_asset`. Transmettez ce dictionnaire dans les arguments du décorateur en tant que métadonnées. Cette configuration est requise pour contrôler les lectures et écritures de l’IO Manager des artefacts W\&B.

Pour `@op`, il se trouve dans les métadonnées de sortie via l’argument de métadonnées [Out](https://docs.dagster.io/_apidocs/ops#dagster.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](https://docs.dagster.io/_apidocs/assets#dagster.AssetOut).

Les exemples de code ci-dessous montrent comment configurer un dictionnaire pour des calculs `@op`, `@asset` et `@multi_asset` :

<Tabs>
  <Tab title="Exemple pour @op">
    Exemple pour `@op` :

    ```python theme={null}
    @op(
       out=Out(
           metadata={
               "wandb_artifact_configuration": {
                   "name": "my_artifact",
                   "type": "dataset",
               }
           }
       )
    )
    def create_dataset():
       return [1, 2, 3]
    ```
  </Tab>

  <Tab title="Exemple pour @asset">
    Exemple pour `@asset` :

    ```python theme={null}
    @asset(
       name="my_artifact",
       metadata={
           "wandb_artifact_configuration": {
               "type": "dataset",
           }
       },
       io_manager_key="wandb_artifacts_manager",
    )
    def create_dataset():
       return [1, 2, 3]
    ```

    Vous n’avez pas besoin de transmettre un nom dans la configuration, car `@asset` en a déjà un. L’intégration définit le nom de l’artefact W\&B sur celui de l’asset.
  </Tab>

  <Tab title="Exemple pour @multi_asset">
    Exemple pour `@multi_asset` :

    ```python theme={null}
    @multi_asset(
       name="create_datasets",
       outs={
           "first_table": AssetOut(
               metadata={
                   "wandb_artifact_configuration": {
                       "type": "training_dataset",
                   }
               },
               io_manager_key="wandb_artifacts_manager",
           ),
           "second_table": AssetOut(
               metadata={
                   "wandb_artifact_configuration": {
                       "type": "validation_dataset",
                   }
               },
               io_manager_key="wandb_artifacts_manager",
           ),
       },
       group_name="my_multi_asset_group",
    )
    def create_datasets():
       first_table = wandb.Table(columns=["a", "b", "c"], data=[[1, 2, 3]])
       second_table = wandb.Table(columns=["d", "e"], data=[[4, 5]])

       return first_table, second_table
    ```
  </Tab>
</Tabs>

Les propriétés suivantes sont prises en charge :

* `name`: (str) nom lisible par l’humain pour cet artifact, que vous pouvez utiliser pour l’identifier dans l’UI ou y faire référence dans les appels `use_artifact`. Les noms peuvent contenir des lettres, des chiffres, des underscores, des traits d’union et des points. Le nom doit être unique à l’échelle d’un projet. Requis pour `@op`.
* `type`: (str) type de l’artifact, utilisé pour organiser et différencier les artifacts. Les types courants incluent les jeux de données ou les modèles, mais vous pouvez utiliser n’importe quelle chaîne contenant des lettres, des chiffres, des underscores, des traits d’union et des points. Requis lorsque la sortie n’est pas déjà un Artifact.
* `description`: (str) Texte libre qui décrit l’artifact. La description est interprétée en markdown dans l’UI, c’est donc un bon endroit pour les tableaux, les liens, etc.
* `aliases`: (list\[str]) Un tableau contenant un ou plusieurs alias que vous souhaitez appliquer à l’artefact W\&B. L’intégration ajoute également le tag "latest" à cette liste, qu’il soit défini ou non. Utilisez les alias pour gérer les versions des modèles et des jeux de données.
* [`add_dirs`](/fr/models/ref/python/experiments/artifact#add_dir): (list\[dict\[str, Any]]): Un tableau contenant la configuration de chaque répertoire local à inclure dans l’artefact W\&B.
* [`add_files`](/fr/models/ref/python/experiments/artifact#add_file): (list\[dict\[str, Any]]): Un tableau contenant la configuration de chaque fichier local à inclure dans l’artefact W\&B.
* [`add_references`](/fr/models/ref/python/experiments/artifact#add_reference): (list\[dict\[str, Any]]): Un tableau contenant la configuration de chaque référence externe à inclure dans l’artefact W\&B.
* `serialization_module`: (dict) Configuration du module de sérialisation à utiliser. Se référer à 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éthode `dump` de ce module. Par exemple, `{"compress": 3, "protocol": 4}`.

Exemple avancé :

```python theme={null}
@asset(
   name="my_advanced_artifact",
   metadata={
       "wandb_artifact_configuration": {
           "type": "dataset",
           "description": "My *Markdown* description",
           "aliases": ["my_first_alias", "my_second_alias"],
           "add_dirs": [
               {
                   "name": "My directory",
                   "local_path": "path/to/directory",
               }
           ],
           "add_files": [
               {
                   "name": "validation_dataset",
                   "local_path": "path/to/data.json",
               },
               {
                   "is_tmp": True,
                   "local_path": "path/to/temp",
               },
           ],
           "add_references": [
               {
                   "uri": "https://picsum.photos/200/300",
                   "name": "External HTTP reference to an image",
               },
               {
                   "uri": "s3://my-bucket/datasets/mnist",
                   "name": "External S3 reference",
               },
           ],
       }
   },
   io_manager_key="wandb_artifacts_manager",
)
def create_advanced_artifact():
   return [1, 2, 3]
```

L'asset est matérialisé avec des métadonnées de part et d'autre de l'intégration :

* 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, entre autres.
* Côté Dagster :
  * ID du run Dagster
  * W\&B Run : ID, nom, chemin, URL
  * artefact W\&B : ID, nom, type, version, taille, URL
  * Entité W\&B
  * Projet W\&B

L'image suivante montre les métadonnées issues de W\&B que l'intégration ajoute à l'asset Dagster. L'intégration transmet ces informations à Dagster.

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541-docs-2751/26y6qBOOzah48_IG/images/integrations/dagster_wb_metadata.png?fit=max&auto=format&n=26y6qBOOzah48_IG&q=85&s=2d737414269c0333c6ada51d10af1ee6" alt="UI de Dagster avec une vue détaillée d'un asset et des métadonnées W&B associées, y compris des références à un projet et à un run W&B" width="1999" height="1155" data-path="images/integrations/dagster_wb_metadata.png" />
</Frame>

L'image suivante montre comment la configuration fournie est enrichie avec des métadonnées dans l’artefact W\&B. Ces informations facilitent la reproductibilité et la maintenance. Elles ne sont pas disponibles sans l'intégration.

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541-docs-2751/26y6qBOOzah48_IG/images/integrations/dagster_inte_1.png?fit=max&auto=format&n=26y6qBOOzah48_IG&q=85&s=1fbacbb70579886d9e68a419321dfe6f" alt="Page de l’artefact W&B avec des métadonnées de configuration enrichies provenant de Dagster" width="1999" height="858" data-path="images/integrations/dagster_inte_1.png" />
</Frame>

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541-docs-2751/26y6qBOOzah48_IG/images/integrations/dagster_inte_2.png?fit=max&auto=format&n=26y6qBOOzah48_IG&q=85&s=663b654af0844b380f6d056e54ac0867" alt="Panneau de métadonnées de l’artefact W&B avec des détails de configuration supplémentaires provenant de Dagster" width="1999" height="737" data-path="images/integrations/dagster_inte_2.png" />
</Frame>

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541-docs-2751/26y6qBOOzah48_IG/images/integrations/dagster_inte_3.png?fit=max&auto=format&n=26y6qBOOzah48_IG&q=85&s=a960d59df6009277bbe9e51d068c887a" alt="Vue de l’artefact W&B avec des champs de métadonnées de configuration supplémentaires enrichis depuis Dagster" width="1999" height="575" data-path="images/integrations/dagster_inte_3.png" />
</Frame>

<Note>
  Si vous utilisez un vérificateur de types statique comme mypy, importez l’objet de définition du type de configuration comme suit :

  ```python theme={null}
  from dagster_wandb import WandbArtifactConfiguration
  ```
</Note>

<div id="use-partitions">
  ### Utiliser les partitions
</div>

L’intégration prend directement en charge les [partitions Dagster](https://docs.dagster.io/guides/build/partitions-and-backfills).

Voici un exemple de partitionnement avec `DailyPartitionsDefinition` :

```python theme={null}
@asset(
    partitions_def=DailyPartitionsDefinition(start_date="2023-01-01", end_date="2023-02-01"),
    name="my_daily_partitioned_asset",
    compute_kind="wandb",
    metadata={
        "wandb_artifact_configuration": {
            "type": "dataset",
        }
    },
)
def create_my_daily_partitioned_asset(context):
    partition_key = context.asset_partition_key_for_output()
    context.log.info(f"Creating partitioned asset for {partition_key}")
    return random.randint(0, 100)
```

Ce code produit un artefact W\&B pour chaque partition. Consultez les Artifacts dans le panneau Artifact (UI), sous le nom de l’asset, avec la clé de partition ajoutée. Par exemple, `my_daily_partitioned_asset.2023-01-01`, `my_daily_partitioned_asset.2023-01-02` ou `my_daily_partitioned_asset.2023-01-03`. Les assets partitionnés sur plusieurs dimensions affichent chaque dimension dans un format délimité par des points. Par exemple, `my_asset.car.blue`.

<Warning>
  L’intégration ne permet pas de matérialiser plusieurs partitions au sein d’un même run. Vous devez effectuer plusieurs runs pour matérialiser vos assets. Vous pouvez le faire dans Dagit lorsque vous matérialisez vos assets.

  <Frame>
    <img src="https://mintcdn.com/wb-21fd5541-docs-2751/26y6qBOOzah48_IG/images/integrations/dagster_multiple_runs.png?fit=max&auto=format&n=26y6qBOOzah48_IG&q=85&s=51be952cb6263633428ed10c2e8983d3" alt="Interface Dagster avec plusieurs runs pour des assets partitionnés, chaque partition correspondant à un run distinct" width="1146" height="986" data-path="images/integrations/dagster_multiple_runs.png" />
  </Frame>
</Warning>

<div id="advanced-usage">
  #### Utilisation avancée
</div>

Pour une utilisation avancée, voir les exemples suivants :

* [job partitionné](https://github.com/dagster-io/dagster/blob/master/examples/with_wandb/with_wandb/ops/partitioned_job.py)
* [asset partitionné simple](https://github.com/wandb/dagster/blob/master/examples/with_wandb/with_wandb/assets/simple_partitions_example.py)
* [asset partitionné multi-dimensionnel](https://github.com/wandb/dagster/blob/master/examples/with_wandb/with_wandb/assets/multi_partitions_example.py)
* [Utilisation avancée du partitionnement](https://github.com/wandb/dagster/blob/master/examples/with_wandb/with_wandb/assets/advanced_partitions_example.py)

<div id="read-wb-artifacts">
  ## Lire Artifacts W\&B
</div>

Maintenant que vous pouvez écrire des Artifacts depuis Dagster, les sections suivantes décrivent comment les utiliser comme entrées pour des ops et assets en aval.

La lecture des Artifacts W\&B est similaire à leur écriture. Un dictionnaire de configuration appelé `wandb_artifact_configuration` peut être défini sur un `@op` ou un `@asset`. La seule différence est que la configuration doit être définie 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](https://docs.dagster.io/_apidocs/ops#dagster.In). Vous devez
indiquer explicitement le nom de l’artefact W\&B.

Pour `@asset`, elle se trouve dans les métadonnées d’entrée via l’argument de métadonnées [Asset](https://docs.dagster.io/_apidocs/assets#dagster.AssetIn) In. Vous ne devez pas transmettre de nom d’artefact W\&B, car le nom de l’asset parent doit correspondre.

Si vous souhaitez créer une dépendance sur un Artifact créé en dehors de l’intégration, vous devrez utiliser [SourceAsset](https://docs.dagster.io/_apidocs/assets#dagster.SourceAsset). Il lira toujours la dernière version de cet asset.

Les exemples suivants montrent comment lire un Artifact à partir de différents ops.

<Tabs>
  <Tab title="Depuis un @op">
    Lecture d’un artifact à partir d’un `@op`

    ```python theme={null}
    @op(
       ins={
           "artifact": In(
               metadata={
                   "wandb_artifact_configuration": {
                       "name": "my_artifact",
                   }
               }
           )
       },
       io_manager_key="wandb_artifacts_manager"
    )
    def read_artifact(context, artifact):
       context.log.info(artifact)
    ```
  </Tab>

  <Tab title="Créé par un autre @asset">
    Lecture d’un artifact créé par un autre `@asset`

    ```python theme={null}
    @asset(
       name="my_asset",
       ins={
           "artifact": AssetIn(
               # si vous ne voulez pas renommer l’argument d’entrée, vous pouvez supprimer 'key'
               key="parent_dagster_asset_name",
               input_manager_key="wandb_artifacts_manager",
           )
       },
    )
    def read_artifact(context, artifact):
       context.log.info(artifact)
    ```
  </Tab>

  <Tab title="Artifact créé en dehors de Dagster">
    Lecture d’un Artifact créé en dehors de Dagster :

    ```python theme={null}
    my_artifact = SourceAsset(
       key=AssetKey("my_artifact"),  # le nom de l’Artifact W&B
       description="Artifact created outside Dagster",
       io_manager_key="wandb_artifacts_manager",
    )


    @asset
    def read_artifact(context, my_artifact):
       context.log.info(my_artifact)
    ```
  </Tab>
</Tabs>

<div id="configuration">
  ### Configuration
</div>

La configuration suivante indique ce que l’IO Manager doit collecter et fournir en entrée aux fonctions décorées. Les modes de lecture suivants sont pris en charge :

* Pour obtenir un objet nommé contenu dans un Artifact, utilisez `get` :

```python theme={null}
@asset(
   ins={
       "table": AssetIn(
           key="my_artifact_with_table",
           metadata={
               "wandb_artifact_configuration": {
                   "get": "my_table",
               }
           },
           input_manager_key="wandb_artifacts_manager",
       )
   }
)
def get_table(context, table):
   context.log.info(table.get_column("a"))
```

* Pour obtenir le chemin local d’un fichier téléchargé présent dans un Artifact, utilisez `get_path` :

```python theme={null}
@asset(
   ins={
       "path": AssetIn(
           key="my_artifact_with_file",
           metadata={
               "wandb_artifact_configuration": {
                   "get_path": "name_of_file",
               }
           },
           input_manager_key="wandb_artifacts_manager",
       )
   }
)
def get_path(context, path):
   context.log.info(path)
```

* Pour obtenir l’objet Artifact dans son intégralité (avec le contenu téléchargé localement) :

```python theme={null}
@asset(
   ins={
       "artifact": AssetIn(
           key="my_artifact",
           input_manager_key="wandb_artifacts_manager",
       )
   },
)
def get_artifact(context, artifact):
   context.log.info(artifact.name)
```

Les propriétés suivantes sont prises en charge :

* `get`: (str) Obtient l'objet W\&B correspondant au nom relatif de l'artifact.
* `get_path`: (str) Obtient le chemin du fichier correspondant au nom relatif de l'artifact.

<div id="serialization-configuration">
  ### Configuration de la sérialisation
</div>

Par défaut, l’intégration utilise le module standard [pickle](https://docs.python.org/3/library/pickle.html), 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 également en charge d’autres modules de sérialisation basés sur Pickle ([dill](https://github.com/uqfoundation/dill), [cloudpickle](https://github.com/cloudpipe/cloudpickle), [joblib](https://github.com/joblib/joblib)). Vous pouvez aussi utiliser des méthodes de sérialisation plus avancées comme [ONNX](https://onnx.ai/) ou [PMML](https://en.wikipedia.org/wiki/Predictive_Model_Markup_Language), en renvoyant une chaîne sérialisée ou en créant directement un Artifact. Le choix le plus adapté dépend de votre cas d’usage. Veuillez vous référer à la documentation disponible sur ce sujet.

<div id="pickle-based-serialization-modules">
  ### Modules de sérialisation basés sur pickle
</div>

<Warning>
  Le pickling est réputé non sécurisé. Si la sécurité est un enjeu, utilisez uniquement des objets W\&B. Signez vos données et stockez les clés de hachage dans vos propres systèmes. Pour des cas d’usage plus complexes, contactez l’assistance W\&B.
</Warning>

Vous pouvez configurer la sérialisation utilisée via le dictionnaire `serialization_module` dans `wandb_artifact_configuration`. Assurez-vous que le module est disponible sur la machine exécutant Dagster.

L’intégration détecte automatiquement quel module de sérialisation utiliser lorsque vous lirez cet Artifact.

Les modules pris en charge sont `pickle`, `dill`, `cloudpickle` et `joblib`.

Voici un exemple simplifié qui crée un « modèle » sérialisé avec joblib, puis l’utilise pour l’inférence.

```python theme={null}
@asset(
    name="my_joblib_serialized_model",
    compute_kind="Python",
    metadata={
        "wandb_artifact_configuration": {
            "type": "model",
            "serialization_module": {
                "name": "joblib"
            },
        }
    },
    io_manager_key="wandb_artifacts_manager",
)
def create_model_serialized_with_joblib():
    # Ce n'est pas un vrai modèle ML, mais cela ne serait pas possible avec le module pickle
    return lambda x, y: x + y

@asset(
    name="inference_result_from_joblib_serialized_model",
    compute_kind="Python",
    ins={
        "my_joblib_serialized_model": AssetIn(
            input_manager_key="wandb_artifacts_manager",
        )
    },
    metadata={
        "wandb_artifact_configuration": {
            "type": "results",
        }
    },
    io_manager_key="wandb_artifacts_manager",
)
def use_model_serialized_with_joblib(
    context: OpExecutionContext, my_joblib_serialized_model
):
    inference_result = my_joblib_serialized_model(1, 2)
    context.log.info(inference_result)  # Affiche : 3
    return inference_result
```

<div id="advanced-serialization-formats-onnx-pmml">
  ### Formats de sérialisation avancés (ONNX, PMML)
</div>

Les formats de fichier d’échange comme ONNX et PMML sont courants. L’intégration prend en charge ces formats, mais cela demande un peu plus de travail qu’une sérialisation basée sur Pickle.

Vous pouvez utiliser ces formats avec l’une des méthodes suivantes :

* Convertissez votre modèle dans le format sélectionné, puis renvoyez sa représentation sous forme de chaîne comme s’il s’agissait d’un objet Python ordinaire. L’intégration sérialise 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`.

Voici un exemple de modèle Scikit-learn sérialisé avec ONNX.

```python theme={null}
import numpy
import onnxruntime as rt
from skl2onnx import convert_sklearn
from skl2onnx.common.data_types import FloatTensorType
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split

from dagster import AssetIn, AssetOut, asset, multi_asset

@multi_asset(
    compute_kind="Python",
    outs={
        "my_onnx_model": AssetOut(
            metadata={
                "wandb_artifact_configuration": {
                    "type": "model",
                }
            },
            io_manager_key="wandb_artifacts_manager",
        ),
        "my_test_set": AssetOut(
            metadata={
                "wandb_artifact_configuration": {
                    "type": "test_set",
                }
            },
            io_manager_key="wandb_artifacts_manager",
        ),
    },
    group_name="onnx_example",
)
def create_onnx_model():
    # Inspiré de https://onnx.ai/sklearn-onnx/

    # Entraîner un modèle.
    iris = load_iris()
    X, y = iris.data, iris.target
    X_train, X_test, y_train, y_test = train_test_split(X, y)
    clr = RandomForestClassifier()
    clr.fit(X_train, y_train)

    # Convertir au format ONNX
    initial_type = [("float_input", FloatTensorType([None, 4]))]
    onx = convert_sklearn(clr, initial_types=initial_type)

    # Écrire les Artifacts (modèle + test_set)
    return onx.SerializeToString(), {"X_test": X_test, "y_test": y_test}

@asset(
    name="experiment_results",
    compute_kind="Python",
    ins={
        "my_onnx_model": AssetIn(
            input_manager_key="wandb_artifacts_manager",
        ),
        "my_test_set": AssetIn(
            input_manager_key="wandb_artifacts_manager",
        ),
    },
    group_name="onnx_example",
)
def use_onnx_model(context, my_onnx_model, my_test_set):
    # Inspiré de https://onnx.ai/sklearn-onnx/

    # Calculer la prédiction avec ONNX Runtime
    sess = rt.InferenceSession(my_onnx_model)
    input_name = sess.get_inputs()[0].name
    label_name = sess.get_outputs()[0].name
    pred_onx = sess.run(
        [label_name], {input_name: my_test_set["X_test"].astype(numpy.float32)}
    )[0]
    context.log.info(pred_onx)
    return pred_onx
```

### Utiliser des partitions

L’intégration prend directement en charge les [partitions Dagster](https://docs.dagster.io/guides/build/partitions-and-backfills).

Vous pouvez lire une, plusieurs ou toutes les partitions d’un asset de manière sélective.

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.

<Tabs>
  <Tab title="Lire toutes les partitions">
    Cet exemple 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.

    ```python theme={null}
    @asset(
        compute_kind="wandb",
        ins={"my_daily_partitioned_asset": AssetIn()},
        output_required=False,
    )
    def read_all_partitions(context, my_daily_partitioned_asset):
        for partition, content in my_daily_partitioned_asset.items():
            context.log.info(f"partition={partition}, content={content}")
    ```
  </Tab>

  <Tab title="Lire des partitions spécifiques">
    La configuration `partition_mapping` de `AssetIn` vous permet de sélectionner des partitions spécifiques. Dans ce cas, l’exemple utilise `TimeWindowPartitionMapping`.

    ```python theme={null}
    @asset(
        partitions_def=DailyPartitionsDefinition(start_date="2023-01-01", end_date="2023-02-01"),
        compute_kind="wandb",
        ins={
            "my_daily_partitioned_asset": AssetIn(
                partition_mapping=TimeWindowPartitionMapping(start_offset=-1)
            )
        },
        output_required=False,
    )
    def read_specific_partitions(context, my_daily_partitioned_asset):
        for partition, content in my_daily_partitioned_asset.items():
            context.log.info(f"partition={partition}, content={content}")
    ```
  </Tab>
</Tabs>

L’objet de configuration `metadata` détermine comment W\&B interagit avec les différentes partitions d’artefact W\&B dans 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 récupérer ses données. Ces configurations peuvent contenir différentes clés, à savoir `get`, `version` et `alias`, selon les exigences de chaque partition.

<div id="configuration-keys">
  #### Clés de configuration
</div>

Les clés de configuration suivantes sont prises en charge :

* `get` : La clé `get` spécifie le nom de l’objet W\&B (Table, Image, etc.) à partir duquel récupérer les données.
* `version` : Utilisez la clé `version` lorsque vous souhaitez récupérer une version spécifique de l’Artifact.
* `alias` : La clé `alias` vous permet d’obtenir l’Artifact à l’aide de son alias.

<div id="wildcard-configuration">
  #### Configuration générique
</div>

Le caractère générique `"*"` 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 :

```python theme={null}
"*": {
    "get": "default_table_name",
},
```

Cette configuration signifie que, pour toutes les partitions non configurées explicitement, les données sont récupérées depuis le tableau nommé `default_table_name`.

<div id="specific-partition-configuration">
  #### Configuration spécifique de partition
</div>

Vous pouvez remplacer la configuration générique pour certaines partitions en fournissant leur propre configuration à l’aide de leur clé.

Par exemple :

```python theme={null}
"yellow": {
    "get": "custom_table_name",
},
```

Cette configuration signifie que, pour la partition nommée `yellow`, les données sont récupérées depuis le tableau nommé `custom_table_name`, ce qui remplace la configuration générique.

<div id="versioning-and-aliasing">
  #### Gestion des versions et des alias
</div>

À des fins de gestion des versions et des alias, vous pouvez spécifier des clés `version` et `alias` spécifiques dans votre configuration.

Pour les versions :

```python theme={null}
"orange": {
    "version": "v0",
},
```

Cette configuration récupérera les données de la partition de l’Artifact `orange` en version `v0`.

Pour les alias :

```python theme={null}
"blue": {
    "alias": "special_alias",
},
```

Cette configuration récupère des données depuis le tableau `default_table_name` de la partition Artifact avec l'alias `special_alias` (désigné par `blue` dans la configuration).

### Utilisation avancée

Pour consulter des cas d’utilisation avancée de l’intégration, se référer aux exemples de code complets suivants :

* [Exemple d’utilisation avancée pour les assets](https://github.com/dagster-io/dagster/blob/master/examples/with_wandb/with_wandb/assets/advanced_example.py)
* [Exemple de job partitionné](https://github.com/dagster-io/dagster/blob/master/examples/with_wandb/with_wandb/ops/partitioned_job.py)
* [Associer un modèle au registre de modèles](https://github.com/dagster-io/dagster/blob/master/examples/with_wandb/with_wandb/assets/model_registry_example.py)

<div id="use-wb-launch">
  ## Utiliser W\&B Launch
</div>

Les sections suivantes décrivent comment combiner l’intégration Dagster avec W\&B Launch pour exécuter des tâches d'entraînement sur du calcul dédié, localement ou à distance.

<Warning>
  Produit bêta en cours de développement actif.
  Launch vous intéresse ? Contactez l’équipe en charge de votre compte pour discuter de votre participation au programme pilote client de W\&B Launch.
  Les clients pilotes doivent utiliser AWS EKS ou SageMaker pour être éligibles au programme bêta. D’autres plateformes sont prévues.
</Warning>

Avant de continuer, assurez-vous de bien comprendre comment utiliser W\&B Launch. Voir le [Guide de Launch](/fr/platform/launch).

L’intégration Dagster permet de :

* 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 à distance, sur site ou dans le cloud.

<div id="launch-agents">
  ### agent Launch
</div>

L’intégration fournit un `@op` importable appelé `run_launch_agent`. Il démarre un agent Launch et l’exécute comme un processus de longue durée jusqu’à ce qu’il soit arrêté manuellement.

Les agents sont des processus qui interrogent les files d’attente de Launch et exécutent les jobs dans l’ordre (ou les transmettent à des services externes pour exécution).

Référez-vous à la [page Launch](/fr/platform/launch).

Vous pouvez également consulter les descriptions de toutes les propriétés dans Launchpad.

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541-docs-2751/26y6qBOOzah48_IG/images/integrations/dagster_launch_agents.png?fit=max&auto=format&n=26y6qBOOzah48_IG&q=85&s=29a6574b25ccebc6cd9767b5db19fde7" alt="Interface W&B Launchpad avec les options de configuration de l’agent et les descriptions pour l’intégration Dagster" width="1999" height="1265" data-path="images/integrations/dagster_launch_agents.png" />
</Frame>

Exemple :

```python theme={null}
# ajoutez ceci à votre config.yaml
# vous pouvez également définir la configuration dans le Launchpad de Dagit ou dans JobDefinition.execute_in_process
# Référence : https://docs.dagster.io/concepts/configuration/config-schema#specifying-runtime-configuration
resources:
 wandb_config:
   config:
     entity: my_entity # remplacez par votre entité W&B
     project: my_project # remplacez par votre projet W&B
ops:
 run_launch_agent:
   config:
     max_jobs: -1
     queues: 
       - my_dagster_queue

from dagster_wandb.launch.ops import run_launch_agent
from dagster_wandb.resources import wandb_resource

from dagster import job, make_values_resource

@job(
   resource_defs={
       "wandb_config": make_values_resource(
           entity=str,
           project=str,
       ),
       "wandb_resource": wandb_resource.configured(
           {"api_key": {"env": "WANDB_API_KEY"}}
       ),
   },
)
def run_launch_agent_example():
   run_launch_agent()
```

<div id="launch-jobs">
  ### Jobs Launch
</div>

L’intégration fournit un `@op` importable appelé `run_launch_job`. Il exécute votre job Launch.

Pour être exécuté, un job Launch doit être assigné à une file d’attente. Vous pouvez créer une file d’attente ou utiliser celle par défaut. Assurez-vous qu’un agent actif écoute cette file d’attente. Vous pouvez exécuter un agent dans votre instance Dagster, ou envisager d’utiliser un agent déployable sur Kubernetes.

Consultez la [page Launch](/fr/platform/launch).

Vous pouvez également consulter dans Launchpad des descriptions pour toutes les propriétés.

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541-docs-2751/26y6qBOOzah48_IG/images/integrations/dagster_launch_jobs.png?fit=max&auto=format&n=26y6qBOOzah48_IG&q=85&s=a2f2059a0a3edee0361828ae7f2a0fce" alt="Interface W&B Launchpad avec des options de configuration de job et des descriptions pour l’intégration Dagster" width="1999" height="653" data-path="images/integrations/dagster_launch_jobs.png" />
</Frame>

Exemple :

```python theme={null}
# ajoutez ceci à votre config.yaml
# vous pouvez également définir la configuration dans le Launchpad de Dagit ou via JobDefinition.execute_in_process
# Référence : https://docs.dagster.io/concepts/configuration/config-schema#specifying-runtime-configuration
resources:
 wandb_config:
   config:
     entity: my_entity # remplacez par votre entité W&B
     project: my_project # remplacez par votre projet W&B
ops:
 my_launched_job:
   config:
     entry_point:
       - python
       - train.py
     queue: my_dagster_queue
     uri: https://github.com/wandb/example-dagster-integration-with-launch


from dagster_wandb.launch.ops import run_launch_job
from dagster_wandb.resources import wandb_resource

from dagster import job, make_values_resource


@job(resource_defs={
       "wandb_config": make_values_resource(
           entity=str,
           project=str,
       ),
       "wandb_resource": wandb_resource.configured(
           {"api_key": {"env": "WANDB_API_KEY"}}
       ),
   },
)
def run_launch_job_example():
   run_launch_job.alias("my_launched_job")() # on renomme le job avec un alias
```

<div id="best-practices">
  ## Bonnes pratiques
</div>

Les recommandations suivantes vous aident à tirer le meilleur parti de l’intégration une fois qu’elle est opérationnelle de bout en bout.

<div id="use-the-io-manager-to-read-and-write-artifacts">
  ### Utilisez l’IO Manager pour lire et écrire des Artifacts
</div>

Évitez d’utiliser directement [`Artifact.download()`](/fr/models/ref/python/experiments/artifact#download) ou [`Run.log_artifact()`](/fr/models/ref/python/experiments/run#log_artifact). Ces méthodes sont prises en charge par l’intégration. Renvoyez plutôt les données que vous souhaitez stocker dans l’Artifact et laissez l’intégration faire le reste. Cette approche offre une meilleure traçabilité pour l’Artifact.

<div id="only-build-an-artifact-object-yourself-for-complex-use-cases">
  ### Ne créez vous-même un objet Artifact que pour des cas d’usage complexes
</div>

Renvoyez des objets Python et des objets W\&B depuis vos ops et assets. L’intégration se charge d’assembler l’Artifact.
Pour les cas d’usage complexes, vous pouvez créer un Artifact directement dans un job Dagster. Transmettez 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.

<div id="add-files-directories-and-external-references-to-your-artifacts-through-the-metadata">
  ### Ajoutez des fichiers, des répertoires et des références externes à vos Artifacts via les métadonnées
</div>

Utilisez l’objet d’intégration `wandb_artifact_configuration` pour ajouter des fichiers, des répertoires ou des références externes (Amazon S3, GCS, HTTP, etc.). Voir l’exemple avancé dans la [section de configuration de l’Artifact](#configuration-1) pour plus d’informations.

<div id="use-an-asset-instead-of-an-op-when-an-artifact-is-produced">
  ### Utilisez un @asset plutôt qu’un @op lorsqu’un Artifact est produit
</div>

Les Artifacts sont des assets. Utilisez un asset lorsque Dagster gère cet asset. Cela offre une meilleure observabilité dans le catalogue d’assets de Dagit.

<div id="use-a-sourceasset-to-consume-an-artifact-created-outside-dagster">
  ### Utilisez un SourceAsset pour consommer un Artifact créé en dehors de Dagster
</div>

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.

<div id="use-wb-launch-to-orchestrate-training-on-dedicated-compute-for-large-models">
  ### Utilisez W\&B Launch pour orchestrer l’entraînement sur des ressources de calcul dédiées pour les grands modèles
</div>

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. Utilisez W\&B Launch pour l’entraînement de grands modèles. Cela évite de surcharger votre instance et donne accès à des ressources de calcul plus adaptées.

<div id="set-your-wb-run-id-to-the-value-of-your-dagster-run-id-when-experiment-tracking-within-dagster">
  ### 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
</div>

Rendez le [Run reprenable](/fr/models/runs/resuming) et définissez 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 Artifacts W\&B sont stockés dans le même Run W\&B lorsque vous entraînez des modèles dans Dagster.

Définissez soit l’ID de run W\&B sur l’ID de run Dagster :

```python theme={null}
wandb.init(
    id=context.run_id,
    resume="allow",
    ...
)
```

Ou choisissez votre propre ID de run W\&B et renseignez-le dans la configuration de l’IO Manager :

```python theme={null}
wandb.init(
    id="my_resumable_run_id",
    resume="allow",
    ...
)

@job(
   resource_defs={
       "io_manager": wandb_artifacts_io_manager.configured(
           {"wandb_run_id": "my_resumable_run_id"}
       ),
   }
)
```

<div id="only-collect-data-you-need-with-get-or-get_path-for-large-wb-artifacts">
  ### Ne collectez que les données dont vous avez besoin avec get ou get\_path pour les W\&B Artifacts volumineux
</div>

Par défaut, l’intégration télécharge l’intégralité d’un Artifact. Si vous utilisez des artifacts volumineux, vous pouvez ne collecter que les fichiers ou objets spécifiques dont vous avez besoin. Cela améliorera la vitesse et l’utilisation des ressources.

<div id="for-python-objects-adapt-the-pickling-module-to-your-use-case">
  ### Pour les objets Python, adaptez le module de pickling à votre cas d’utilisation.
</div>

Par défaut, l’intégration W\&B utilise le module standard [pickle](https://docs.python.org/3/library/pickle.html). Mais certains objets ne sont pas compatibles avec celui-ci. Par exemple, les fonctions qui utilisent 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](https://github.com/uqfoundation/dill), [cloudpickle](https://github.com/cloudpipe/cloudpickle), [joblib](https://github.com/joblib/joblib)).

Vous pouvez également utiliser des formats de sérialisation plus avancés comme [ONNX](https://onnx.ai/) ou [PMML](https://en.wikipedia.org/wiki/Predictive_Model_Markup_Language) en renvoyant une chaîne sérialisée ou en créant directement un Artifact. Le bon choix dépend de votre cas d’utilisation ; reportez-vous à la littérature disponible sur ce sujet.
