Skip to main content

基本简介

W&BWeights & Biases的简称,常见的Python包名和命令行工具名是wandbW&B不是单纯的曲线绘图工具,而是围绕实验生命周期建立的一套实验跟踪与协作平台。在机器学习工程中,W&B主要用于记录、可视化、比较和复现实验。它把一次训练、评估、数据处理或推理任务抽象为一个Run,在Run中记录超参数、训练指标、系统资源、日志、模型文件、数据集版本、预测样本和最终结果摘要,再通过Web工作区进行统一管理。

此外,需要明确一个容易误解的点:W&B并不预置一组固定的“模型效果指标”。lossaccuracyF1AUCBLEUROUGE等任务指标由训练代码通过run.log()主动写入;W&B负责把这些用户定义指标和自动采集的系统指标、配置、产物、表格、媒体、报告等数据关联到同一个Run中,并提供过滤、排序、对比、可视化和版本追踪能力。

解决的核心问题

机器学习训练往往会反复试验数据版本、模型结构、优化器、学习率、批次大小、随机种子、训练步数和评估策略。如果缺少系统化的实验管理,常见问题包括:

  • 实验记录分散:关键指标散落在终端输出、日志文件、手工表格和模型目录中,实验结束后难以判断某个模型文件对应哪组参数。
  • 实验不可复现:只保存最终模型而没有保存超参数、代码版本、数据集版本、运行命令、随机种子和依赖环境时,很难复现同等结果。
  • 对比效率低:当一次调参产生几十到几千个Run时,仅靠本地文件名和手工表格无法高效筛选最优实验。
  • 训练异常难定位:模型指标下降可能来自数据问题、学习率问题、显存不足、GPU利用率低、输入流水线阻塞或网络存储抖动,需要把任务指标和系统指标放在同一时间轴下分析。
  • 协作成本高:团队成员需要共享实验结果、图表、结论和模型版本,如果只依赖截图或临时文档,容易造成信息丢失和版本混乱。
  • 模型产物难治理:数据集、预处理结果、检查点、最终模型和评估表格之间缺少可追踪关系时,后续上线、回滚和审计会变得困难。

W&B通过RunProjectConfigHistorySummaryArtifactsTablesSweepsReports等对象,把训练过程中的“输入、过程、输出、结论”串成一条可查询、可比较、可复现的链路。

主要优点

  • 接入成本低:典型训练脚本只需要wandb.init()run.log()即可记录实验,PyTorchTensorFlowKerasHugging Face Transformers等生态都有集成方式。
  • 指标与配置强关联Config保存学习率、批次大小、模型结构、数据集名称等独立变量,History保存训练过程指标,Summary保存最终或聚合结果,便于按超参数过滤、分组和排序。
  • 自动记录系统指标wandb会自动采集CPU、内存、磁盘、网络和多类加速器指标。官方系统指标参考说明,默认每15秒自动记录一次系统指标。
  • 适合多实验对比:工作区可以把多个Run放在同一视图中,按照指标曲线、配置列、标签、分组和状态筛选实验。
  • 支持富媒体和结构化结果:除标量曲线外,还可以记录图像、视频、音频、直方图、TablePlotly图表、HTML3D对象和分子结构,适合计算机视觉、语音、生成式模型、推荐系统和科学计算任务。
  • 支持产物版本与血缘关系Artifacts可以版本化数据集、模型、检查点和评估结果,记录一个Run使用了哪些输入产物,又生成了哪些输出产物。
  • 内置超参数搜索Sweeps支持网格搜索、随机搜索和贝叶斯搜索,并可以在一台或多台机器上并行运行agent
  • 支持报告和协作Reports可以组织Run、嵌入图表、写下结论并分享给团队成员,适合实验复盘和评审。
  • 支持在线、离线和私有部署:默认可以同步到wandb.ai,也可以通过WANDB_MODE=offline离线记录后再同步;企业场景可选择Multi-tenant CloudDedicated CloudSelf-Managed等部署方式。

基本架构

W&B的实验跟踪数据流可以概括为以下结构:

