Passer au contenu principal
Créez une nouvelle version d’artefact à partir d’un seul run ou de manière collaborative avec des runs distribués. Vous pouvez également créer une nouvelle version d’artefact à partir d’une version précédente, appelée artefact incrémentiel.
Nous vous recommandons de créer un artefact incrémentiel lorsque vous devez appliquer des modifications à un sous-ensemble de fichiers d’un artefact, en particulier si l’artefact d’origine est nettement plus volumineux.

Créer de nouvelles versions d’artefact à partir de zéro

Il existe deux façons de créer une nouvelle version d’artefact : à partir d’un run unique ou de runs distribués. Elles se définissent comme suit :
  • Run unique : un seul run fournit toutes les données d’une nouvelle version. C’est le cas le plus courant, et il convient le mieux lorsque le run recrée entièrement les données nécessaires. Par exemple : générer des modèles enregistrés ou des prédictions de modèle dans un tableau pour analyse.
  • Runs distribués : un ensemble de runs fournit collectivement toutes les données d’une nouvelle version. Ce mode convient le mieux aux jobs distribués comportant plusieurs runs qui génèrent des données, souvent en parallèle. Par exemple : évaluer un modèle de manière distribuée et produire les prédictions.
W&B créera un nouvel artefact et lui attribuera un alias v0 si vous transmettez à l’API wandb.Artifact un nom qui n’existe pas dans votre projet. W&B calcule une somme de contrôle du contenu lorsque vous journalisez de nouveau dans le même artefact. Si l’artefact a été modifié, W&B enregistre une nouvelle version v1. W&B récupérera un artefact existant si vous transmettez à l’API wandb.Artifact un nom et un type d’artefact qui correspondent à un artefact existant dans votre projet. L’artefact récupéré aura une version supérieure à 1.
Comparaison des flux de travail des artefacts

Run unique

Enregistrez une nouvelle version d’un artefact avec une seule exécution qui produit tous les fichiers de l’artefact. Ce cas se présente lorsqu’une seule exécution produit tous les fichiers de l’artefact. Selon votre cas d’usage, sélectionnez l’un des onglets ci-dessous pour créer une nouvelle version d’artefact :
Utilisez wandb.Run.log_artifact() pour marquer explicitement un artefact comme sortie d’une exécution.Utilisez Artifact.save() comme méthode pratique. Si une exécution est active, W&B enregistre l’artefact dans cette exécution. Sinon, W&B crée automatiquement une exécution et y enregistre l’artefact.
Utilisez wandb.Run.log_artifact() pour associer explicitement l’artefact à une exécution :
  1. Créez une exécution avec wandb.init().
  2. Créez un nouvel artefact ou récupérez-en un existant avec wandb.Artifact.
  3. Ajoutez des fichiers à l’artefact avec wandb.Artifact.add_file().
  4. Enregistrez l’artefact dans l’exécution avec wandb.Run.log_artifact().

Runs distribués

Autorisez une collection de runs à collaborer sur une version avant de la valider. Cela contraste avec le mode à run unique décrit ci-dessus, dans lequel un seul run fournit toutes les données d’une nouvelle version.
  1. Chaque run de la collection doit connaître le même ID unique (appelé distributed_id) afin de collaborer sur la même version. Par défaut, s’il est présent, W&B utilise le group du run, tel que défini par wandb.init(group=GROUP), comme distributed_id.
  2. Un run final doit « valider » la version, ce qui verrouille définitivement son état.
  3. Utilisez upsert_artifact pour ajouter du contenu à l’artefact collaboratif et finish_artifact pour finaliser la validation.
Prenez l’exemple suivant. Différents runs (indiqués ci-dessous comme Run 1, Run 2 et Run 3) ajoutent chacun un fichier image différent au même artefact avec upsert_artifact.

Run 1

Run 2

Run 3

Doit s’exécuter une fois que Run 1 et Run 2 sont terminés. Le Run qui appelle wandb.Run.finish_artifact() peut inclure des fichiers dans l’artefact, mais ce n’est pas obligatoire.

Créer une nouvelle version d’artefact à partir d’une version existante

Créez une nouvelle version d’artefact en ajoutant, en modifiant ou en supprimant des fichiers d’une version d’artefact existante. W&B réindexe uniquement les fichiers qui ont changé. La version obtenue est appelée un artefact incrémentiel.
Gestion des versions d’artefacts incrémentiels
Pour créer un artefact incrémentiel, créez un brouillon à partir de n’importe quelle version d’artefact précédemment validée. Vous pouvez ensuite modifier ce brouillon à l’aide de méthodes telles que Artifact.add_file(), Artifact.add_dir() et Artifact.remove(). Pour obtenir la liste complète des méthodes, voir la documentation de référence de Artifact. Une fois le brouillon modifié, consignez-le ou enregistrez-le pour créer une nouvelle version d’artefact.
Vous pouvez créer un nouvel artefact à partir de zéro au lieu de créer un artefact incrémentiel. Toutefois, cette approche exige que tous les fichiers de l’artefact soient disponibles sur votre disque local. Avec un artefact incrémentiel, vous pouvez ajouter, supprimer ou modifier des fichiers individuels tout en réutilisant les fichiers inchangés de la version précédente de l’artefact.
Vous pouvez créer un artefact incrémentiel dans le cadre d’une seule exécution ou de plusieurs exécutions contribuant à la nouvelle version. Les sections suivantes décrivent comment créer un artefact incrémentiel dans chaque cas.

Run unique

Utilisez wandb.Run.use_artifact() lorsque le run en cours consomme l’artefact. W&B enregistre l’artefact comme entrée du run.
  1. Récupérez la version de l’artefact avec wandb.Run.use_artifact().
  2. Créez un brouillon avec Artifact.new_draft().
  3. Ajoutez, supprimez ou modifiez des entrées dans le brouillon.
  4. Consignez le brouillon avec wandb.Run.log_artifact() pour créer une nouvelle version d’artefact.

Runs distribués

Utilisez Artifact.upsert_artifact() et Artifact.finish_artifact() lorsque plusieurs exécutions ajoutent des fichiers à une même version d’artefact. L’exemple suivant montre comment créer une nouvelle version d’artefact à partir d’exécutions distribuées lorsque l’artefact est utilisé comme entrée pour les exécutions. La même approche s’applique lorsque l’artefact est récupéré directement avec l’API publique.
Utilisez Artifact.new_draft() lorsque vous modifiez une version d’artefact déjà validée.Utilisez Artifact.upsert_artifact() et Artifact.finish_artifact() lorsque plusieurs runs doivent collaborer sur une même version d’artefact avant sa finalisation.