资讯 文档
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术

模型训练可视化工具

简介

  • 为了能更好的展示模型结构、可视化模型指标,方便用户把控训练流程,文心接入了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__
上一篇
核心框架设计
下一篇
模型超参数自动搜索