Passer au contenu principal

Enregistrer des traces pendant les runs d’entraînement de modèle

Vous pouvez enregistrer des traces Weave pendant les runs d’entraînement de modèle et les consulter dans votre Workspace personnel.
Un Workspace W&B affichant un panneau de trace Weave à côté des métriques du run d'entraînement.
Les Workspaces personnels sont des tableaux de bord personnalisables dans l’interface utilisateur qui vous permettent d’afficher des analyses approfondies et des visualisations de données de vos runs d’entraînement de modèle. Lorsque vous ajoutez des panneaux Weave à votre Workspace, vous pouvez afficher et consulter les données de trace enregistrées pendant les runs du modèle afin de mieux comprendre les performances de vos modèles pendant l’entraînement. Par exemple, si vous effectuez le fine-tuning d’un modèle LLM et que votre Workspace W&B montre que l’accuracy chute à l’étape 500, les traces Weave intégrées peuvent révéler exactement ce qui s’est passé. Par exemple, votre modèle a commencé à générer des réponses trop verbeuses qui ne répondaient plus aux critères d’évaluation.

Utiliser les panneaux Weave

Lorsque vous décorez des fonctions avec @weave.op dans vos pipelines de ML, vous capturez automatiquement leurs informations d’exécution et pouvez y accéder dans un Workspace personnel. Par exemple, le script suivant montre comment les traces Weave s’intègrent aux runs d’entraînement W&B. Il simule une boucle d’entraînement de machine learning dans laquelle chaque étape d’entraînement journalise des métriques dans W&B tout en créant en parallèle des traces Weave détaillées. Les décorateurs @weave.op appliqués aux fonctions capturent automatiquement les entrées, les sorties et les détails d’exécution. Lorsque la boucle d’entraînement journalise des métriques avec wandb.log(), elle journalise également les informations de trace Weave dans votre projet.
import wandb
import weave
import random

# Initialiser W&B et Weave avec le même projet
project = "my-workspace-project"
weave.init(project)

@weave.op
def evaluate_model(model_state, epoch):
    # Simuler les métriques d'évaluation
    accuracy = 0.7 + epoch * 0.02 + random.uniform(-0.05, 0.05)
    
    # Suivre les comportements spécifiques du modèle
    test_responses = {
        "conciseness_check": "Model generated 500 words for simple question",
        "accuracy_check": "Model answered 8/10 questions correctly",
        "hallucination_check": "No factual errors detected"
    }
    
    return {
        "accuracy": accuracy,
        "diagnostic_results": test_responses
    }

@weave.op
def training_step(epoch, lr):
    # Simuler la logique d'entraînement
    loss = 1.0 / (epoch + 1) + random.uniform(-0.1, 0.1)
    
    # Évaluation avec traces
    eval_results = evaluate_model(f"checkpoint_{epoch}", epoch)
    
    return {
        "loss": loss,
        "accuracy": eval_results["accuracy"],
        "diagnostics": eval_results["diagnostic_results"]
    }

# Boucle d'entraînement
with wandb.init(project=project, config={"lr": 0.01}) as run:
    for epoch in range(5):
        # Exécuter l'entraînement avec le traçage Weave
        results = training_step(epoch, run.config.lr)
        
        # Journaliser vers W&B - crée le point d'intégration
        run.log({
            "epoch": epoch,
            "loss": results["loss"],
            "accuracy": results["accuracy"]
        })