一次典型的训练流程如下:

在这个架构中,wandb SDK会在训练进程旁边启动后台同步逻辑。官方wandb.init()参考说明,默认会把数据同步到wandb.ai并实时更新可视化;当网络不可用或显式设置离线模式时,数据会先保存到本地wandb目录,再通过wandb sync上传。

实验管理对象

理解W&B需要先理解它的对象模型。下面这些对象不是模型评估指标本身,但它们决定了实验如何被组织、查询和复现。

对象含义实验管理用途
Entity用户名、团队名或组织范围决定Run归属和权限边界
Project一组相关实验的集合通常对应一个模型任务、一个数据集或一个研发项目
Run一次计算过程表示一次训练、评估、推理、数据处理或调参试验
Config输入配置和超参数保存学习率、模型结构、数据集、随机种子等独立变量
History随时间写入的指标序列保存每个steplossaccuracy、学习率等曲线
Summary实验最终摘要保存最终值、最小值、最大值、均值等便于排序的结果
对象含义实验管理用途
Artifact可版本化的输入或输出产物追踪数据集、模型、检查点、评估文件和血缘关系
Table二维结构化数据分析预测样本、错误样本、评估明细和混合媒体结果
Sweep超参数搜索任务统一调度多组配置并根据目标指标优化
Report可分享的实验文档固化图表、结论和实验复盘过程
Workspace交互式工作区查看、过滤、分组、对比和保存实验视图
Registry模型或产物集合管理候选模型、版本别名和跨项目复用

官方Run参考文档把Run定义为一个被W&B记录的计算单元,通常就是一个机器学习实验。wandb.init()创建Runrun.log()把指标、图像、视频、表格等数据写入该Run

实验管理指标

指标体系说明

W&B的指标体系可以分为三类:

  • 用户定义的任务指标:由训练代码主动调用run.log()写入,例如train/losseval/accuracyeval/f1learning_rate。这类指标决定模型效果和训练状态。
  • 自动采集的系统指标:由wandb SDK自动记录,例如CPU、内存、磁盘、网络、GPU利用率、显存、温度、功耗等。官方文档说明,这些指标默认每15秒采集一次。
  • 实验管理元数据和产物指标:包括ConfigSummaryArtifact版本、Run状态、标签、分组、日志、文件、表格和媒体。这些数据不一定是数值曲线,但对实验对比、复现和协作同样关键。

任务效果指标

任务效果指标由使用者根据业务和模型任务定义。W&B不会判断某个指标是否适合任务,但会提供时间序列、聚合摘要、图表、过滤、排序和对比能力。

指标含义如何用于实验管理
train/loss训练集上的目标函数值判断优化是否收敛,和eval/loss一起判断过拟合
eval/loss验证或测试集损失判断泛化能力,常作为提前停止和模型选择依据
train/accuracy训练集准确率观察模型对训练数据的拟合程度
eval/accuracy验证或测试集准确率分类任务常用主指标,可作为Sweep优化目标
eval/precision预测为正的样本中有多少是真的正样本类别不均衡或误报成本高时重点关注
eval/recall真实正样本中有多少被召回漏报成本高的任务中重点关注
指标含义如何用于实验管理
eval/f1precisionrecall的调和平均在误报和漏报都重要时作为综合指标
eval/auc分类阈值变化下的排序能力二分类和风险评分任务中用于跨阈值比较
eval/map检索或检测任务的平均精度均值目标检测、信息检索等任务常用
eval/bleu机器翻译等生成任务的n-gram匹配指标用于比较文本生成结果与参考答案的重合程度
eval/rouge摘要等任务中基于召回的文本重合指标用于长文本摘要和生成式评估
eval/perplexity语言模型对序列的不确定性度量语言建模和微调任务中常见,越低通常越好

这些指标的典型使用方式是把训练指标和验证指标放在同一工作区中对比:

训练过程指标

训练过程指标用于解释任务效果指标为什么变化。它们通常不是最终业务指标,但对定位训练问题非常关键。

