前言
- 文章来源:
LawsonAbs@CSDN
- 本文介绍深度学习模型训练过程中最最最最经常且应该使用的神器——wandb!
1. wandb
1.1 是什么?
初步接触wandb 是在TPLinker 这篇论文的代码,当初还觉得这作者搞这么麻烦的日志记录干嘛,搞不懂 (现在才知道自己是多么的无知 -_-||
训练神经网络模型需要记录每次运行的参数,这是非常重要的一个步骤,如果仅靠自己+excel来做简直太低效了。那么wandb就是一个非常好的日志记录工具了。(我要吹爆!
1.2 如何使用?
那么如何使用 wandb 呢? 非常简单,想在模型训练中添加wandb记录日志袋盖只需要5行代码:
import wandb # 导入wandb库
# 放在程序入口
wandb.init(project="csdn_lawsonabs",entity="lawsonabs",config=opt) # project 含义是当前跑的这个模型日志放在哪个project下,entity代表是哪个用户下,config 代表是本次模型运行的参数
# 放在
wandb.log(dict_info) # dict_info 是一个字典形式的信息,主要是记录模型的metric等信息,如f1,recall , precision
2. sweep
sweep
可以和wandb一起结合来使用,主要是用来寻找模型较为合适的超参数。最常见的一个图是:
这里就会给出 learning_rate
和 neg_weight
对模型效果(dev_f1
)的影响。同时模型也会给出整个模型中较为重要的参数。
那么该怎么结合wandb 使用 sweep呢?主要有三种方法,但是这里我介绍使用yml文件配置的方法。主要步骤是:
- step 1. 写一个配置文件
method: bayes # 寻找参数的方法
metric: # 衡量目标
goal: maximize
name: ing f1
parameters: # 参数项,就是我们需要调参的参数集合
activation:
distribution: categorical
values:
- relu
- tanh
dropout:
distribution: uniform
max: 0.6
min: 0.1
epoch:
distribution: int_uniform
max: 300
min: 150
graph_threshold:
distribution: uniform
max: 0.99
min: 0.9
lr:
distribution: uniform
max: 0.02
min: 0.0005
lr_bert:
distribution: uniform
max: 4e-05
min: 1e-05
lr_rgcn:
distribution: uniform
max: 0.01
min: 0.0005
negativa_alpha:
distribution: int_uniform
max: 30
min: 1
weight_decay:
distribution: uniform
max: 0.0002
min: 5e-05
program: train_rrcs_no_batch.py
-
step 2. 创建sweep anget
wandb sweep train.yml
这个步骤会得到一个sweep 实例,后面我们使用这个实例即可。 -
运行sweep 实例
指定显卡+nohup运行+写入日志到文件+后台运行
CUDA_VISIBLE_DEVICES=2 nohup wandb agent lawsonabs/RRCS-code/guukojam > train.log 2>&1 &
需要注意的是:这个agent 会在该卡上继续运行,直到所有的参数搜索完毕。如果中途想取消正在运行的sweep 实例,可以执行如下命令
参考资料
可以参考wandb中的文档
- https://docs.wandb.ai/ref/cli/wandb-sweep