Press "Enter" to skip to content

Weights & Biases — ML实验数据追蹤

Weights & Biases — ML 实验数据追蹤

 

以前刚接触机器学习时,常使用本地端的 spreadsheet 来记录实验数据,包括各种参数的组合、loss value、以及 metrics 等。此等纪录方式,由于需自行填表因此相当麻烦。

 

今天要为大家介绍一款好用的实验追蹤工具 — Weights & Biases
(以下简称W&B)

 

Weights & Biases helps you keep track of your machine learning experiments. Use our tool to log hyperparameters and output metrics from your runs, then visualize and compare results and quickly share findings with your colleagues.

 

W&B 可运行于 AWS, GCP, Kubernetes, Azure, 以及 on-prem machine 上,不过目前只有开源 client
的 repo。接下来,我将试用 W&B 的 Personal
版本,在我们的 PrimeHub
中安装 W&B library,执行一个简单的训练,并将实验数据汇至 Cloud Hosting 的 W&B,带大家快速了解其功能。

 

开启JupyterLab环境

 

第一步,我们在 PrimeHub 中先进入 JupyterHub,并选择 CPU 的 instance type、以及预先安装好机器学习套件的 image 后,即可开启我们的 JupyterLab环境。

Container notebook建立中
成功进入JupyterLab!

安装、登入 W&B

 

使用 pip 安装 W&B

 

$ pip install wandb

 

接着,执行以下指令登入 W&B

 

$ wandb loginwandb: W&B is a tool that helps track and visualize machine learning experiments 
wandb: (1) Create a W&B account 
wandb: (2) Use an existing W&B account 
wandb: (3) Don’t visualize my results 
wandb: Enter your choice:

 

W&B 会提供我们三个选项,其中

(1)、(2):导向 W&B 的网站,只要遵照步骤做下去,即可得到所需的API Key。
(3):会先忽略登入,我们还是可以正常使用 W&B 纪录实验数据,但资料只会保存于本地端,无法上传至云端的 dashboard 观看。

一旦输入完 API Key 之后,W&B会将其保留于 ~/.netrc

 

将W&B加入程式中

 

完成基本设定后,我们使用 keras example
作为基底,加入 W&B 程式片段,完成以下的程式。

其中第15~16行, import wandb
以及后续会用到的 Keras Callback。

import wandb
from wandb.keras import WandbCallback

而其中第22~26行,将 wandb 初始化、设定 project name 与 run name、并将 batch_size 作为实验追蹤的目标。

wandb.init(
 project='mnist_cnn experiment', 
 name='batch_size: %d' % batch_size)
config = wandb.config
config.batch_size = batch_size

最后,第76行将 WandbCallback()
加入 model.fit()
,即可将 model.compile()
中的 loss 和 metrics 纪录起来。在后续训练过程中,会持续追蹤每个 epoch 的 loss 和 metrics。

model.fit(x_train, y_train,
 batch_size=batch_size,
 epochs=epochs,
 verbose=1,
 validation_data=(x_test, y_test),
 callbacks=[WandbCallback()])

 

执行程式

 

执行修改完的程式吧!以下是执行后的 console log,先忽略中间训练和测试的部分,仅显示 W&B 的 log 资讯。

 

$ python mnist_cnn_wandb.py Using TensorFlow backend.
wandb: Tracking run with wandb version 0.8.25
wandb: Run data is saved locally in wandb/run-20200206_014731-8aj85l5q
wandb: Syncing run batch_size: 128
wandb: ⭐️ View project at https://app.wandb.ai/ericy/mnist_cnn+experiment
wandb:  View run at https://app.wandb.ai/ericy/mnist_cnn%20experiment/runs/8aj85l5q
wandb: Run `wandb off` to turn off syncing....
(training and testing logs)
...wandb: Waiting for W&B process to finish, PID 130
wandb: Program ended successfully.
wandb: Run summary:
wandb: acc 0.9916166666666667
wandb: val_acc 0.9914
wandb: _runtime 2408.1508808135986
wandb: val_loss 0.03251691678134084
wandb: _step 11
wandb: loss 0.02672540737129748
wandb: _timestamp 1580956059.4018977
wandb: epoch 11
wandb: Syncing files in wandb/run-20200206_014731-8aj85l5q:
wandb: model-best.h5
wandb: plus 8 W&B file(s) and 1 media file(s)
wandb: 
wandb: Synced batch_size: 128: https://app.wandb.ai/ericy/mnist_cnn%20experiment/runs/8aj85l5q

 

从以上 log 中,我们可得知

 

后续会介绍本地端档案所对应到的 dashboard 部分。

本地端产生的档案与目录

检视实验资料

 

在训练途中或训练完成后,我们都可到 dashboard
查看最新的实验数据。

 

Overview
页面的第一部分,我们可查看实验的详细资讯。此处资讯可从 wandb-metadata.json
获得。

Overview(1/2)

Overview
页面的第二部分,Config会显示先前在程式中所设定要纪录的变数(batch_size),而 Summary 则显示实验的最终 accuracy、loss value 等资讯。此处 Config 资讯可从 config.yaml
获得,而Summary资讯则可从 wandb-summary.json
获得。

Overview(2/2)

Charts
页面将每个 epoch 的 loss value 和 accuracy 以视觉化呈现。此处资讯可从 wandb-history.jsonl
获得。

Charts

System
页面显示实验过程中的系统资讯,若我们改以 GPU 进行训练,W&B亦会纪录 GPU 使用率、GPU 温度等资讯。此处资讯可从 wandb-events.jsonl
获得。

System

Model
页面以表格呈现模型中每一层的资讯,类似大家熟悉的 model.summary()
。此处资讯可从 media/graph/...
获得。

Model

Logs
页面显示程式执行时的 console log。此处资讯可从 output.log
获得。

Logs

Files
页面包含多个本地端的实验相关档案,其中 model-best.h5
是从最低 val_loss 的 epoch 中所获得。

Files

总结

 

有了 W&B 的协助,我们只需加入少量程式片段至原本的档案中,即可自动保存每次实验的参数、模型定义、系统资讯、以及训练完的模型档。日后想检视之前的实验,也可透过 dashboard 轻易查看。

 

若在同一project中执行数个实验,则可透过图表快速比较出变数数值的好坏。

同时显示多个runs

以上简单试用心得供读者参考,W&B 官方提供了多个 ML framework 的实验追蹤 範例
,可应用于更进阶的实验数据分析,欢迎读者也亲自体验看看!

Be First to Comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注