Перейти к основному содержимому

Weights And Biases

W&B: логирование ML-экспериментов, подбор гиперпараметров, реестр моделей, дашборды.

Метаданные навыка​

ИсточникВстроенный (устанавливается по умолчанию)
Путьskills/mlops/evaluation/weights-and-biases
Версия1.0.0
АвторOrchestra Research
ЛицензияMIT
Зависимостиwandb
Платформыlinux, macos, windows
ТегиMLOps, Weights And Biases, WandB, Отслеживание экспериментов, Настройка гиперпараметров, Реестр моделей, Совместная работа, Визуализация в реальном времени, PyTorch, TensorFlow, HuggingFace

Справочник: полный SKILL.md​

к сведению

Ниже приведено полное описание навыка, которое VibeOS загружает при его активации. Агент видит эти инструкции, когда навык активен.

Weights & Biases: отслеживание ML-экспериментов и MLOps

Когда использовать этот навык​

Используйте Weights & Biases (W&B), когда вам нужно:

  • Отслеживать ML-эксперименты с автоматическим логированием метрик
  • Визуализировать обучение на дашбордах в реальном времени
  • Сравнивать запуски по гиперпараметрам и конфигурациям
  • Оптимизировать гиперпараметры с помощью автоматических подборов (sweeps)
  • Управлять реестром моделей с версионированием и отслеживанием происхождения
  • Совместно работать над ML-проектами в командных пространствах
  • Отслеживать артефакты (наборы данных, модели, код) с историей изменений

Пользователи: 200 000+ ML-специалистов | Звёзды на GitHub: 10.5k+ | Интеграции: 100+

Установка​

# Установка W&B
pip install wandb

# Вход (создаёт API-ключ)
wandb login

# Или установите API-ключ программно
export WANDB_API_KEY=ваш_api_ключ

Быстрый старт​

Базовое отслеживание экспериментов​

import wandb

# Инициализация запуска
run = wandb.init(
project="my-project",
config={
"learning_rate": 0.001,
"epochs": 10,
"batch_size": 32,
"architecture": "ResNet50"
}
)

# Цикл обучения
for epoch in range(run.config.epochs):
# Ваш код обучения
train_loss = train_epoch()
val_loss = validate()

# Логирование метрик
wandb.log({
"epoch": epoch,
"train/loss": train_loss,
"val/loss": val_loss,
"train/accuracy": train_acc,
"val/accuracy": val_acc
})

# Завершение запуска
wandb.finish()

С PyTorch​

import torch
import wandb

# Инициализация
wandb.init(project="pytorch-demo", config={
"lr": 0.001,
"epochs": 10
})

# Доступ к конфигурации
config = wandb.config

# Цикл обучения
for epoch in range(config.epochs):
for batch_idx, (data, target) in enumerate(train_loader):
# Прямой проход
output = model(data)
loss = criterion(output, target)

# Обратный проход
optimizer.zero_grad()
loss.backward()
optimizer.step()

# Логирование каждые 100 батчей
if batch_idx % 100 == 0:
wandb.log({
"loss": loss.item(),
"epoch": epoch,
"batch": batch_idx
})

# Сохранение модели
torch.save(model.state_dict(), "model.pth")
wandb.save("model.pth") # Загрузка в W&B

wandb.finish()

Основные концепции​

1. Проекты и запуски​

Проект: коллекция связанных экспериментов Запуск: однократное выполнение вашего скрипта обучения

# Создание/использование проекта
run = wandb.init(
project="image-classification",
name="resnet50-experiment-1", # Необязательное имя запуска
tags=["baseline", "resnet"], # Организация с помощью тегов
notes="Первый базовый запуск" # Добавление заметок
)

# Каждый запуск имеет уникальный ID
print(f"ID запуска: {run.id}")
print(f"URL запуска: {run.url}")

2. Отслеживание конфигурации​

Автоматическое отслеживание гиперпараметров:

config = {
# Архитектура модели
"model": "ResNet50",
"pretrained": True,

# Параметры обучения
"learning_rate": 0.001,
"batch_size": 32,
"epochs": 50,
"optimizer": "Adam",

# Параметры данных
"dataset": "ImageNet",
"augmentation": "standard"
}

wandb.init(project="my-project", config=config)

# Доступ к конфигурации во время обучения
lr = wandb.config.learning_rate
batch_size = wandb.config.batch_size

3. Логирование метрик​

# Логирование скаляров
wandb.log({"loss": 0.5, "accuracy": 0.92})

