Passer au contenu principal
Créez, mettez à jour, téléchargez et gérez les W&B Artifacts pour gérer les versions des données.

Créer et journaliser un artifact

"""
Crée et enregistre un artifact W&B. Commencez par créer un
objet artifact. Ensuite, ajoutez des fichiers, des répertoires ou des références externes à l'artifact.
Enfin, enregistrez l'artifact dans un run W&B.
"""
import wandb

# Créer un objet artifact
artifact = wandb.Artifact(name="<artifact_name>", type="<artifact_type>")

# Ajouter un ou plusieurs fichiers à l'artifact
artifact.add_file(local_path="data/file1.csv")

# Ajouter récursivement un répertoire à l'artifact
artifact.add_dir(local_path="data/directory")

# Ajouter une référence URI externe à l'artifact
artifact.add_reference(uri="s3://my-bucket/path/to/data.csv")

with wandb.init(project="<project>") as run:
    # Le code d'entraînement et de logging se place ici

    # Exemple d'enregistrement d'un artifact
    run.log_artifact(artifact)

Suivre un artifact externe en ajoutant une référence au chemin d’un bucket de stockage cloud

"""
Suit un artifact externe en ajoutant une référence à un chemin de bucket de stockage cloud.
"""

import wandb

# Créer un objet artifact
artifact = wandb.Artifact(name="<artifact_name>", type="<artifact_type>")

# Ajouter une référence au chemin du bucket
artifact.add_reference(uri = "uri/to/your/bucket/path")

# Initialiser un run W&B
with wandb.init(project="<project>") as run:

  # Journaliser les métadonnées de l'artifact
  run.log_artifact(artifact)

Supprimer une version spécifique d’un artifact associée à un run

"""
Supprime une version spécifique d'un artifact d'un run W&B. Définissez delete_aliaes sur `True` 
si l'artifact possède un alias associé.
"""
import wandb

# Initialiser l'API W&B
api = wandb.Api()

# Obtenir le run par son chemin. Composé de <entity>/<project>/<run_path>
runs = api.run("<entity>/<project>/<run_path>")

# wandb.Api().Run.logged_artifacts() renvoie une liste de versions d'artifacts
# composée du nom de l'artifact et de la version <artifact_name>:v<version_number>
for artifact_version in runs.logged_artifacts():
    # Récupère les deux derniers caractères du nom de la version de l'artifact (str),
    # qui correspondent au numéro de version
    if artifact_version.name[-2:] == "v"+ "<version_number>":
        artifact_version.delete(delete_aliases=True)

Supprimer une collection d’artifact

"""
Supprimer une artifact collection de W&B.
"""
import wandb

# Initialiser l'API W&B
api = wandb.Api()

# Supprimer une artifact collection par son nom et son type
# Format du nom : <entity>/<project>/<run_path>
collection = api.artifact_collection(
    name="<entity>/<project>/<run_path>",
    type_name="<artifact_type>"
)

collection.delete()

Télécharger des fichiers spécifiques ou des sous-dossiers à partir d’Artifacts

"""
Télécharge des fichiers spécifiques ou des sous-dossiers depuis les W&B Artifacts. La même
logique s'applique aux artifacts externes.
"""
import wandb

with wandb.init(project="<project>") as run:
    # Indiquer l'artifact à utiliser. Le format est "nom:alias"
    artifact = run.use_artifact("<artifact_name>:<alias>")

    # Télécharger un fichier spécifique ou un sous-dossier
    artifact.download(path_prefix="<file_name>") # télécharge uniquement le fichier ou le dossier spécifié

Télécharger des fichiers ou des artifacts complets

"""
Télécharge des fichiers ou des artifacts entiers depuis W&B. La même
logique s'applique aux artifacts externes.
"""

import wandb    

with wandb.init(project="<project>") as run:
    # Indiquer l'artifact à utiliser. Le format est "nom:alias"
    artifact = run.use_artifact("<artifact_name>:<alias>")

    # Télécharge le fichier depuis l'artifact au chemin nom
    # Si artifact.add_reference() a été utilisé, renvoie l'URL de référence
    entry = artifact.get_entry("<file_name>")

    # Télécharger l'artifact entier
    datadir = artifact.download()

