SKILL.md
SKILL.mdBrowse 4 files
3,321 tokens
12,676 bytes
Token encoding: o200k_base
Snapshot 24fd22b
1---2name: weights-and-biases3description: "W&B: log ML experiments, sweeps, model registry, dashboards."4version: 1.0.15author: Orchestra Research6license: MIT7dependencies: [wandb]8platforms: [linux, macos, windows]9metadata:10 hermes:11 tags: [MLOps, Weights And Biases, WandB, Experiment Tracking, Hyperparameter Tuning, Model Registry, Collaboration, Real-Time Visualization, PyTorch, TensorFlow, HuggingFace]12 13---14 15# Weights & Biases: ML Experiment Tracking & MLOps16 17## When to Use This Skill18 19Use Weights & Biases (W&B) when you need to:20- **Track ML experiments** with automatic metric logging21- **Visualize training** in real-time dashboards22- **Compare runs** across hyperparameters and configurations23- **Optimize hyperparameters** with automated sweeps24- **Manage model registry** with versioning and lineage25- **Collaborate on ML projects** with team workspaces26- **Track artifacts** (datasets, models, code) with lineage27 28**Users**: 200,000+ ML practitioners | **GitHub Stars**: 10.5k+ | **Integrations**: 100+29 30## Installation31 32```bash33# Install W&B34pip install wandb35 36# Login (creates API key)37wandb login38 39# Or set API key programmatically40export WANDB_API_KEY=your_api_key_here41```42 43## Quick Start44 45### Basic Experiment Tracking46 47```python48import wandb49 50# Initialize a run51run = wandb.init(52 project="my-project",53 config={54 "learning_rate": 0.001,55 "epochs": 10,56 "batch_size": 32,57 "architecture": "ResNet50"58 }59)60 61# Training loop62for epoch in range(run.config.epochs):63 # Your training code64 train_loss = train_epoch()65 val_loss = validate()66 67 # Log metrics68 wandb.log({69 "epoch": epoch,70 "train/loss": train_loss,71 "val/loss": val_loss,72 "train/accuracy": train_acc,73 "val/accuracy": val_acc74 })75 76# Finish the run77wandb.finish()78```79 80### With PyTorch81 82```python83import torch84import wandb85 86# Initialize87wandb.init(project="pytorch-demo", config={88 "lr": 0.001,89 "epochs": 1090})91 92# Access config93config = wandb.config94 95# Training loop96for epoch in range(config.epochs):97 for batch_idx, (data, target) in enumerate(train_loader):98 # Forward pass99 output = model(data)100 loss = criterion(output, target)101 102 # Backward pass103 optimizer.zero_grad()104 loss.backward()105 optimizer.step()106 107 # Log every 100 batches108 if batch_idx % 100 == 0:109 wandb.log({110 "loss": loss.item(),111 "epoch": epoch,112 "batch": batch_idx113 })114 115# Save model116torch.save(model.state_dict(), "model.pth")117wandb.save("model.pth") # Upload to W&B118 119wandb.finish()120```121 122## Core Concepts123 124### 1. Projects and Runs125 126**Project**: Collection of related experiments127**Run**: Single execution of your training script128 129```python130# Create/use project131run = wandb.init(132 project="image-classification",133 name="resnet50-experiment-1", # Optional run name134 tags=["baseline", "resnet"], # Organize with tags135 notes="First baseline run" # Add notes136)137 138# Each run has unique ID139print(f"Run ID: {run.id}")140print(f"Run URL: {run.url}")141```142 143### 2. Configuration Tracking144 145Track hyperparameters automatically:146 147```python148config = {149 # Model architecture150 "model": "ResNet50",151 "pretrained": True,152 153 # Training params154 "learning_rate": 0.001,155 "batch_size": 32,156 "epochs": 50,157 "optimizer": "Adam",158 159 # Data params160 "dataset": "ImageNet",161 "augmentation": "standard"162}163 164wandb.init(project="my-project", config=config)165 166# Access config during training167lr = wandb.config.learning_rate168batch_size = wandb.config.batch_size169```170 171### 3. Metric Logging172 173```python174# Log scalars175wandb.log({"loss": 0.5, "accuracy": 0.92})176 177# Log multiple metrics178wandb.log({179 "train/loss": train_loss,180 "train/accuracy": train_acc,181 "val/loss": val_loss,182 "val/accuracy": val_acc,183 "learning_rate": current_lr,184 "epoch": epoch185})186 187# Log with custom x-axis188wandb.log({"loss": loss}, step=global_step)189 190# Log media (images, audio, video)191wandb.log({"examples": [wandb.Image(img) for img in images]})192 193# Log histograms194wandb.log({"gradients": wandb.Histogram(gradients)})195 196# Log tables197table = wandb.Table(columns=["id", "prediction", "ground_truth"])198wandb.log({"predictions": table})199```200 201### 4. Model Checkpointing202 203```python204import torch205import wandb206 207# Save model checkpoint208checkpoint = {209 'epoch': epoch,210 'model_state_dict': model.state_dict(),211 'optimizer_state_dict': optimizer.state_dict(),212 'loss': loss,213}214 215torch.save(checkpoint, 'checkpoint.pth')216 217# Upload to W&B218wandb.save('checkpoint.pth')219 220# Or use Artifacts (recommended)221artifact = wandb.Artifact('model', type='model')222artifact.add_file('checkpoint.pth')223wandb.log_artifact(artifact)224```225 226## Hyperparameter Sweeps227 228Automatically search for optimal hyperparameters.229 230### Define Sweep Configuration231 232```python233sweep_config = {234 'method': 'bayes', # or 'grid', 'random'235 'metric': {236 'name': 'val/accuracy',237 'goal': 'maximize'238 },239 'parameters': {240 'learning_rate': {241 'distribution': 'log_uniform_values',242 'min': 1e-5,243 'max': 1e-1244 },245 'batch_size': {246 'values': [16, 32, 64, 128]247 },248 'optimizer': {249 'values': ['adam', 'sgd', 'rmsprop']250 },251 'dropout': {252 'distribution': 'uniform',253 'min': 0.1,254 'max': 0.5255 }256 }257}258 259# Initialize sweep260sweep_id = wandb.sweep(sweep_config, project="my-project")261```262 263### Define Training Function264 265```python266def train():267 # Initialize run268 run = wandb.init()269 270 # Access sweep parameters271 lr = wandb.config.learning_rate272 batch_size = wandb.config.batch_size273 optimizer_name = wandb.config.optimizer274 275 # Build model with sweep config276 model = build_model(wandb.config)277 optimizer = get_optimizer(optimizer_name, lr)278 279 # Training loop280 for epoch in range(NUM_EPOCHS):281 train_loss = train_epoch(model, optimizer, batch_size)282 val_acc = validate(model)283 284 # Log metrics285 wandb.log({286 "train/loss": train_loss,287 "val/accuracy": val_acc288 })289 290# Run sweep291wandb.agent(sweep_id, function=train, count=50) # Run 50 trials292```293 294### Sweep Strategies295 296```python297# Grid search - exhaustive298sweep_config = {299 'method': 'grid',300 'parameters': {301 'lr': {'values': [0.001, 0.01, 0.1]},302 'batch_size': {'values': [16, 32, 64]}303 }304}305 306# Random search307sweep_config = {308 'method': 'random',309 'parameters': {310 'lr': {'distribution': 'uniform', 'min': 0.0001, 'max': 0.1},311 'dropout': {'distribution': 'uniform', 'min': 0.1, 'max': 0.5}312 }313}314 315# Bayesian optimization (recommended)316sweep_config = {317 'method': 'bayes',318 'metric': {'name': 'val/loss', 'goal': 'minimize'},319 'parameters': {320 'lr': {'distribution': 'log_uniform_values', 'min': 1e-5, 'max': 1e-1}321 }322}323```324 325## Artifacts326 327Track datasets, models, and other files with lineage.328 329### Log Artifacts330 331```python332# Create artifact333artifact = wandb.Artifact(334 name='training-dataset',335 type='dataset',336 description='ImageNet training split',337 metadata={'size': '1.2M images', 'split': 'train'}338)339 340# Add files341artifact.add_file('data/train.csv')342artifact.add_dir('data/images/')343 344# Log artifact345wandb.log_artifact(artifact)346```347 348### Use Artifacts349 350```python351# Download and use artifact352run = wandb.init(project="my-project")353 354# Download artifact355artifact = run.use_artifact('training-dataset:latest')356artifact_dir = artifact.download()357 358# Use the data359data = load_data(f"{artifact_dir}/train.csv")360```361 362### Model Registry363 364```python365# Log model as artifact366model_artifact = wandb.Artifact(367 name='resnet50-model',368 type='model',369 metadata={'architecture': 'ResNet50', 'accuracy': 0.95}370)371 372model_artifact.add_file('model.pth')373wandb.log_artifact(model_artifact, aliases=['best', 'production'])374 375# Link to model registry376run.link_artifact(model_artifact, 'model-registry/production-models')377```378 379## Integration Examples380 381### HuggingFace Transformers382 383```python384from transformers import Trainer, TrainingArguments385import wandb386 387# Initialize W&B388wandb.init(project="hf-transformers")389 390# Training arguments with W&B391training_args = TrainingArguments(392 output_dir="./results",393 report_to="wandb", # Enable W&B logging394 run_name="bert-finetuning",395 logging_steps=100,396 save_steps=500397)398 399# Trainer automatically logs to W&B400trainer = Trainer(401 model=model,402 args=training_args,403 train_dataset=train_dataset,404 eval_dataset=eval_dataset405)406 407trainer.train()408```409 410### PyTorch Lightning411 412```python413from pytorch_lightning import Trainer414from pytorch_lightning.loggers import WandbLogger415import wandb416 417# Create W&B logger418wandb_logger = WandbLogger(419 project="lightning-demo",420 log_model=True # Log model checkpoints421)422 423# Use with Trainer424trainer = Trainer(425 logger=wandb_logger,426 max_epochs=10427)428 429trainer.fit(model, datamodule=dm)430```431 432### Keras/TensorFlow433 434```python435import wandb436from wandb.integration.keras import WandbMetricsLogger, WandbModelCheckpoint437 438# Initialize439wandb.init(project="keras-demo")440 441# Add callbacks (the monolithic WandbCallback was removed;442# use the dedicated callbacks from wandb.integration.keras instead)443model.fit(444 x_train, y_train,445 validation_data=(x_val, y_val),446 epochs=10,447 callbacks=[448 WandbMetricsLogger(), # Auto-logs metrics449 WandbModelCheckpoint("models/model-{epoch}") # Saves checkpoints450 ]451)452```453 454## Visualization & Analysis455 456### Custom Charts457 458```python459# Log custom visualizations460import matplotlib.pyplot as plt461 462fig, ax = plt.subplots()463ax.plot(x, y)464wandb.log({"custom_plot": wandb.Image(fig)})465 466# Log confusion matrix467wandb.log({"conf_mat": wandb.plot.confusion_matrix(468 probs=None,469 y_true=ground_truth,470 preds=predictions,471 class_names=class_names472)})473```474 475### Reports476 477Create shareable reports in W&B UI:478- Combine runs, charts, and text479- Markdown support480- Embeddable visualizations481- Team collaboration482 483## Best Practices484 485### 1. Organize with Tags and Groups486 487```python488wandb.init(489 project="my-project",490 tags=["baseline", "resnet50", "imagenet"],491 group="resnet-experiments", # Group related runs492 job_type="train" # Type of job493)494```495 496### 2. Log Everything Relevant497 498```python499# Log system metrics500wandb.log({501 "gpu/util": gpu_utilization,502 "gpu/memory": gpu_memory_used,503 "cpu/util": cpu_utilization504})505 506# Log code version507wandb.log({"git_commit": git_commit_hash})508 509# Log data splits510wandb.log({511 "data/train_size": len(train_dataset),512 "data/val_size": len(val_dataset)513})514```515 516### 3. Use Descriptive Names517 518```python519# ✅ Good: Descriptive run names520wandb.init(521 project="nlp-classification",522 name="bert-base-lr0.001-bs32-epoch10"523)524 525# ❌ Bad: Generic names526wandb.init(project="nlp", name="run1")527```528 529### 4. Save Important Artifacts530 531```python532# Save final model533artifact = wandb.Artifact('final-model', type='model')534artifact.add_file('model.pth')535wandb.log_artifact(artifact)536 537# Save predictions for analysis538predictions_table = wandb.Table(539 columns=["id", "input", "prediction", "ground_truth"],540 data=predictions_data541)542wandb.log({"predictions": predictions_table})543```544 545### 5. Use Offline Mode for Unstable Connections546 547```python548import os549 550# Enable offline mode551os.environ["WANDB_MODE"] = "offline"552 553wandb.init(project="my-project")554# ... your code ...555 556# Sync later557# wandb sync <run_directory>558```559 560## Team Collaboration561 562### Share Runs563 564```python565# Runs are automatically shareable via URL566run = wandb.init(project="team-project")567print(f"Share this URL: {run.url}")568```569 570### Team Projects571 572- Create team account at wandb.ai573- Add team members574- Set project visibility (private/public)575- Use team-level artifacts and model registry576 577## Pricing578 579- **Free**: Unlimited public projects, 100GB storage580- **Academic**: Free for students/researchers581- **Teams**: $50/seat/month, private projects, unlimited storage582- **Enterprise**: Custom pricing, on-prem options583 584## Resources585 586- **Documentation**: https://docs.wandb.ai587- **GitHub**: https://github.com/wandb/wandb (10.5k+ stars)588- **Examples**: https://github.com/wandb/examples589- **Community**: https://wandb.ai/community590- **Discord**: https://wandb.me/discord591 592## See Also593 594- `references/sweeps.md` - Comprehensive hyperparameter optimization guide595- `references/artifacts.md` - Data and model versioning patterns596- `references/integrations.md` - Framework-specific examples597 598 599 Discovery context
Discovered by repository scan. No exact path reference found in the snapshot’s root AGENTS.md.