指标含义管理方法
epoch当前训练轮次作为横轴或过滤条件,便于按完整数据遍历次数比较
global_step全局训练步数多数曲线的默认横轴,跨不同epoch长度时更稳定
learning_rate当前学习率结合loss观察学习率调度是否合理
grad_norm梯度范数识别梯度爆炸、梯度消失或裁剪是否生效
weight_norm参数范数观察权重是否异常增大或趋近零
train/tokens_per_second每秒处理的token大模型训练中衡量吞吐效率
指标含义管理方法
train/samples_per_second每秒处理的样本数比较不同批次大小、数据加载策略和硬件配置
train/step_time单步训练耗时结合GPU利用率定位性能瓶颈
data/load_time数据加载耗时判断输入流水线是否拖慢训练
optimizer/lr优化器实际使用学习率多参数组优化器中比单个learning_rate更精确
loss_scale混合精度训练中的缩放因子诊断FP16训练下的数值稳定性
train/clip_fraction被梯度裁剪的比例判断梯度裁剪是否过于频繁

推荐把训练过程指标和模型效果指标使用统一命名空间,例如train/losseval/lossoptimizer/lrsystem/gpu_utilW&B工作区默认会根据指标名前缀组织面板,这种命名方式有利于自动分区和筛选。

配置指标

Config保存的是实验输入变量。官方配置文档强调,Config适合保存超参数、输入设置和其他独立变量;而lossaccuracy等输出指标应使用run.log()记录。

配置项含义如何使用
model模型名称或结构按模型结构分组对比不同实验
dataset数据集名称或版本确认结果是否来自同一数据版本
learning_rate初始学习率分析学习率对收敛速度和最终效果的影响
batch_size批次大小比较吞吐、显存占用和泛化效果
optimizer优化器类型对比AdamWSGD等优化策略
scheduler学习率调度器解释曲线变化和训练后期效果
配置项含义如何使用
seed随机种子区分随机波动和真实改进
precision数值精度对比FP32FP16BF16下的性能和稳定性
max_steps最大训练步数防止把训练预算不同的实验直接比较
data_revision数据版本或Artifact别名将指标和数据版本绑定,支持结果追溯
code_version代码提交或镜像版本帮助复现实验环境
hardware硬件类型对比吞吐和资源利用率时作为过滤条件

在工作区中,Config通常用于:

  • learning_ratebatch_sizemodel等列排序和筛选。
  • 把相同配置的多个随机种子Run分组,观察均值和方差。
  • Sweep中定义搜索空间,并把目标指标与配置值关联起来。
  • 在实验报告中解释“哪个配置导致了指标提升”。

摘要指标

Summary是每个Run最终用于排序、筛选和快速比较的摘要结果。run.log()写入的指标会进入历史记录,并更新对应指标的摘要值。通过run.define_metric()可以为指标指定摘要聚合方式,例如minmaxmeanlastfirst

摘要类型含义适用指标
last最后一次记录的值accuracylosslearning_rate等常规曲线
min历史最小值eval/losstrain/loss、延迟、错误率
max历史最大值eval/accuracyeval/f1throughput
mean历史均值多次评估结果、资源利用率均值
first首次记录值初始学习率、初始损失等

摘要指标适合放在项目Runs表格中作为列展示。例如,可以按eval/accuracy.max降序排列,快速找到验证准确率最高的实验;也可以按eval/loss.min升序排列,选择泛化损失最低的候选模型。

自动系统指标

W&B自动系统指标用于回答“模型为什么慢、为什么不稳定、为什么资源浪费”。官方系统指标参考列出了CPU、磁盘、内存、网络、NVIDIA GPUAMD GPUApple ARM Mac GPUGraphcore IPUGoogle Cloud TPUAWS TrainiumOpenMetrics等类别。

类别代表指标含义与用途
CPUcpuproc.cpu.threads观察训练进程CPU占用和线程数,定位数据加载或预处理瓶颈
内存proc.memory.rssMBproc.memory.percentmemory_percent判断进程内存和系统内存是否接近上限
磁盘disk.indisk.outdisk.{path}.usageGB分析读取数据、写检查点和日志产生的磁盘压力
网络network.sentnetwork.recv分布式训练、远程存储或数据下载时定位网络瓶颈
OpenMetrics外部Prometheus兼容指标接入DCGM Exporter等集群监控指标进行统一分析

