Gewichte & Vorurteile: Ein KDnuggets -AbsturzkursGewichte & Vorurteile: Ein KDnuggets -Absturzkurs
Bild des Autors

Wenn Sie Modelle über ein einzelnes Notizbuch hinaus trainieren, haben Sie wahrscheinlich die gleichen Kopfschmerzen erreicht: Sie optimieren fünf Knöpfe, haben das Coaching erneut und bis Freitag können Sie sich nicht daran erinnern, welcher Lauf die „gute“ ROC -Kurve oder welche Datenscheiben Sie verwendet haben. Gewichte & Vorurteile (W & B) gibt Ihnen einen Papierpfad – Metriken, Konfigurationen, Handlungen, Datensätze und Modelle -, damit Sie beantworten können, was sich mit Beweisen geändert hat, nicht raten.

Unten ist eine praktische Tour. Es ist eine Meinung, Licht auf die Zeremonie und richtet sich an Groups, die eine saubere Experimentierhistorie wünschen, ohne ihre eigene Plattform zu bauen. Nennen wir es einen wachsenden Vorgang.

# Warum überhaupt W & B?

Notizbücher werden zu Experimenten. Experimente vermehren sich. Bald fragen Sie: Welcher Lauf hat diese Datenscheibe verwendet? Warum ist die heutige ROC -Kurve höher? Kann ich letzte Woche die Grundlinie reproduzieren?

W & B gibt Ihnen einen Platz zu:

  • Protokollmetriken, Konfigurationen, Diagramme und Systemstatistiken
  • Versionsdatensätze und Modelle mit Artefakten
  • Führen Sie Hyperparameter -Sweeps
  • Dashboards ohne Screenshots teilen

Sie können winzig und schichtfunktionen bei Bedarf beginnen.

# Einrichten in 60 Sekunden

Installieren Sie zunächst die Bibliothek und melden Sie sich mit Ihrem API -Schlüssel an. Wenn Sie noch keinen haben, Sie können es hier finden.

pip set up wandb
wandb login # paste your API key as soon as

Gewichte & Vorurteile: Ein KDnuggets -AbsturzkursGewichte & Vorurteile: Ein KDnuggets -Absturzkurs
Bild des Autors

// Minimale Vernunftprüfung

import wandb, random, time

wandb.init(venture="kdn-crashcourse", identify="hello-run", config={"lr": 0.001, "epochs": 5})
for epoch in vary(wandb.config.epochs):
    loss = 1.0 / (epoch + 1) + random.random() * 0.05
    wandb.log({"epoch": epoch, "loss": loss})
    time.sleep(0.1)
wandb.end()

Jetzt sollten Sie so etwas sehen:

Gewichte & Vorurteile: Ein KDnuggets -AbsturzkursGewichte & Vorurteile: Ein KDnuggets -Absturzkurs
Bild des Autors

Lassen Sie uns nun die nützlichen Teile entscheiden.

# Verfolgungsexperimente richtig

// Logyperparameter und Metriken protokollieren

Behandeln wandb.config als einzelne Quelle der Wahrheit für die Knöpfe Ihres Experiments. Geben Sie Metriken klare Namen, sodass die automatische Gruppen-Diagramme.

cfg = dict(arch="resnet18", lr=3e-4, batch=64, seed=42)
run = wandb.init(venture="kdn-mlops", config=cfg, tags=("baseline"))

# coaching loop ...
for step, (x, y) in enumerate(loader):
    # ... compute loss, acc
    wandb.log({"prepare/loss": loss.merchandise(), "prepare/acc": acc, "step": step})

# log a last abstract
run.abstract("best_val_auc") = best_auc

Ein paar Tipps:

  • Verwenden Sie Namespaces wie prepare/loss oder val/auc automatisch Diagramme gruppieren
  • Fügen Sie Tags wie "lr-finder" oder "fp16" Sie können additionally später Läufe filtern
  • Verwenden run.abstract(...) Für einmalige Ergebnisse möchten Sie auf der Run-Karte sehen

// Protokollbilder, Verwirrungsmatrizen und benutzerdefinierte Diagramme

wandb.log({
    "val/confusion": wandb.plot.confusion_matrix(
        preds=preds, y_true=y_true, class_names=lessons)
})

Sie können auch jedes Matplotlib -Diagramm speichern:

import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot(historical past)
wandb.log({"coaching/curve": fig})

// Versionsdatensätze und Modelle mit Artefakten