Ajouter un ou plusieurs alias à un artifact au moment de sa journalisation

"""
Ajouter un ou plusieurs alias à un artifact lors de son enregistrement dans W&B.
"""
import wandb

# Créer un artifact
artifact = wandb.Artifact(name="<artifact_name>", type="<artifact_type>")
# Ajouter des fichiers à l'artifact
artifact.add_file("<file_path>")

with wandb.init(project="<project>") as run:
    # Enregistrer l'artifact avec des alias
    run.log_artifact(artifact, aliases=["<alias1>", "<alias2>"])

Ajouter un alias à un artifact existant

"""
Ajoute un alias à un artifact W&B existant.
"""
import wandb

# Récupérer un artifact existant et lui ajouter un alias
artifact = wandb.Api().artifact("entity/project/artifact:version")
artifact.aliases = ["<new-alias>"]
artifact.save()

Ajouter un tag à un artifact au moment de sa journalisation

"""
Ajouter un tag à un artifact lors de son enregistrement dans W&B.
"""
import wandb

# Créer un artifact
artifact = wandb.Artifact(name="<artifact_name>", type="<artifact_type>")

# Enregistrer l'artifact avec des tags
with wandb.init(project="<project>") as run:
    run.log_artifact(artifact, tags=["<tag1>", "<tag2>"])

Ajouter un tag sur un artifact existant

"""
Ajoute un tag à un artifact W&B existant.
"""
import wandb

# Récupérer un artifact existant et lui ajouter un tag
artifact = wandb.Api().artifact("entity/project/artifact:version")
artifact.tags = ["new-tag"]
artifact.save()

Créer et journaliser un artifact doté d’une politique TTL

"""
Créer et enregistrer un artifact avec une politique TTL dans W&B.
"""
import wandb
from datetime import timedelta

# Créer un artifact avec une politique TTL
artifact = wandb.Artifact(name="<artifact_name>", type="<artifact_type>")
artifact.add_file("<file_path>")
artifact.ttl = timedelta(days=30)  # Définir la politique TTL

with wandb.init(project="<project>", entity="<entity>") as run:
    # Enregistrer l'artifact avec la politique TTL
    run.log_artifact(artifact)

Mettre à jour la politique TTL d’un artifact existant

"""
Mettre à jour la politique TTL d'un artifact existant dans W&B.
"""
import wandb
from datetime import timedelta

# Initialiser l'API W&B
api = wandb.Api()

# Récupérer l'artifact existant
artifact = api.artifact("<entity/project/artifact:alias>")

# Ajouter ou mettre à jour la politique TTL. Indiquer la durée souhaitée.
artifact.ttl = timedelta(days=365)  # Suppression dans un an

# Enregistrer l'artifact mis à jour
artifact.save()

Mettre à jour la description d’un artifact existant au sein d’un run

"""
Mettre à jour la description d'un artifact W&B existant dans un run W&B.

Ce code initialise un run W&B, récupère l'artifact spécifié par nom et alias,
met à jour sa description et enregistre les modifications.
"""
import wandb

with wandb.init(entity="<entity>", project="<project>") as run:
    # Récupérer l'artifact par nom et alias
    artifact = run.use_artifact(artifact_or_name="<artifact>:<alias>")
    # Mettre à jour la description de l'artifact
    artifact.description = "<description>"
    # Enregistrer l'artifact mis à jour
    artifact.save()

À partir d’un artifact existant, mettez à jour sa description, ses métadonnées et ses alias sans créer de nouveau run

"""
À partir d'un artifact existant, mettre à jour sa description, ses métadonnées et ses alias
sans créer un nouveau run.
"""
import wandb

api = wandb.Api()

artifact = api.artifact(name="<entity/project/artifact:alias>")

# Mettre à jour la description
artifact.description = "My new description"

# Mettre à jour sélectivement les clés de métadonnées
artifact.metadata["oldKey"] = "new value"

# Remplacer entièrement les métadonnées
artifact.metadata = {"newKey": "new value"}

# Ajouter un alias
artifact.aliases.append("best")

# Supprimer un alias
artifact.aliases.remove("latest")

# Remplacer complètement les alias
artifact.aliases = ["replaced"]

# Enregistrer toutes les modifications de l'artifact
artifact.save()