加速器系统指标

加速器指标通常是训练性能诊断中最有价值的系统指标。W&B会根据硬件和运行环境采集可用数据。

加速器代表指标含义与用途
NVIDIA GPUgpu.{gpu_index}.gpuGPU计算利用率,低利用率常见于数据加载、通信或批次太小
NVIDIA GPUgpu.{gpu_index}.memorygpu.{gpu_index}.memoryAllocatedBytes显存利用率和已分配显存,帮助判断是否接近OOM
NVIDIA GPUgpu.{gpu_index}.tempgpu.{gpu_index}.powerWatts温度和功耗,辅助定位降频、供电或散热问题
AMD GPUgpu.{gpu_index}.gpugpu.{gpu_index}.memoryAllocated来自rocm-smi的利用率和显存数据
Apple ARM Mac GPUgpu.0.gpugpu.0.memoryAllocated本地Mac训练或调试时的GPU利用情况
加速器代表指标含义与用途
Graphcore IPUipu.{device_id}.{metric_key}记录IPU温度、功耗、利用率和链路速率等设备统计
Google Cloud TPUtpu.{tpu_index}.tensorcoreUtilizationtpu.{tpu_index}.hbmCapacityUsage观察TensorCore利用率和HBM占用
Google Cloud TPUtpu.collectiveE2ELatency.{label}.{stat}Us多切片或分布式通信场景下定位集合通信延迟
AWS Trainiumtrn.{core_index}.neuroncore_utilization观察NeuronCore利用率
AWS Trainiumtrn.host_total_memory_usagetrn.neuron_device_total_memory_usage观察主机内存和Neuron设备内存

在实验管理中,系统指标常用于以下判断:

  • GPU利用率低但CPU高:可能是数据预处理或数据加载阻塞。
  • GPU利用率低且网络吞吐高:可能是远程数据读取、分布式通信或对象存储访问导致等待。
  • 显存长期接近上限:需要减小batch_size、启用梯度检查点或调整序列长度。
  • disk.in高且训练步耗时高:需要检查数据集格式、缓存策略和本地盘性能。
  • 同一配置下吞吐下降:对比系统指标可确认是否由硬件、集群负载或存储抖动造成。

媒体和结构化指标

W&B的数据类型用于把非标量结果纳入实验管理。官方数据类型文档说明,这些类型会封装媒体和结构化数据,并在W&B UI中提供可视化、序列化、存储和读取能力。

类型含义典型用途
wandb.Image图像,可包含掩码、边界框、分割结果视觉模型、生成模型、数据增强检查
wandb.Video视频样本强化学习、视频生成、动作识别
wandb.Audio音频样本语音识别、语音合成、音频生成
wandb.Table可包含文本、数值和媒体的二维表格预测样本、错误分析、评估明细
wandb.Histogram数值分布权重、梯度、激活值分布诊断
wandb.Plotly自定义交互式图表混淆矩阵、聚类图、自定义可视化
类型含义典型用途
wandb.Html自定义HTML内容可视化报告片段或复杂结果展示
wandb.Object3D3D点云或网格自动驾驶、机器人、三维重建
wandb.Molecule分子结构计算化学、药物发现
Artifact中的文件任意文件或目录模型权重、数据快照、日志、配置文件
控制台日志标准输出和错误输出复盘异常、定位报错和保留训练上下文

这些指标适合回答标量曲线无法回答的问题。例如两个模型eval/accuracy都达到90%,但通过Table查看错误样本可能发现一个模型主要错在长尾类别,另一个模型主要错在噪声数据;通过ImageVideo可以直观看到生成结果是否存在伪影;通过Histogram可以发现某层权重或梯度分布异常。

产物指标

Artifacts用于跟踪和版本化Run的输入与输出。官方文档给出的典型例子是:训练Run使用数据集作为输入,产生训练好的模型作为输出。与普通文件上传相比,Artifacts的核心价值在于版本、别名和血缘关系。