Vous pouvez exécuter ce script d’exemple pour voir comment les traces sont enregistrées avec le reste des informations de votre run. Une fois le run démarré, vous pouvez consulter les informations de trace dans votre Workspace pendant le run ou après celui-ci. Ouvrez le lien fourni dans le terminal au démarrage d’un run (il ressemble à ceci : wandb: 🚀 View run at https://wandb.ai/wandb/my-project/runs/[RUN-ID]), ou accédez au Workspace dans l’interface utilisateur. Pour accéder à un Workspace depuis l’interface utilisateur :
  1. Ouvrez l’interface W&B et cliquez sur l’onglet Projects. Cela ouvre la liste de vos projets.
  2. Dans la liste des projets, cliquez sur le projet dans lequel vous avez enregistré votre run. Cela ouvre la page Workspaces.
  3. Si vous avez configuré votre Workspace comme un Workspace automatique, il se remplit automatiquement avec des visualisations de données et des informations sur votre run. Les données de trace de votre run se trouvent dans la section Weave du Workspace. Si votre Workspace est manuel, vous pouvez ajouter des panneaux Weave en cliquant sur Add panels et en sélectionnant des panneaux dans la section Weave du menu Add Panels.
Pour plus d’informations sur les Workspaces, voir Voir les résultats des expériences.

Associer des traces à un run W&B spécifique

Dans certains cas, vous pouvez souhaiter associer des traces à un run autre que celui que Weave détecte automatiquement. Par défaut, Weave détecte automatiquement les traces et les associe au wandb.run actif. Si vous devez associer des traces à un run spécifique qui n’est pas le wandb.run global, utilisez set_wandb_run_context. Pour associer des traces à un run spécifique et à une étape donnée de ce run, définissez les arguments run_id et step de la méthode :
import weave

client = weave.init("[YOUR-TEAM-NAME]/[YOUR-PROJECT-NAME]")

# Associer toutes les traces suivantes à un run spécifique.
client.set_wandb_run_context(run_id="[YOUR-RUN-ID]", step=[INTEGER])

@weave.op
def my_function(x):
    return x * 2

my_function(10)  # Cette trace est liée à "my-run-id" à l'étape 5.
run_id est l’ID court de l’exécution (par exemple, 38m4t5ja), et non le chemin complet entity/project/run_id. Vous pouvez trouver l’ID court d’une exécution dans l’URL de l’exécution (https://wandb.ai/team/project/runs/[RUN-ID]) ou en accédant à wandb.run.id dans le code. Pour annuler cette redéfinition et revenir au wandb.run global, appelez clear_wandb_run_context :
client.clear_wandb_run_context()

my_function(20)  # Cette trace utilise le wandb.run global (s'il existe).

Référencer des artefacts W&B dans une trace Weave

Vous pouvez référencer des artefacts W&B (comme des modèles, des jeux de données et des checkpoints) dans vos traces Weave. Cela crée un lien cliquable dans la Weave UI qui mène directement à la page de détails de l’artefact, ce qui vous aide à suivre quelles versions d’artefact vous avez utilisées lors d’opérations spécifiques. Par exemple, si vous avez entraîné deux versions d’un modèle (v1 et v2), vous pouvez ajouter la référence à l’artefact v1 comme attribut de la trace lorsque vous interrogez ce modèle. Cela vous permet d’identifier précisément quelle version d’artefact a produit une sortie donnée. Pour associer un artefact à une trace, construisez l’URL de l’artefact en concaténant le préfixe wandb-artifact:/// avec le nom complet de l’artefact en utilisant la syntaxe suivante : wandb-artifact:///[FULL-NAME-OF-ARTIFACT]. Passez-la ensuite à Weave de l’une des deux façons suivantes :
  • Comme attribut arbitraire
  • Comme attribut d’un Model
Vous pouvez trouver le nom complet de l’artefact sur sa page de détails dans l’interface W&B. Il ressemble à ceci : [ENTITY]/[PROJECT]/[ARTIFACT-NAME]:[VERSION]. Vous pouvez copier le nom complet depuis la page de détails de l’artefact dans l’interface W&B. Les sections suivantes présentent chaque approche.

Ajouter un artefact comme attribut d’une trace

Pour ajouter un artefact comme attribut d’une trace, passez-le sous forme de paire clé-valeur au gestionnaire de contexte weave.attributes() :
import weave

weave.init("[YOUR-TEAM-NAME]/[YOUR-PROJECT-NAME]")

@weave.op
def my_function(name: str):
    return f"Hello, {name}!"

# Ajoutez un nom de clé arbitraire et l’URL de l’artefact comme valeur
with weave.attributes({'artifact_id': 'wandb-artifact:///team-name/project-name/run-38m4t5ja-history:v0'}):
    result = my_function("World")

Ajouter un artefact comme attribut d’un Model

Pour ajouter un artefact comme attribut d’un Model, fournissez l’URL de l’artefact lors de l’instanciation du modèle :
La classe Model est uniquement prise en charge dans le SDK Python de Weave.
import weave

weave.init("[YOUR-TEAM-NAME]/[YOUR-PROJECT-NAME]")

class MyModel(weave.Model):
    # Stocker la référence de l'artifact comme attribut du modèle
    artifact_id: str
    temperature: float = 0.7
    
    @weave.op
    def predict(self, query: str) -> str:
        # Votre logique d'inférence du modèle ici
        return f"Response to: {query}"

# Fournir l'URL de l'artifact comme attribut du modèle
model = MyModel(
    artifact_id="wandb-artifact:///team-name/project-name/run-38m4t5ja-history:v0"
)

result = model.predict("Hello, World!")