模型训练可视化工具
简介
- 为了能更好的展示模型结构、可视化模型指标,方便用户把控训练流程,文心接入了VisualDL可视化工具包,并对其进行了封装。
准备工作
准备环境:使用可视化工具,首先得在自己的开发机上安装好visual dl包,具体安装教程和使用方式可参考 VisualDL 工具简介
修改trainer部分代码。以动态图为例,需要在任务目录下 trainer/custom_dynamic_trainer.py 的init()、do_train()以及do_evaluate()函数中添加如下内容:
#__init__()函数
@RegisterSet.trainer.register
class CustomDynamicTrainer(BaseDynamicTrainer):
"""CustomDynamicTrainer
"""
def __init__(self, params, data_set_reader, model):
"""
:param params:
:param data_set_reader:
:param model_class:
"""
BaseDynamicTrainer.__init__(self, params, data_set_reader, model)
# 需要为可视化工具额外添加的代码
if self.params.get("metrics_visual", False):
from wenxin.utils.visual_manager import VisualManager
visual_logdir = self.params.get("visual_log_dir", "visual_log")
if self.params.get("PADDLE_IS_FLEET", 0) == 1 and fleet.worker_num() > 1:
visual_logdir = visual_logdir + "_" + str(fleet.worker_index())
output_path = self.params.get("output_path", "./output")
self.visual_manager = VisualManager(os.path.join(output_path, visual_logdir))
# do_train()函数
...
if steps % self.params["train_log_step"] == 0:
time_end = time.time()
used_time = time_end - time_begin
meta_info = collections.OrderedDict()
meta_info[InstanceName.STEP] = steps
meta_info[InstanceName.GPU_ID] = 0
meta_info[InstanceName.TIME_COST] = used_time
current_example, current_epoch = self.data_set_reader.train_reader.dataset.get_train_progress()
metrics_output = self.original_model.get_metrics(forward_out, meta_info, InstanceName.TRAINING)
# 需要为可视化工具额外添加的代码
if self.visual_manager and self.params.get("metrics_visual", False):
self.visual_manager.show_metric(metrics_output, steps, tag=InstanceName.TRAINING)
time_begin = time.time()
...
# do_evaluate()函数
def do_evaluate(self, reader, phase, train_step):
step = 0
with paddle.no_grad():
...
for batch_id, data in enumerate(reader()):
step += 1
example = reader.dataset.convert_fields_to_dict(data, need_emb=False)
forward_out = self.model_class(example, phase=phase)
for key, value in forward_out.items():
fetch_output_dict.setdefault(key, []).append(value)
...
metrics_output = self.original_model.get_metrics(fetch_output_dict, meta_info, phase)
# 需要为可视化工具额外添加的代码
if self.visual_manager and self.params.get("metrics_visual", False):
self.visual_manager.show_metric(metrics_output, train_step, tag=phase)
3.配置任务参数,使用工具包,运行过程中生成可视化log 。如下图所示,如果需要保存可视化log,在json配置文件的trainer节点中将metrics_visual设置为true(默认为false),visual_log_dir为log保存路径(默认为./visual_log)。可视化log保存的内容为用户的model文件中, get_metrics接口所返回的dict中的每一项指标值。需要注意的是,目前指标可视化只能展示数值类型的标量值,如int,float,double,其他数据类型(如numpy,array等)会抛异常。
{
...
"model": {
"type": "BiLSTMClassification",
"optimization": {
"learning_rate": 2e-05
},
"vocab_size": 33261,
"num_labels": 2
},
"trainer": {
"type": "CustomDynamicTrainer",
"PADDLE_PLACE_TYPE": "gpu",
"PADDLE_IS_FLEET": 1,
"metrics_visual": true, # 需要添加这个字段
"train_log_step": 50,
"use_amp": true,
"is_eval_dev": 0,
"is_eval_test": 0,
"is_save_last": 1,
"eval_step": 5000000,
"save_model_step": 5000000,
"load_parameters": "",
"load_checkpoint": "",
"pre_train_model": [
],
"output_path": "./output/xnli/minilm_td1",
"extra_param": {
"meta":{
"job_type": "text_matching"
}
}
}
}
开始使用
1.按正常的训练脚本启动训练任务即可,任务运行过程中,可视化日志会保存到json文件配置的对应output目录下。
python run_trainer.py --param_path=./examples/xxx_ch.json
2.找到你自己安装的visualdl路径,执行
visualdl --logdir visual_log_dir --host 0.0.0.0 --port 8088
3.查看你当前机器的ip地址,然后在浏览器中输入http://ip:8088/ 4.如果需要可视化模型的网络结构,那么首先将你自己保存好的save_inference_model/路径下的model文件重命名为model , 然后执行 visualdl --host 0.0.0.0 --port 8088 --model model 5.如果需要同时可视化指标和网络结构,则执行
visualdl --logdir visual_log_dir --host 0.0.0.0 --port 8088 --model __model__