产物类型含义如何管理
dataset训练、验证或测试数据记录数据版本,避免不同数据混入同一结果
preprocessed-dataset预处理后的数据追踪预处理配置和结果版本
model最终模型或候选模型使用latestbestproduction等别名管理生命周期
checkpoint中间检查点支持恢复训练和回溯某一阶段模型
eval-result评估输出文件或表格固化评估明细,支持后续审计和复查
dependency外部依赖、词表或特征文件保证训练输入完整可追溯

在实验管理中,建议把关键输入和输出都作为Artifact记录:

  • 训练前使用run.use_artifact()声明数据集版本。
  • 训练后使用run.log_artifact()保存模型、检查点和评估结果。
  • 对候选模型使用别名,例如bestcandidateproduction
  • 在报告中引用Artifact版本,避免“这个图对应哪个模型文件”的歧义。

运行状态和组织指标

实验管理不只关注模型分数,还要关注Run是否正常完成、属于哪组实验、由谁触发、用于训练还是评估。

字段含义管理用途
Run.state运行状态,例如runningfinishedfailedcrashedkilled区分有效实验和异常实验
name人类可读的Run名称用于图例和表格快速识别
idRun唯一标识恢复训练、同步离线运行和引用结果
group分组名称把交叉验证、分布式训练或同一批实验聚合展示
job_type作业类型区分trainevalinferencepreprocess
tags标签标注baselinedebugproduction-candidate等语义

groupjob_type在复杂流水线中非常重要。例如一个完整实验可能包含preprocesstraineval三个Run,它们共享同一个group,但通过不同job_type区分阶段。这样既能看到整体流程,也能单独筛选训练或评估结果。

安装与配置

基本安装

W&B的核心安装方式是安装wandb包:

pip install wandb

如果需要在Notebook中使用,也可以在单元格中安装并登录:

!pip install wandb

import wandb
wandb.login()

登录和认证

W&B使用API Key认证。官方快速开始文档说明,可以通过环境变量或交互式登录完成认证:

export WANDB_API_KEY="<your_api_key>"
wandb login

在自动化训练平台、Kubernetes JobSlurm作业和CI环境中,建议使用环境变量注入WANDB_API_KEY,避免把密钥写入代码或配置仓库。

常用初始化参数

wandb.init()用于创建Run。常用参数如下:

参数含义示例
project项目名project="llm-finetune"
entity用户或团队entity="ml-team"
name本次Run显示名name="baseline-lr1e-4"
config超参数和输入配置config={"lr": 1e-4}
tags标签tags=["baseline", "bf16"]
group分组group="ablation-dropout"
job_type作业类型job_type="train"
mode运行模式mode="online"mode="offline"mode="disabled"

mode的含义需要特别注意:

模式含义适用场景
online默认模式,联网时实时同步到W&B服务端日常研发和团队协作
offline本地保存数据,不同步服务端无外网集群、涉密环境或网络不稳定环境
disabled关闭W&B功能,相关方法基本不产生效果单元测试或临时禁用实验记录
shared多进程共享同一个Run的实验性能力分布式训练中特定场景,需按官方限制使用

常用环境变量

官方环境变量文档列出了大量可配置项,下面是实验管理中最常用的一组:

环境变量用途
WANDB_API_KEY设置认证密钥,适合远程机器和自动化任务
WANDB_PROJECT设置默认项目名
WANDB_ENTITY设置默认用户或团队
WANDB_NAME设置Run名称
WANDB_NOTES设置Run说明,支持后续在界面查看
WANDB_TAGS设置逗号分隔的标签
环境变量用途
WANDB_MODE设置onlineofflinedisabled等模式
WANDB_DIR设置本地运行元数据目录,默认相对训练脚本的wandb目录
WANDB_ARTIFACT_DIR设置下载的Artifact保存目录
WANDB_CACHE_DIR设置缓存目录
WANDB_BASE_URL使用私有部署或本地服务时设置服务端地址
WANDB_RESUME控制失败任务恢复策略
WANDB_RUN_ID指定唯一Run ID,用于恢复或同步
WANDB_DISABLE_GIT禁止探测Git仓库和提交信息
WANDB_DISABLE_CODE禁止保存代码或Git diff等代码信息