Artefakte beantworten Fragen wie „Welche genauen Dateien haben diese ausgeführten Dateien verwendet?“ und „Was haben wir trainiert?“ Nicht mehr final_final_v3.parquet Geheimnisse.

import wandb

run = wandb.init(venture="kdn-mlops")

# Create a dataset artifact (run as soon as per model)
uncooked = wandb.Artifact("imdb_reviews", sort="dataset", description="uncooked dump v1")
uncooked.add_dir("knowledge/uncooked") # or add_file("path")
run.log_artifact(uncooked)

# Later, devour the newest model
artifact = run.use_artifact("imdb_reviews:newest")
data_dir = artifact.obtain() # folder path pinned to a hash

Melden Sie Ihr Modell auf die gleiche Weise:

import torch
import wandb

run = wandb.init(venture="kdn-mlops")

model_path = "fashions/resnet18.pt"
torch.save(mannequin.state_dict(), model_path)

model_art = wandb.Artifact("sentiment-resnet18", sort="mannequin")
model_art.add_file(model_path)
run.log_artifact(model_art)

Jetzt ist die Abstammung offensichtlich: Dieses Modell stammt aus diesen Daten unter diesem Code Commit.

// Tabellen für Bewertungen und Fehleranalyse

wandb.Desk ist ein Lichtdatenrahmen für Ergebnisse, Vorhersagen und Scheiben.

desk = wandb.Desk(columns=("id", "textual content", "pred", "true", "prob"))
for r in batch_results:
    desk.add_data(r.id, r.textual content, r.pred, r.true, r.prob)
wandb.log({"eval/preds": desk})

Filtern Sie die Tabelle in der Benutzeroberfläche, um Fehlermuster zu finden (z. B. kurze Bewertungen, seltene Klassen usw.).

// Hyperparameter Sweeps

Definieren Sie einen Suchraum in YAML, Startagenten und lassen Sie W & B koordinieren.

# sweep.yaml
technique: bayes
metric: {identify: val/auc, objective: maximize}
parameters:
  lr: {min: 1e-5, max: 1e-2}
  batch: {values: (32, 64, 128)}
  dropout: {min: 0.0, max: 0.5}

Starten Sie den Sweep:

wandb sweep sweep.yaml # returns a SWEEP_ID
wandb agent // # run 1+ brokers

Ihr Trainingsskript sollte lesen wandb.config für lrAnwesend batchusw. Das Dashboard zeigt Prime -Versuche, parallele Koordinaten und die beste Konfiguration.

# Drop-In-Integrationen

Wählen Sie den, den Sie verwenden, und bewegen Sie sich.

// Pytorch Lightning

from pytorch_lightning.loggers import WandbLogger
logger = WandbLogger(venture="kdn-mlops")
coach = pl.Coach(logger=logger, max_epochs=10)

// Keras

import wandb
from wandb.keras import WandbCallback

wandb.init(venture="kdn-mlops", config={"epochs": 10})
mannequin.match(X, y, epochs=wandb.config.epochs, callbacks=(WandbCallback()))

// Scikit-Be taught

from sklearn.metrics import roc_auc_score
wandb.init(venture="kdn-mlops", config={"C": 1.0})
# ... match mannequin
wandb.log({"val/auc": roc_auc_score(y_true, y_prob)})

# Modellregister und Inszenierung

Stellen Sie sich die Registrierung als ein benanntes Regal für Ihre besten Modelle vor. Sie schieben einmal ein Artefakt und verwalten dann Aliase wie staging oder manufacturing Daher kann der nachgelagerte Code den richtigen ziehen, ohne Dateipfade zu erraten.

run = wandb.init(venture="kdn-mlops")
artwork = run.use_artifact("sentiment-resnet18:newest")
registry = wandb.sdk.artifacts.model_registry.ModelRegistry()
entry = registry.push(artwork, identify="sentiment-classifier")
entry.aliases.add("staging")

Drehen Sie den Alias ​​um, wenn Sie einen neuen Construct bewerben. Verbraucher lesen immer sentiment-classifier:manufacturing.

# Reproduzierbarkeit Checkliste

  • Konfigurationen: Lagern Sie jeden Hyperparameter in wandb.config
  • Code und Commit: Verwenden wandb.init(settings=wandb.Settings(code_dir=".")) Snapshot -Code oder auf CI zu verlassen, um das Git SHA anzubringen
  • Umfeld: Protokoll necessities.txt oder das Docker -Tag und füge es in ein Artefakt auf
  • Samen: Protokollieren Sie sie und setzen Sie sie