# Логирование нескольких метрик
wandb.log({
"train/loss": train_loss,
"train/accuracy": train_acc,
"val/loss": val_loss,
"val/accuracy": val_acc,
"learning_rate": current_lr,
"epoch": epoch
})

# Логирование с пользовательской осью X
wandb.log({"loss": loss}, step=global_step)

# Логирование медиа (изображения, аудио, видео)
wandb.log({"examples": [wandb.Image(img) for img in images]})

# Логирование гистограмм
wandb.log({"gradients": wandb.Histogram(gradients)})

# Логирование таблиц
table = wandb.Table(columns=["id", "prediction", "ground_truth"])
wandb.log({"predictions": table})

4. Сохранение контрольных точек модели​

import torch
import wandb

# Сохранение контрольной точки модели
checkpoint = {
'epoch': epoch,
'model_state_dict': model.state_dict(),
'optimizer_state_dict': optimizer.state_dict(),
'loss': loss,
}

torch.save(checkpoint, 'checkpoint.pth')

# Загрузка в W&B
wandb.save('checkpoint.pth')

# Или использование артефактов (рекомендуется)
artifact = wandb.Artifact('model', type='model')
artifact.add_file('checkpoint.pth')
wandb.log_artifact(artifact)

Подбор гиперпараметров (Sweeps)​

Автоматический поиск оптимальных гиперпараметров.

Определение конфигурации подбора​

sweep_config = {
'method': 'bayes', # или 'grid', 'random'
'metric': {
'name': 'val/accuracy',
'goal': 'maximize'
},
'parameters': {
'learning_rate': {
'distribution': 'log_uniform',
'min': 1e-5,
'max': 1e-1
},
'batch_size': {
'values': [16, 32, 64, 128]
},
'optimizer': {
'values': ['adam', 'sgd', 'rmsprop']
},
'dropout': {
'distribution': 'uniform',
'min': 0.1,
'max': 0.5
}
}
}

# Инициализация подбора
sweep_id = wandb.sweep(sweep_config, project="my-project")

Определение функции обучения​

def train():
# Инициализация запуска
run = wandb.init()

# Доступ к параметрам подбора
lr = wandb.config.learning_rate
batch_size = wandb.config.batch_size
optimizer_name = wandb.config.optimizer

# Построение модели с конфигурацией подбора
model = build_model(wandb.config)
optimizer = get_optimizer(optimizer_name, lr)

# Цикл обучения
for epoch in range(NUM_EPOCHS):
train_loss = train_epoch(model, optimizer, batch_size)
val_acc = validate(model)

# Логирование метрик
wandb.log({
"train/loss": train_loss,
"val/accuracy": val_acc
})

# Запуск подбора
wandb.agent(sweep_id, function=train, count=50) # Выполнить 50 попыток

Стратегии подбора​

# Полный перебор (Grid search)
sweep_config = {
'method': 'grid',
'parameters': {
'lr': {'values': [0.001, 0.01, 0.1]},
'batch_size': {'values': [16, 32, 64]}
}
}

# Случайный поиск
sweep_config = {
'method': 'random',
'parameters': {
'lr': {'distribution': 'uniform', 'min': 0.0001, 'max': 0.1},
'dropout': {'distribution': 'uniform', 'min': 0.1, 'max': 0.5}
}
}

# Байесовская оптимизация (рекомендуется)
sweep_config = {
'method': 'bayes',
'metric': {'name': 'val/loss', 'goal': 'minimize'},
'parameters': {
'lr': {'distribution': 'log_uniform', 'min': 1e-5, 'max': 1e-1}
}
}

Артефакты​

Отслеживание наборов данных, моделей и других файлов с историей изменений.

Логирование артефактов​

# Создание артефакта
artifact = wandb.Artifact(
name='training-dataset',
type='dataset',
description='Обучающая выборка ImageNet',
metadata={'size': '1.2M изображений', 'split': 'train'}
)

# Добавление файлов
artifact.add_file('data/train.csv')
artifact.add_dir('data/images/')

# Логирование артефакта
wandb.log_artifact(artifact)

Использование артефактов​

# Загрузка и использование артефакта
run = wandb.init(project="my-project")

# Загрузка артефакта
artifact = run.use_artifact('training-dataset:latest')
artifact_dir = artifact.download()

# Использование данных
data = load_data(f"{artifact_dir}/train.csv")

Реестр моделей​

# Логирование модели как артефакта
model_artifact = wandb.Artifact(
name='resnet50-model',
type='model',
metadata={'architecture': 'ResNet50', 'accuracy': 0.95}
)

model_artifact.add_file('model.pth')
wandb.log_artifact(model_artifact, aliases=['best', 'production'])

# Привязка к реестру моделей
run.link_artifact(model_artifact, 'model-registry/production-models')

Примеры интеграции​

HuggingFace Transformers​

from transformers import Trainer, TrainingArguments
import wandb

# Инициализация W&B
wandb.init(project="hf-transformers")

# Аргументы обучения с W&B
training_args = TrainingArguments(
output_dir="./results",
report_to="wandb", # Включение логирования в W&B
run_name="bert-finetuning",
logging_steps=100,
save_steps=500
)

# Trainer автоматически логирует в W&B
trainer = Trainer(
model=model,
args=training_args,
train_dataset=train_dataset,
eval_dataset=eval_dataset
)

trainer.train()

PyTorch Lightning​

from pytorch_lightning import Trainer
from pytorch_lightning.loggers import WandbLogger
import wandb

# Создание логгера W&B
wandb_logger = WandbLogger(
project="lightning-demo",
log_model=True # Логирование контрольных точек модели
)

# Использование с Trainer
trainer = Trainer(
logger=wandb_logger,
max_epochs=10
)

trainer.fit(model, datamodule=dm)

Keras/TensorFlow​

import wandb
from wandb.keras import WandbCallback

# Инициализация
wandb.init(project="keras-demo")

# Добавление колбэка
model.fit(
x_train, y_train,
validation_data=(x_val, y_val),
epochs=10,
callbacks=[WandbCallback()] # Автоматическое логирование метрик
)

Визуализация и анализ​

Пользовательские графики​

# Логирование пользовательских визуализаций
import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot(x, y)
wandb.log({"custom_plot": wandb.Image(fig)})

# Логирование матрицы ошибок
wandb.log({"conf_mat": wandb.plot.confusion_matrix(
probs=None,
y_true=ground_truth,
preds=predictions,
class_names=class_names
)})

Отчёты​

Создание доступных для общего доступа отчётов в интерфейсе W&B:

  • Объединение запусков, графиков и текста
  • Поддержка Markdown
  • Встраиваемые визуализации
  • Совместная работа в команде

Лучшие практики​

1. Организация с помощью тегов и групп​

wandb.init(
project="my-project",
tags=["baseline", "resnet50", "imagenet"],
group="resnet-experiments", # Группировка связанных запусков
job_type="train" # Тип задачи
)

2. Логирование всего важного​

# Логирование системных метрик
wandb.log({
"gpu/util": gpu_utilization,
"gpu/memory": gpu_memory_used,
"cpu/util": cpu_utilization
})

# Логирование версии кода
wandb.log({"git_commit": git_commit_hash})

# Логирование разбивки данных
wandb.log({
"data/train_size": len(train_dataset),
"data/val_size": len(val_dataset)
})

3. Использование описательных имён​

# ✅ Хорошо: описательные имена запусков
wandb.init(
project="nlp-classification",
name="bert-base-lr0.001-bs32-epoch10"
)

# ❌ Плохо: общие имена
wandb.init(project="nlp", name="run1")

4. Сохранение важных артефактов​

# Сохранение финальной модели
artifact = wandb.Artifact('final-model', type='model')
artifact.add_file('model.pth')
wandb.log_artifact(artifact)

# Сохранение предсказаний для анализа
predictions_table = wandb.Table(
columns=["id", "input", "prediction", "ground_truth"],
data=predictions_data
)
wandb.log({"predictions": predictions_table})

5. Использование офлайн-режима для нестабильных соединений​

import os

# Включение офлайн-режима
os.environ["WANDB_MODE"] = "offline"

wandb.init(project="my-project")
# ... ваш код ...

# Синхронизация позже
# wandb sync <директория_запуска>

Совместная работа в команде​

Общий доступ к запускам​

# Запуски автоматически доступны для общего доступа по URL
run = wandb.init(project="team-project")
print(f"Поделитесь этим URL: {run.url}")

Командные проекты​

  • Создайте командный аккаунт на wandb.ai
  • Добавьте участников команды
  • Настройте видимость проекта (приватный/публичный)
  • Используйте командные артефакты и реестр моделей

Цены​

  • Бесплатный: неограниченное количество публичных проектов, 100 ГБ хранилища
  • Академический: бесплатно для студентов и исследователей
  • Teams: $50/место/месяц, приватные проекты, неограниченное хранилище
  • Enterprise: индивидуальные цены, локальное развёртывание

Ресурсы​

См. также​

  • references/sweeps.md — полное руководство по оптимизации гиперпараметров
  • references/artifacts.md — шаблоны версионирования данных и моделей
  • references/integrations.md — примеры для конкретных фреймворков