Wandb Carbs
Wandb Carbs is a Python package that integrates the CARBS (Cost-Aware Bayesian Search) hyperparameter optimization library with Weights & Biases (W&B) sweeps. It enables cost-aware Bayesian parameter search using W&B's sweep functionality, allowing for efficient hyperparameter optimization across multiple parallel agents while storing all state within W&B.
Table of Contents
Features
- Cost-Aware Bayesian Optimization: Optimize hyperparameters considering both performance and computational cost.
- Seamless W&B Integration: Leverage W&B sweeps for distributed hyperparameter optimization with state stored in W&B.
- Parallel Execution: Support multiple parallel agents running as part of the sweep.
- Automatic State Management: Each agent initializes with observations from completed runs and generates suggestions for incomplete runs.
- Customizable Parameter Spaces: Support for
LogSpace,LogitSpace, andLinearSpaceparameter spaces.
Installation
You can install Wandb Carbs via pip:
pip install wandb_carbs
Usage
Prerequisites
- An account on Weights & Biases.
- Basic understanding of CARBS for Bayesian optimization.
- Familiarity with W&B sweeps.
How It Works
CARBS performs cost-aware Bayesian parameter search but doesn't natively integrate with W&B sweeps. Wandb Carbs bridges this gap by:
- Creating a W&B Sweep: Converts CARBS parameter definitions into a W&B sweep configuration.
- Initializing Agents: Each sweep agent run creates a new CARBS instance.
- State Initialization: Agents initialize with observations from completed runs in the sweep and generate suggestions for incomplete runs.
- Parameter Suggestion: Generates a suggestion for the current run and updates the run's configuration with the suggested parameters.
- Recording Results: After the run completes, it stores the CARBS objective and cost in the run's metadata.
This setup allows multiple parallel agents to run as part of the sweep while storing all the state in W&B.
Creating a Sweep
First, define your parameter spaces using CARBS:
from carbs import Param, LogSpace, LinearSpace
# Define parameter spaces
params = [
Param(name='learning_rate', space=LogSpace(min=1e-5, max=1e-1)),
Param(name='batch_size', space=LinearSpace(min=16, max=128, is_integer=True)),
]
Use the create_sweep function from Wandb Carbs to create a W&B sweep:
from wandb_carbs import create_sweep
sweep_id = create_sweep(
sweep_name='My CARBS Sweep',
wandb_entity='your_wandb_entity',
wandb_project='your_wandb_project',
carbs_spaces=params
)
This function converts the CARBS parameters into a W&B sweep configuration and returns a sweep_id that you can use to manage the sweep.
Running an Experiment
In your training script, integrate Wandb Carbs:
import wandb
from wandb_carbs import WandbCarbs
from carbs import CARBS
def train():
# Initialize W&B run
wandb.init()
# Initialize CARBS
carbs = CARBS(params=params)
# Initialize Wandb Carbs
wandb_carbs = WandbCarbs(carbs=carbs)
# Get hyperparameters suggestion
suggestion = wandb_carbs.suggest()
# Your training code here
# The suggested parameters are in wandb.config
model = build_model(wandb.config)
performance = evaluate_model(model)
# Record observation
objective = performance['accuracy'] # The metric you aim to optimize
cost = performance['training_time'] # Computational cost measure
wandb_carbs.record_observation(objective=objective, cost=cost)
# Finish the run
wandb.finish()
if __name__ == '__main__':
train()
Note: The suggested hyperparameters are automatically stored in wandb.config by the W&B agent; therefore, you don't need to manually update wandb.config with the suggestion.
Examples
Full Example
import wandb
from wandb_carbs import WandbCarbs, create_sweep
from carbs import CARBS, Param, LogSpace, LinearSpace
# Define parameter spaces
params = [
Param(name='learning_rate', space=LogSpace(min=1e-5, max=1e-1)),
Param(name='batch_size', space=LinearSpace(min=16, max=128, is_integer=True)),
]
# Create a sweep
sweep_id = create_sweep(
sweep_name='My CARBS Sweep',
wandb_entity='your_wandb_entity',
wandb_project='your_wandb_project',
carbs_spaces=params
)
def train():
# Initialize W&B run
wandb.init()
# Initialize CARBS
carbs = CARBS(params=params)
# Initialize Wandb Carbs
wandb_carbs = WandbCarbs(carbs=carbs)
# Get hyperparameters suggestion
suggestion = wandb_carbs.suggest()
# Your training code here
# The suggested parameters are in wandb.config
model = build_model(wandb.config)
performance = evaluate_model(model)
# Record observation
objective = performance['accuracy']
cost = performance['training_time']
wandb_carbs.record_observation(objective=objective, cost=cost)
# Finish the run
wandb.finish()
if __name__ == '__main__':
train()
Managing the Sweep
- Use the
sweep_idreturned bycreate_sweepto monitor and manage your sweep in the W&B dashboard. - Ensure that all agents (parallel runs) are correctly configured to run the
trainfunction.
Notes
- Replace
your_wandb_entityandyour_wandb_projectwith your actual W&B entity and project names. - The
objectiveshould be the metric you aim to optimize (e.g., accuracy, F1 score). - The
costcan be any measure of computational cost, like training time, memory usage, or FLOPs. - Ensure that your
build_modelandevaluate_modelfunctions use the parameters fromwandb.config.
References
- CARBS: For more detailed instructions on CARBS, visit the CARBS GitHub repository.
- Weights & Biases: Learn more about W&B sweeps here.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Metadata
Release files for wandb_carbs 0.0.8
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| wandb_carbs-0.0.8.tar.gz | 6.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| wandb_carbs-0.0.8-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 17.2 kB
Release files / wandb_carbs-0.0.8.tar.gz
| Download URL | wandb_carbs-0.0.8.tar.gz |
|---|---|
| Size | 6.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e071650d8fe03e8d2e82eae4c940399168ae6a2be1ee4694f5825b6674c0d087
|
|
BLAKE2b-256 checksum How to use checksums |
6ea66884cb1fa092dfe8518ad89b05950e65922e293dfa67bf81424e5cab4be7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.8.3 CPython/3.11.7 Darwin/23.6.0
|
Release files / wandb_carbs-0.0.8-py3-none-any.whl
| Download URL | wandb_carbs-0.0.8-py3-none-any.whl |
|---|---|
| Size | 10.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
552cc37d9c4cdb93762d4ba6aa9fe3b335aa1047683b1be4be4932464b9fbb45
|
|
BLAKE2b-256 checksum How to use checksums |
0c4a4a647763b27f7fc30ef4d2dfbfa2881dfad2d023178096f50a18444d6e8e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.8.3 CPython/3.11.7 Darwin/23.6.0
|