离线模式与同步

无外网训练环境中,可以使用离线模式:

export WANDB_MODE=offline
python train.py

训练结束后,把本地wandb目录保留下来,在可访问W&B服务端的环境中同步:

wandb sync --sync-all

如果只同步某个Run,可以指定本地运行目录:

wandb sync ./wandb/run-YYYYMMDD_HHMMSS-RUN_ID

官方wandb sync文档还说明,指定路径同步时会默认包含TensorBoard事件文件;使用--sync-all时默认不启用TensorBoard同步,需要显式加上--sync-tensorboard

私有部署

W&B支持多种部署形态:

部署方式含义适用场景
Multi-tenant CloudW&B管理的多租户云服务快速试用、普通团队协作
Dedicated CloudW&B管理的单租户隔离云环境对隔离、合规和数据驻留有要求的组织
Self-Managed部署到自有云或本地基础设施强监管、内网、需要自主管理基础设施的组织

官方部署文档说明,Self-Managed需要组织自行负责部署、基础设施安全、合规、升级和补丁,并依赖KubernetesMySQL、对象存储和Redis等基础组件。是否选择私有部署,应结合数据敏感性、合规要求、运维能力和成本评估。

使用示例

基础实验记录

下面示例展示如何记录配置、训练指标和最终摘要:

import random
import wandb

config = {
"model": "mlp",
"dataset": "demo",
"learning_rate": 0.01,
"epochs": 10,
}

with wandb.init(project="wandb-demo", name="basic-run", config=config) as run:
run.define_metric("train/loss", summary="min")
run.define_metric("eval/accuracy", summary="max")

for epoch in range(config["epochs"]):
train_loss = 1.0 / (epoch + 1) + random.random() * 0.05
eval_accuracy = 0.65 + epoch * 0.03 + random.random() * 0.01

run.log(
{
"epoch": epoch,
"train/loss": train_loss,
"eval/accuracy": eval_accuracy,
}
)

run.summary["best_epoch"] = config["epochs"] - 1

运行后可以在W&B项目页面看到train/losseval/accuracy曲线,并在Runs表格中按摘要值排序。

PyTorch训练循环

下面示例展示PyTorch训练中常见的接入方式。run.watch()可以记录模型参数和梯度,run.log()记录训练指标。

import torch
import torch.nn as nn
import wandb

def train(model, train_loader, val_loader):
config = {
"epochs": 5,
"learning_rate": 1e-3,
"batch_size": 128,
"optimizer": "AdamW",
}

with wandb.init(project="pytorch-demo", config=config, job_type="train") as run:
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = model.to(device)
optimizer = torch.optim.AdamW(model.parameters(), lr=run.config["learning_rate"])
criterion = nn.CrossEntropyLoss()

run.watch(model, log="gradients", log_freq=100)

global_step = 0
for epoch in range(run.config["epochs"]):
model.train()
for images, labels in train_loader:
images = images.to(device)
labels = labels.to(device)

optimizer.zero_grad()
logits = model(images)
loss = criterion(logits, labels)
loss.backward()
optimizer.step()

run.log(
{
"epoch": epoch,
"train/loss": loss.item(),
"optimizer/lr": optimizer.param_groups[0]["lr"],
},
step=global_step,
)
global_step += 1

val_accuracy = evaluate_accuracy(model, val_loader, device)
run.log({"eval/accuracy": val_accuracy}, step=global_step)

这个示例中,项目表格可以按config.learning_rateconfig.batch_sizeeval/accuracy对比不同实验;系统面板可以同时查看GPU利用率和显存变化。

记录图像和预测表格

下面示例适用于图像分类、目标检测或生成式视觉任务的结果审查:

import wandb

with wandb.init(project="prediction-analysis") as run:
table = wandb.Table(
columns=["image", "label", "prediction", "confidence", "is_correct"]
)

for image, label, prediction, confidence in prediction_samples:
table.add_data(
wandb.Image(image),
label,
prediction,
confidence,
label == prediction,
)

run.log({"eval/predictions": table})

W&B Tables中可以筛选is_correct=false的样本,或者按照confidence倒序找出高置信错误样本。

记录模型Artifact

下面示例展示如何把数据集声明为输入产物,并把训练后的模型作为输出产物保存:

import wandb

with wandb.init(project="artifact-demo", job_type="train") as run:
dataset = run.use_artifact("mnist-preprocessed:latest")
dataset_dir = dataset.download()

model_path = train_model(dataset_dir)

model_artifact = wandb.Artifact(
name="mnist-classifier",
type="model",
metadata={
"framework": "pytorch",
"metric": "eval/accuracy",
},
)
model_artifact.add_file(model_path)
run.log_artifact(model_artifact, aliases=["latest", "candidate"])

这样可以在W&B中看到该模型由哪个数据集版本训练得到,并为后续评估、注册和部署建立追踪关系。

超参数搜索

W&B Sweeps用于自动运行多组超参数配置,并根据指定目标指标搜索更优组合。官方文档说明,Sweeps支持贝叶斯搜索、网格搜索和随机搜索,并可以在一台或多台机器上并行扩展。

method: bayes
metric:
name: eval/accuracy
goal: maximize
parameters:
learning_rate:
values: [0.001, 0.0003, 0.0001]
batch_size:
values: [64, 128, 256]
dropout:
min: 0.1
max: 0.5

启动方式如下:

wandb sweep --project image-classification sweep.yaml
wandb agent <sweep-id>

在训练代码中,从run.config读取当前Sweep分配的配置即可:

import wandb

def train():
with wandb.init() as run:
lr = run.config["learning_rate"]
batch_size = run.config["batch_size"]
dropout = run.config["dropout"]

result = train_and_evaluate(lr=lr, batch_size=batch_size, dropout=dropout)
run.log({"eval/accuracy": result["accuracy"], "eval/loss": result["loss"]})

wandb.agent("<sweep-id>", function=train)

同步TensorBoard日志

如果现有项目已经使用TensorBoard,可以不立即重写日志逻辑,而是让W&B同步TensorBoard事件文件。官方TensorBoard集成文档说明,可以通过sync_tensorboard=True上传TensorBoard日志,并在W&B中和系统指标、Git状态、终端命令等信息一起查看。

import wandb

with wandb.init(project="tb-sync-demo", sync_tensorboard=True) as run:
train_with_tensorboard_logging()

也可以同步历史TensorBoard日志目录:

wandb sync ./logs

这种方式适合从TensorBoard迁移到W&B,或者在保留本地TensorBoard工作流的同时引入集中式实验管理。

与TensorBoard对比

TensorBoardGoogleTensorFlow生态中推出的机器学习可视化工具。官方文档说明,它可以跟踪lossaccuracy等实验指标,展示模型图,将嵌入投影到低维空间,并提供更多可视化能力。PyTorch也通过torch.utils.tensorboard支持写入TensorBoard事件文件。

W&BTensorBoard并不是完全互斥的工具。TensorBoard更像本地优先的训练可视化工具;W&B更像实验管理和协作平台。前者擅长快速查看日志曲线和TensorFlow生态内的可视化;后者在跨项目对比、元数据管理、系统指标、产物版本、报告协作和超参数搜索上更完整。

维度W&BTensorBoard
核心定位实验跟踪、协作、产物版本和MLOps管理训练日志可视化和模型调试
数据组织EntityProjectRunConfigArtifactReport主要基于logdirTFEvents文件
指标记录run.log()记录标量、媒体、表格、对象和自定义图表tf.summarySummaryWriter记录事件
自动系统指标自动采集CPU、内存、磁盘、网络和加速器指标核心能力不以通用系统指标管理为主
超参数管理ConfigSweeps结合,支持搜索和可视化HParams插件支持超参数对比
产物版本Artifacts支持数据集、模型和文件版本通常需要外部工具或自定义目录规范
协作报告Reports和保存视图适合团队共享结论更偏本地查看和临时分享
部署形态云服务、专有云、自托管、离线同步本地服务为主,开源免费
迁移集成可同步TensorBoard事件文件不依赖W&B

W&B的优势

  • 更完整的实验上下文:同一个Run中可以同时保存超参数、代码版本、终端日志、系统指标、模型文件、数据版本和预测样本。
  • 更适合团队协作:工作区、保存视图和报告可以沉淀实验结论,避免只靠截图和聊天记录传递结果。
  • 更适合大规模调参Runs表格、分组、标签、摘要指标和Sweeps能更高效地管理大量实验。
  • 更强的产物治理能力Artifacts把数据集、模型、检查点和评估结果纳入版本化管理,支持血缘追踪。
  • 跨框架体验一致:无论是PyTorchTensorFlowKeras还是其他训练框架,都可以围绕同一套Run模型组织实验。

W&B的不足

  • 引入外部平台依赖:默认同步到W&B云服务,组织需要评估账号、网络、数据安全和合规要求。
  • 商业和部署成本需要评估:团队规模、私有部署、合规功能和存储成本可能带来额外投入。
  • 运维复杂度高于本地工具:选择Self-Managed时,需要维护Kubernetes、数据库、对象存储、缓存、升级和备份。
  • 不适合所有临时实验:非常短小、完全本地、无需协作的调试任务,使用TensorBoard或简单日志可能更轻量。
  • 需要规范化使用:如果指标命名、Config管理和Artifact版本不规范,平台能力会被削弱。

TensorBoard的优势

  • 开源、轻量、本地优先:安装和启动简单,不要求账号或云服务,适合个人开发和内网调试。
  • TensorFlow生态集成深Keras回调、tf.summary、图结构、直方图、嵌入投影和Profiler等功能与TensorFlow训练流程贴合。
  • 日志文件可直接归档TFEvents文件可以随训练目录保存,便于简单的本地复查。
  • 学习成本低:如果只需要查看lossaccuracy、直方图或图像,TensorBoard的概念模型较简单。
  • 适合单机和小团队快速调试:不依赖中心化服务,启动tensorboard --logdir logs即可查看。

TensorBoard的不足

  • 实验元数据管理较弱:可以记录超参数,但对代码版本、运行命令、产物版本、数据血缘和团队报告的整体管理不如W&B完整。
  • 多实验治理依赖目录规范:大量实验容易变成复杂的logdir层级,筛选、分组、排序和复盘需要额外约定。
  • 协作能力有限:更适合本地查看,团队级共享、权限、评论、报告和保存视图需要额外平台支撑。
  • 产物版本不是核心能力:模型文件、检查点和数据版本通常要结合Git LFS、对象存储、MLflow或自研规范管理。
  • 跨框架体验不完全一致:虽然PyTorch支持写入TensorBoard日志,但一些高级功能仍与TensorFlow生态关联更紧密。

常见问题

W&B是否必须联网

不必须W&B默认在线同步,但可以通过WANDB_MODE=offlinemode="offline"把数据保存到本地,之后用wandb sync上传。需要注意的是,离线模式下无法实时在云端查看曲线,也要妥善保存本地wandb运行目录。

W&B是否会自动记录所有模型指标

不会W&B会自动记录系统指标,但模型任务指标需要训练代码显式调用run.log(),或者通过框架集成间接记录。应在项目中明确哪些指标是主指标、辅助指标和诊断指标。

W&B和TensorBoard能否同时使用

可以W&B支持同步TensorBoard事件文件,可以通过wandb.init(sync_tensorboard=True)把已有TensorBoard日志上传到W&B中集中分析。

是否应该把敏感数据样本写入W&B

需要谨慎。图像、文本、音频、表格和Artifact都可能包含敏感信息。企业使用前应评估数据分类、脱敏策略、访问权限、存储位置、保留周期和部署方式。对严格合规场景,应考虑Dedicated CloudSelf-Managed或完全本地方案。

参考资料