{/ Эта страница автоматически генерируется из 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}")

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

Цены

Ресурсы

См. также