Wandb使用指南(教程)

安装:

pip install wandb

登录(只有在线模型才需要登录)

wanbd login

查看你自己的Wandb api key 

在terminal中操作查看你的API key并粘贴回车进行授权(https://wandb.ai/authorize

是否使用Wandb?

如果你使用wandb有问题,或者暂时不想使用,那么可以通过设置mode为disable来不使用wandb:

wandb.init(project="config_example", mode="disabled")

设置离线模式/在线模式

1、离线模式

有时候会出现错误:wandb Network error (ReadTimeout), entering retry loop.

设置为offline会在无网络(内网)的时候使用,会导致错误

注意:设置offline要在wandb init之前使用,否则不起作用,但是不需要注释wandb init

import os
os.environ["WANDB_API_KEY"] = '+++++++++++++++' # 将引号内的+替换成自己在wandb上的一串值
os.environ["WANDB_MODE"] = "offline"                    # 离线  (此行代码不用修改)

# 初始化wandb
wandb.init(project="config_example")

然后模型会保存在本地,后面你只需要将你本地的log同步到远程即可:

cd your-wandb-folder


wandb sync offline-run-**************

如果在上传的时候出现错误:run 1168flos was previously created and deleted; try a new run name

则直接在后面加上--id即可:wandb sync offline-run-************** --id XXXX

2、在线模式

代码中初始化wandb

# 初始化wandb
wandb.init(project="config_example")

如果记录参数和日志?

1)记录运行args参数

有很多方式,但是最常用的方式是直接通过一行代码上传args:

# 储存运行参数:将参数值转为dict,然后再储存
wandb.config.update(vars(args))

上传后的参数储存在overview中: 

2)记录运行log(loss等) + images

wandb.log()记录这些值

然后image要通过一步wandb.Image(image)转换才可以存储

        # 储存运行过程中的图像:随机生成一个图像作为示例
        data = np.random.rand(256, 256, 3) * 255
        data = data.astype(np.uint8)
        image = Image.fromarray(data, 'RGB')

        # 储存运行过程中的loss等日志
        wandb.log(
            {
                "epoch": epoch,
                "train_acc": train_acc,
                "train_loss": train_loss,
                "val_acc": val_acc,
                "val_loss": val_loss,
                'images': wandb.Image(image),
            }
        )

  3)记录某些文本

记录总结性的文本

例如:参数量

wandb.run.summary['Trainable parameters'] = f"{n_params / 1e6}M"

记录带有格式的文本 

某些时候可能需要记录model的构造等等,我们需要使用:

    wandb.log(
        {"Model_architecture": wandb.Table(columns=["Model_architecture"], data=[[str(model_without_ddp)]])}
    )

怎么resume?

例如你想从某个project的runs中恢复log,也就是继续log,那么你可以使用resume参数

https://docs.wandb.ai/guides/runs/resuming

project必须你是要resume的project,id是你所对应runs的id

wandb.init(project="config_example", id="ismjl25l", resume="must")

id在overview中的runpath的最后 

结果查看: 

运行代码后,会出现日志,直接点击本次运行结果的连接即可

完整示例代码执行:

import wandb
import argparse
import numpy as np
import random
from PIL import Image

# 初始化wandb
wandb.init(project="config_example")


def train_one_epoch(epoch, lr, bs):
    acc = 0.25 + ((epoch / 30) + (random.random() / 10))
    loss = 0.2 + (1 - ((epoch - 1) / 10 + random.random() / 5))
    return acc, loss


def evaluate_one_epoch(epoch):
    acc = 0.1 + ((epoch / 20) + (random.random() / 10))
    loss = 0.25 + (1 - ((epoch - 1) / 10 + random.random() / 6))
    return acc, loss


def main(args):
    # 储存运行参数:将参数值转为dict,然后再储存
    wandb.config.update(vars(args))

    for epoch in np.arange(1, args.epochs):
        train_acc, train_loss = train_one_epoch(epoch, args.learning_rate, args.batch_size)
        val_acc, val_loss = evaluate_one_epoch(epoch)

        # 储存运行过程中的图像:随机生成一个图像作为示例
        data = np.random.rand(256, 256, 3) * 255
        data = data.astype(np.uint8)
        image = Image.fromarray(data, 'RGB')

        # 储存运行过程中的loss等日志
        wandb.log(
            {
                "epoch": epoch,
                "train_acc": train_acc,
                "train_loss": train_loss,
                "val_acc": val_acc,
                "val_loss": val_loss,
                'images': wandb.Image(image),
            }
        )


if __name__ == "__main__":
    parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)

    parser.add_argument("--batch_size", type=int, default=32, help="Batch size")
    parser.add_argument("--epochs", type=int, default=50, help="Number of training epochs")
    parser.add_argument("--learning_rate", type=int, default=0.001, help="Learning rate")

    args = parser.parse_args()
    main(args)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pengsen Ma

太谢谢了

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值