wandb
The AI developer platform. Use Weights & Biases to train and fine-tune models, and manage models from experimentation to production.
Top Related Projects
Open source platform for the machine learning lifecycle
Aim 💫 — An easy-to-use & supercharged open-source experiment tracker.
Determined is an open-source machine learning platform that simplifies distributed training, hyperparameter tuning, experiment tracking, and resource management. Works with PyTorch and TensorFlow.
Quick Overview
Weights & Biases (wandb) is an open-source tool for tracking and visualizing machine learning experiments. It provides a platform for managing and collaborating on machine learning projects, allowing users to log metrics, track model performance, and share results with their team or the broader community.
Pros
- Comprehensive Experiment Tracking: wandb offers a centralized platform to track and monitor various aspects of machine learning experiments, including metrics, hyperparameters, model checkpoints, and more.
- Collaboration and Sharing: wandb enables seamless collaboration among team members, allowing them to share experiments, insights, and results with ease.
- Visualization and Analysis: wandb provides powerful visualization tools to help users better understand their models and experiment results, including interactive plots, dashboards, and reports.
- Integrations and Flexibility: wandb integrates with a wide range of machine learning frameworks and libraries, making it easy to incorporate into existing workflows.
Cons
- Learning Curve: While wandb is relatively user-friendly, there may be a learning curve for users who are new to the tool, especially when it comes to setting up and configuring the various features.
- Potential Privacy Concerns: As a cloud-based platform, wandb may raise some privacy concerns for users who are working with sensitive data or models.
- Dependency on External Service: Since wandb is a cloud-based service, users are dependent on the availability and reliability of the wandb platform, which could be a potential point of failure.
- Limited Offline Functionality: While wandb does provide some offline functionality, the full range of features may not be available when working without an internet connection.
Code Examples
Here are a few examples of how to use the wandb library in Python:
- Logging Metrics:
import wandb
# Initialize the wandb run
wandb.init(project="my-project")
# Log a metric
wandb.log({"accuracy": 0.85})
- Tracking Hyperparameters:
import wandb
# Initialize the wandb run and log hyperparameters
wandb.init(project="my-project")
wandb.config.update({"learning_rate": 0.001, "batch_size": 32})
- Saving Model Checkpoints:
import wandb
# Initialize the wandb run
wandb.init(project="my-project")
# Save a model checkpoint
wandb.save("model.pth")
- Visualizing Results:
import wandb
import matplotlib.pyplot as plt
# Initialize the wandb run
wandb.init(project="my-project")
# Create a plot and log it to wandb
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
wandb.log({"plot": plt})
Getting Started
To get started with wandb, follow these steps:
- Install the wandb library using pip:
pip install wandb
- Initialize a new wandb run in your Python script:
import wandb
wandb.init(project="my-project")
- Log your experiment data, such as metrics, hyperparameters, and model checkpoints:
wandb.log({"accuracy": 0.85})
wandb.config.update({"learning_rate": 0.001, "batch_size": 32})
wandb.save("model.pth")
- Visualize your results using wandb's built-in visualization tools:
import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
wandb.log({"plot": plt})
- Explore the wandb web interface to view your experiment data, collaborate with your team, and share your results.
For more detailed information and advanced usage, please refer to the wandb documentation.
Competitor Comparisons
Open source platform for the machine learning lifecycle
Pros of MLflow
- Open-source and self-hostable, providing more control over data and infrastructure
- Integrates well with other open-source ML tools and frameworks
- Offers a more comprehensive set of features for the entire ML lifecycle
Cons of MLflow
- Requires more setup and maintenance compared to WandB's cloud-based solution
- Less intuitive UI and visualization capabilities
- Limited collaboration features for team-based projects
Code Comparison
MLflow:
import mlflow
mlflow.start_run()
mlflow.log_param("learning_rate", 0.01)
mlflow.log_metric("accuracy", 0.85)
mlflow.end_run()
WandB:
import wandb
wandb.init(project="my_project")
wandb.config.learning_rate = 0.01
wandb.log({"accuracy": 0.85})
wandb.finish()
Both libraries offer similar functionality for logging parameters and metrics, but WandB's API is slightly more concise and intuitive. MLflow provides more flexibility in terms of where and how the data is stored, while WandB focuses on cloud-based storage and collaboration. The choice between the two depends on specific project requirements, team size, and infrastructure preferences.
Aim 💫 — An easy-to-use & supercharged open-source experiment tracker.
Pros of Aim
- Open-source and self-hosted, offering greater control over data and infrastructure
- Lightweight and fast, with efficient storage and querying capabilities
- Flexible UI for custom visualizations and experiment comparisons
Cons of Aim
- Smaller community and ecosystem compared to Weights & Biases
- Fewer integrations with popular ML frameworks and tools
- Less comprehensive documentation and tutorials for advanced use cases
Code Comparison
Aim:
from aim import Run
run = Run()
run.track(accuracy, name='accuracy', epoch=epoch)
run.track(loss, name='loss', epoch=epoch)
Weights & Biases:
import wandb
wandb.init(project="my-project")
wandb.log({"accuracy": accuracy, "loss": loss})
Both libraries offer simple APIs for tracking metrics, but Weights & Biases provides a more streamlined approach with automatic project initialization and logging. Aim requires explicit Run creation and offers more granular control over tracking parameters.
While Weights & Biases has a more extensive feature set and broader adoption, Aim provides a compelling open-source alternative with strong performance and customization options. The choice between the two depends on specific project requirements, infrastructure preferences, and desired level of control over experiment tracking data.
Determined is an open-source machine learning platform that simplifies distributed training, hyperparameter tuning, experiment tracking, and resource management. Works with PyTorch and TensorFlow.
Pros of Determined
- Focuses on distributed training and hyperparameter tuning
- Provides built-in support for popular deep learning frameworks
- Offers a more comprehensive end-to-end ML platform
Cons of Determined
- Less extensive experiment tracking and visualization features
- Smaller community and ecosystem compared to Weights & Biases
- Steeper learning curve for beginners
Code Comparison
Determined:
from determined.experimental import Determined
with Determined() as det:
config = {"hyperparameters": {"learning_rate": 0.001}}
det.create_experiment(config=config)
Weights & Biases:
import wandb
wandb.init(project="my_project")
config = wandb.config
config.learning_rate = 0.001
wandb.log({"accuracy": 0.9, "loss": 0.1})
Both repositories offer tools for machine learning experimentation, but they have different focuses. Determined provides a more comprehensive platform for distributed training and hyperparameter tuning, while Weights & Biases excels in experiment tracking and visualization. Determined's code emphasizes experiment creation and configuration, whereas Weights & Biases' code highlights easy logging and tracking of metrics. The choice between the two depends on specific project requirements and team preferences.
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
Use W&B to build better models faster. Track and visualize all the pieces of your machine learning pipeline, from datasets to production machine learning models. Get started with W&B today, sign up for a W&B account!
Building an LLM app? Track, debug, evaluate, and monitor LLM apps with Weave, our new suite of tools for GenAI.
Documentation
See the W&B Developer Guide and API Reference Guide for a full technical description of the W&B platform.
Quickstart
Get started with W&B in four steps:
-
First, sign up for a W&B account.
-
Second, install the W&B SDK with pip. Navigate to your terminal and type the following command:
pip install wandb
- Third, log into W&B:
wandb.login()
- Use the example code snippet below as a template to integrate W&B to your Python script:
import wandb
# Start a W&B Run with wandb.init
run = wandb.init(project="my_first_project")
# Save model inputs and hyperparameters in a wandb.config object
config = run.config
config.learning_rate = 0.01
# Model training code here ...
# Log metrics over time to visualize performance with wandb.log
for i in range(10):
run.log({"loss": ...})
# Mark the run as finished, and finish uploading all data
run.finish()
That's it! Navigate to the W&B App to view a dashboard of your first W&B Experiment. Use the W&B App to compare multiple experiments in a unified place, dive into the results of a single run, and much more!
Integrations
Use your favorite framework with W&B. W&B integrations make it fast and easy to set up experiment tracking and data versioning inside existing projects. For more information on how to integrate W&B with the framework of your choice, see the Integrations chapter in the W&B Developer Guide.
ð¥ PyTorch
Call .watch
and pass in your PyTorch model to automatically log gradients and store the network topology. Next, use .log
to track other metrics. The following example demonstrates an example of how to do this:
import wandb
# 1. Start a new run
run = wandb.init(project="gpt4")
# 2. Save model inputs and hyperparameters
config = run.config
config.dropout = 0.01
# 3. Log gradients and model parameters
run.watch(model)
for batch_idx, (data, target) in enumerate(train_loader):
...
if batch_idx % args.log_interval == 0:
# 4. Log metrics to visualize performance
run.log({"loss": loss})
- Run an example Google Colab Notebook.
- Read the Developer Guide for technical details on how to integrate PyTorch with W&B.
- Explore W&B Reports.
ð TensorFlow/Keras
Use W&B Callbacks to automatically save metrics to W&B when you call `model.fit` during training.The following code example demonstrates how your script might look like when you integrate W&B with Keras:
# This script needs these libraries to be installed:
# tensorflow, numpy
import wandb
from wandb.keras import WandbMetricsLogger, WandbModelCheckpoint
import random
import numpy as np
import tensorflow as tf
# Start a run, tracking hyperparameters
run = wandb.init(
# set the wandb project where this run will be logged
project="my-awesome-project",
# track hyperparameters and run metadata with wandb.config
config={
"layer_1": 512,
"activation_1": "relu",
"dropout": random.uniform(0.01, 0.80),
"layer_2": 10,
"activation_2": "softmax",
"optimizer": "sgd",
"loss": "sparse_categorical_crossentropy",
"metric": "accuracy",
"epoch": 8,
"batch_size": 256,
},
)
# [optional] use wandb.config as your config
config = run.config
# get the data
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
x_train, y_train = x_train[::5], y_train[::5]
x_test, y_test = x_test[::20], y_test[::20]
labels = [str(digit) for digit in range(np.max(y_train) + 1)]
# build a model
model = tf.keras.models.Sequential(
[
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(config.layer_1, activation=config.activation_1),
tf.keras.layers.Dropout(config.dropout),
tf.keras.layers.Dense(config.layer_2, activation=config.activation_2),
]
)
# compile the model
model.compile(optimizer=config.optimizer, loss=config.loss, metrics=[config.metric])
# WandbMetricsLogger will log train and validation metrics to wandb
# WandbModelCheckpoint will upload model checkpoints to wandb
history = model.fit(
x=x_train,
y=y_train,
epochs=config.epoch,
batch_size=config.batch_size,
validation_data=(x_test, y_test),
callbacks=[
WandbMetricsLogger(log_freq=5),
WandbModelCheckpoint("models"),
],
)
# [optional] finish the wandb run, necessary in notebooks
run.finish()
Get started integrating your Keras model with W&B today:
- Run an example Google Colab Notebook
- Read the Developer Guide for technical details on how to integrate Keras with W&B.
- Explore W&B Reports.
ð¤ Hugging Face Transformers
Pass wandb
to the report_to
argument when you run a script using a Hugging Face Trainer. W&B will automatically log losses,
evaluation metrics, model topology, and gradients.
Note: The environment you run your script in must have wandb
installed.
The following example demonstrates how to integrate W&B with Hugging Face:
# This script needs these libraries to be installed:
# numpy, transformers, datasets
import wandb
import os
import numpy as np
from datasets import load_dataset
from transformers import TrainingArguments, Trainer
from transformers import AutoTokenizer, AutoModelForSequenceClassification
def tokenize_function(examples):
return tokenizer(examples["text"], padding="max_length", truncation=True)
def compute_metrics(eval_pred):
logits, labels = eval_pred
predictions = np.argmax(logits, axis=-1)
return {"accuracy": np.mean(predictions == labels)}
# download prepare the data
dataset = load_dataset("yelp_review_full")
tokenizer = AutoTokenizer.from_pretrained("distilbert-base-uncased")
small_train_dataset = dataset["train"].shuffle(seed=42).select(range(1000))
small_eval_dataset = dataset["test"].shuffle(seed=42).select(range(300))
small_train_dataset = small_train_dataset.map(tokenize_function, batched=True)
small_eval_dataset = small_train_dataset.map(tokenize_function, batched=True)
# download the model
model = AutoModelForSequenceClassification.from_pretrained(
"distilbert-base-uncased", num_labels=5
)
# set the wandb project where this run will be logged
os.environ["WANDB_PROJECT"] = "my-awesome-project"
# save your trained model checkpoint to wandb
os.environ["WANDB_LOG_MODEL"] = "true"
# turn off watch to log faster
os.environ["WANDB_WATCH"] = "false"
# pass "wandb" to the `report_to` parameter to turn on wandb logging
training_args = TrainingArguments(
output_dir="models",
report_to="wandb",
logging_steps=5,
per_device_train_batch_size=32,
per_device_eval_batch_size=32,
evaluation_strategy="steps",
eval_steps=20,
max_steps=100,
save_steps=100,
)
# define the trainer and start training
trainer = Trainer(
model=model,
args=training_args,
train_dataset=small_train_dataset,
eval_dataset=small_eval_dataset,
compute_metrics=compute_metrics,
)
trainer.train()
# [optional] finish the wandb run, necessary in notebooks
wandb.finish()
- Run an example Google Colab Notebook.
- Read the Developer Guide for technical details on how to integrate Hugging Face with W&B.
â¡ï¸ PyTorch Lightning
Build scalable, structured, high-performance PyTorch models with Lightning and log them with W&B.
# This script needs these libraries to be installed:
# torch, torchvision, pytorch_lightning
import wandb
import os
from torch import optim, nn, utils
from torchvision.datasets import MNIST
from torchvision.transforms import ToTensor
import pytorch_lightning as pl
from pytorch_lightning.loggers import WandbLogger
class LitAutoEncoder(pl.LightningModule):
def __init__(self, lr=1e-3, inp_size=28, optimizer="Adam"):
super().__init__()
self.encoder = nn.Sequential(
nn.Linear(inp_size * inp_size, 64), nn.ReLU(), nn.Linear(64, 3)
)
self.decoder = nn.Sequential(
nn.Linear(3, 64), nn.ReLU(), nn.Linear(64, inp_size * inp_size)
)
self.lr = lr
# save hyperparameters to self.hparamsm auto-logged by wandb
self.save_hyperparameters()
def training_step(self, batch, batch_idx):
x, y = batch
x = x.view(x.size(0), -1)
z = self.encoder(x)
x_hat = self.decoder(z)
loss = nn.functional.mse_loss(x_hat, x)
# log metrics to wandb
self.log("train_loss", loss)
return loss
def configure_optimizers(self):
optimizer = optim.Adam(self.parameters(), lr=self.lr)
return optimizer
# init the autoencoder
autoencoder = LitAutoEncoder(lr=1e-3, inp_size=28)
# setup data
batch_size = 32
dataset = MNIST(os.getcwd(), download=True, transform=ToTensor())
train_loader = utils.data.DataLoader(dataset, shuffle=True)
# initialise the wandb logger and name your wandb project
wandb_logger = WandbLogger(project="my-awesome-project")
# add your batch size to the wandb config
wandb_logger.experiment.config["batch_size"] = batch_size
# pass wandb_logger to the Trainer
trainer = pl.Trainer(limit_train_batches=750, max_epochs=5, logger=wandb_logger)
# train the model
trainer.fit(model=autoencoder, train_dataloaders=train_loader)
# [optional] finish the wandb run, necessary in notebooks
wandb.finish()
- Run an example Google Colab Notebook.
- Read the Developer Guide for technical details on how to integrate PyTorch Lightning with W&B.
ð¨ XGBoost
Use W&B Callbacks to automatically save metrics to W&B when you call `model.fit` during training.The following code example demonstrates how your script might look like when you integrate W&B with XGBoost:
# This script needs these libraries to be installed:
# numpy, xgboost
import wandb
from wandb.xgboost import WandbCallback
import numpy as np
import xgboost as xgb
# setup parameters for xgboost
param = {
"objective": "multi:softmax",
"eta": 0.1,
"max_depth": 6,
"nthread": 4,
"num_class": 6,
}
# start a new wandb run to track this script
run = wandb.init(
# set the wandb project where this run will be logged
project="my-awesome-project",
# track hyperparameters and run metadata
config=param,
)
# download data from wandb Artifacts and prep data
run.use_artifact("wandb/intro/dermatology_data:v0", type="dataset").download(".")
data = np.loadtxt(
"./dermatology.data",
delimiter=",",
converters={33: lambda x: int(x == "?"), 34: lambda x: int(x) - 1},
)
sz = data.shape
train = data[: int(sz[0] * 0.7), :]
test = data[int(sz[0] * 0.7) :, :]
train_X = train[:, :33]
train_Y = train[:, 34]
test_X = test[:, :33]
test_Y = test[:, 34]
xg_train = xgb.DMatrix(train_X, label=train_Y)
xg_test = xgb.DMatrix(test_X, label=test_Y)
watchlist = [(xg_train, "train"), (xg_test, "test")]
# add another config to the wandb run
num_round = 5
run.config["num_round"] = 5
run.config["data_shape"] = sz
# pass WandbCallback to the booster to log its configs and metrics
bst = xgb.train(
param, xg_train, num_round, evals=watchlist, callbacks=[WandbCallback()]
)
# get prediction
pred = bst.predict(xg_test)
error_rate = np.sum(pred != test_Y) / test_Y.shape[0]
# log your test metric to wandb
run.summary["Error Rate"] = error_rate
# [optional] finish the wandb run, necessary in notebooks
run.finish()
- Run an example Google Colab Notebook.
- Read the Developer Guide for technical details on how to integrate XGBoost with W&B.
ð§® Sci-Kit Learn
Use wandb to visualize and compare your scikit-learn models' performance:# This script needs these libraries to be installed:
# numpy, sklearn
import wandb
from wandb.sklearn import plot_precision_recall, plot_feature_importances
from wandb.sklearn import plot_class_proportions, plot_learning_curve, plot_roc
import numpy as np
from sklearn import datasets
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
# load and process data
wbcd = datasets.load_breast_cancer()
feature_names = wbcd.feature_names
labels = wbcd.target_names
test_size = 0.2
X_train, X_test, y_train, y_test = train_test_split(
wbcd.data, wbcd.target, test_size=test_size
)
# train model
model = RandomForestClassifier()
model.fit(X_train, y_train)
model_params = model.get_params()
# get predictions
y_pred = model.predict(X_test)
y_probas = model.predict_proba(X_test)
importances = model.feature_importances_
indices = np.argsort(importances)[::-1]
# start a new wandb run and add your model hyperparameters
run = wandb.init(project="my-awesome-project", config=model_params)
# Add additional configs to wandb
run.config.update(
{
"test_size": test_size,
"train_len": len(X_train),
"test_len": len(X_test),
}
)
# log additional visualisations to wandb
plot_class_proportions(y_train, y_test, labels)
plot_learning_curve(model, X_train, y_train)
plot_roc(y_test, y_probas, labels)
plot_precision_recall(y_test, y_probas, labels)
plot_feature_importances(model)
# [optional] finish the wandb run, necessary in notebooks
run.finish()
- Run an example Google Colab Notebook.
- Read the Developer Guide for technical details on how to integrate Scikit-Learn with W&B.
W&B Hosting Options
Weights & Biases is available in the cloud or installed on your private infrastructure. Set up a W&B Server in a production environment in one of three ways:
- Production Cloud: Set up a production deployment on a private cloud in just a few steps using terraform scripts provided by W&B.
- Dedicated Cloud: A managed, dedicated deployment on W&B's single-tenant infrastructure in your choice of cloud region.
- On-Prem/Bare Metal: W&B supports setting up a production server on most bare metal servers in your on-premise data centers. Quickly get started by running
wandb server
to easily start hosting W&B on your local infrastructure.
See the Hosting documentation in the W&B Developer Guide for more information.
Python Version Support
We are committed to supporting our minimum required Python version for at least six months after its official end-of-life (EOL) date, as defined by the Python Software Foundation. You can find a list of Python EOL dates here.
When we discontinue support for a Python version, we will increment the libraryâs minor version number to reflect this change.
Contribution guidelines
Weights & Biases â¤ï¸ open source, and we welcome contributions from the community! See the Contribution guide for more information on the development workflow and the internals of the wandb library. For wandb bugs and feature requests, visit GitHub Issues or contact support@wandb.com.
W&B Community
Be a part of the growing W&B Community and interact with the W&B team in our Discord. Stay connected with the latest ML updates and tutorials with W&B Fully Connected.
License
Top Related Projects
Open source platform for the machine learning lifecycle
Aim 💫 — An easy-to-use & supercharged open-source experiment tracker.
Determined is an open-source machine learning platform that simplifies distributed training, hyperparameter tuning, experiment tracking, and resource management. Works with PyTorch and TensorFlow.
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot