{/ Эта страница автоматически генерируется из SKILL.md навыка с помощью website/scripts/generate-skill-docs.py. Редактируйте исходный SKILL.md, а не эту страницу. /}
Weights And Biases
W&B: логирование ML-экспериментов, sweeps, реестр моделей, дашборды.
Метаданные навыка
| Источник | Встроенный (устанавливается по умолчанию) |
| Путь | skills/mlops/evaluation/weights-and-biases |
| Версия | 1.0.0 |
| Автор | Orchestra Research |
| Лицензия | MIT |
| Зависимости | wandb |
| Платформы | linux, macos, windows |
| Теги | MLOps, Weights And Biases, WandB, Experiment Tracking, Hyperparameter Tuning, Model Registry, Collaboration, Real-Time Visualization, PyTorch, TensorFlow, HuggingFace |
Справочник: полный SKILL.md
ℹ️ Info
Ниже приведено полное описание навыка, которое Hermes загружает при активации этого навыка. Это то, что агент видит в качестве инструкций, когда навык активен.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=your_api_key_here
Быстрый старт
Базовое отслеживание экспериментов
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
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
sweep_id = wandb.sweep(sweep_config, project="my-project")
Определение функции обучения
def train():
# Инициализация запуска
run = wandb.init()
# Доступ к параметрам sweep
lr = wandb.config.learning_rate
batch_size = wandb.config.batch_size
optimizer_name = wandb.config.optimizer
# Построение модели с конфигурацией sweep
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
})
# Запуск sweep
wandb.agent(sweep_id, function=train, count=50) # Выполнить 50 попыток
Стратегии sweep
# Grid search - полный перебор
sweep_config = {
'method': 'grid',
'parameters': {
'lr': {'values': [0.001, 0.01, 0.1]},
'batch_size': {'values': [16, 32, 64]}
}
}
# Random search
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")
# Добавление callback
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 <run_directory>
Совместная работа в команде
Общий доступ к запускам
# Запуски автоматически доступны по URL
run = wandb.init(project="team-project")
print(f"Поделитесь этим URL: {run.url}")
Командные проекты
- Создайте командный аккаунт на wandb.ai
- Добавьте участников команды
- Установите видимость проекта (private/public)
- Используйте артефакты и реестр моделей на уровне команды
Цены
- Free: Неограниченные публичные проекты, 100 ГБ хранилища
- Academic: Бесплатно для студентов/исследователей
- Teams: $50/место/месяц, приватные проекты, неограниченное хранилище
- Enterprise: Индивидуальные цены, опции on-prem
Ресурсы
- Документация: https://docs.wandb.ai
- GitHub: https://github.com/wandb/wandb (10,5k+ звёзд)
- Примеры: https://github.com/wandb/examples
- Сообщество: https://wandb.ai/community
- Discord: https://wandb.me/discord
См. также
references/sweeps.md- Полное руководство по оптимизации гиперпараметровreferences/artifacts.md- Паттерны версионирования данных и моделейreferences/integrations.md- Примеры для конкретных фреймворков