Minimal Saatgut Helper:

def set_seeds(s=42):
    import random, numpy as np, torch
    random.seed(s)
    np.random.seed(s)
    torch.manual_seed(s)
    torch.cuda.manual_seed_all(s)

# Zusammenarbeit und Teilen ohne Screenshots

Fügen Sie Notizen und Tags hinzu, damit Teamkollegen suchen können. Verwenden Sie Berichte, um Diagramme, Tabellen und Kommentare in einen Hyperlink zu nähen, den Sie in Slack oder PR eingeben können. Die Stakeholder können miteinander folgen, ohne ein Notizbuch zu eröffnen.

# CI- und Automatisierungstipps

  • Laufen wandb agent auf Trainingsknoten, um Sweeps von CI auszuführen
  • Protokollieren Sie ein Dataset -Artefakt nach Ihrem ETL -Job; Zugjobs können explizit von dieser Model abhängen
  • Nach der Bewertung Modellaliase fördern (stagingmanufacturing) in einem kleinen Submit-Schritt
  • Passieren WANDB_API_KEY als geheime und gruppenbezogene Läufe mit WANDB_RUN_GROUP

# Tipps für Privatsphäre und Zuverlässigkeit

  • Verwenden Sie standardmäßig personal Projekte für Groups
  • Verwenden Sie den Offline-Modus für Lufträufe. Normalerweise Zug wandb sync später
export WANDB_MODE=offline
  • Loggen Sie keine rohen PII. Falls erforderlich, Hash -IDs vor der Protokollierung.
  • Speichern Sie sie für große Dateien als Artefakte, anstatt sie anzubringen wandb.log.

# Gemeinsame Haken (und schnelle Korrekturen)

  • „Mein Lauf hat sich nichts angemeldet.“ Das Skript hat möglicherweise schon einmal abgestürzt wandb.end() wurde gerufen. Überprüfen Sie auch, ob Sie nicht eingestellt sind WANDB_DISABLED=true in Ihrer Umgebung.
  • Protokollierung fühlt sich langsam an. Log Scalare bei jedem Schritt an, speichern Sie jedoch schwere Vermögenswerte wie Bilder oder Tabellen für das Ende einer Epoche. Sie können auch passieren commit=False Zu wandb.log() und stapen Sie mehrere Protokolle zusammen.
  • Duplikatläufe in der Benutzeroberfläche sehen? Wenn Sie von einem Kontrollpunkt neu gestartet werden, stellen Sie fest id Und resume="enable" In wandb.init() den gleichen Lauf fortzusetzen.
  • Thriller -Datendrift erleben? Setzen Sie jeden Datensatz -Schnappschuss in ein Artefakt ein und stecken Sie Ihre Läufe in explizite Versionen.

# Taschenblatt

// 1. Starten Sie einen Lauf

wandb.init(venture="proj", config=cfg, tags=("baseline"))

// 2. Protokollmetriken, Bilder oder Tabellen

wandb.log({"prepare/loss": loss, "img": (wandb.Picture(img))})

// 3. Model ein Datensatz oder Modell

artwork = wandb.Artifact("identify", sort="dataset")
artwork.add_dir("path")
run.log_artifact(artwork)

// 4. konsumieren Sie ein Artefakt

path = run.use_artifact("identify:newest").obtain()

// 5. Führen Sie einen Sweep

wandb sweep sweep.yaml && wandb agent //

# Einpacken

Starten Sie klein: Initialisieren Sie einen Lauf, protokollieren Sie einige Metriken und schieben Sie Ihre Modelldatei als Artefakt. Wenn sich das natürlich anfühlt, fügen Sie einen Sweep und einen kurzen Bericht hinzu. Am Ende werden reproduzierbare Experimente, nachverfolgbare Daten und Modelle sowie ein Dashboard, das Ihre Arbeit ohne Diashow erklärt.

Josep Ferrer ist ein Analyseingenieur aus Barcelona. Er absolvierte das Physik -Engineering und arbeitet derzeit im Bereich Information Science, der für die menschliche Mobilität angewendet wurde. Er ist ein Teilzeit-Inhaltsersteller, der sich auf Datenwissenschaft und -technologie konzentriert. Josep schreibt über alle Dinge KI und deckt die Anwendung der laufenden Explosion vor Ort ab.

Von admin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert