MindInsight训练可视整体设计介绍

MindInsight是MindSpore的可视化调试调优组件。通过MindInsight可以完成训练可视、性能调优、精度调优等任务。

训练可视功能主要包括训练看板、模型溯源、数据溯源等功能,训练看板中又包括标量、参数分布图、计算图、数据图、数据抽样、张量等子功能。

本文主要介绍MindInsight训练可视功能的逻辑架构、代码组织和数据模型。

训练可视逻辑架构

在架构上,训练可视功能的逻辑架构分为两部分:训练信息收集架构,训练信息分析及展示架构。

图1 MindInsight训练可视逻辑架构

训练信息收集架构

训练信息收集功能在MindSpore中,包括训练信息收集API模块和训练信息持久化模块。

训练信息收集API包括:

  • 基于summary算子的训练信息收集API。这部分API主要包括4个summary算子,即用于记录标量数据的ScalarSummary算子,用于记录图片数据的ImageSummary算子,用于记录参数分布图(直方图)数据的HistogramSummary算子和用于记录张量数据的TensorSummary算子。请访问算子支持列表以获取关于这些算子的信息。
  • 基于Python API的训练信息收集API。通过SummaryRecord.add_value方法,可以在Python代码中完成训练信息的收集。
  • 易用的训练信息收集callback。通过SummaryCollector这一callback可以方便地收集常用训练信息到训练日志中。

训练信息持久化模块主要包括用于管理缓存的summary_record模块和用于并行处理数据、写入文件的write_pool模块。训练信息持久化后,存储在训练日志文件(summary文件中)。

训练信息分析及展示架构

训练信息分析及展示架构在MindInsight中,包括Web UI和后端两大部分。后端从下到上可以分为数据加载及缓存层、业务逻辑层、API 层。数据加载及缓存层主要由训练日志文件发现模块、训练日志文件解析模块及缓存管理模块组成。业务逻辑层主要由训练看板业务模块和溯源业务模块组成。API层主要由RESTful API模块组成。各模块的主要功能如下:

  • 训练日志文件发现模块:用于在给定的训练日志根目录(summary-base-dir)中扫描并发现含有训练日志文件的训练日志目录。只有含有训练日志文件的目录会被识别为训练日志目录。
  • 训练日志文件解析模块:用于解析训练日志文件。
  • 缓存管理模块:用于管理训练日志解析任务,缓存训练日志解析结果。其会定期调用训练日志发现模块,扫描最新的训练日志目录列表;然后调用解析模块解析文件内容,将解析结果存储在缓存中以供UI查询。
  • 训练看板模块:用于提供训练看板功能的业务逻辑,支撑UI查询训练看板数据。
  • 溯源模块:用于提供模型溯源和数据溯源的业务逻辑,支撑UI查询溯源数据。
  • RESTful API模块:用于将业务模块提供的接口包装为RESTful API。

代码组织

以下是MindInsight代码仓库中的部分重要目录及说明。

训练可视数据模型

训练信息数据流

训练信息产生于用户训练的过程中。用户可以通过训练信息收集API将这些训练信息收集起来,并通过训练信息持久化模块将这些训练信息保存到磁盘上,产生训练日志文件(summary文件)。训练日志文件生成后,便可以使用MindInsight对其中的信息进行可视化。

图2 训练信息数据流

数据模型

MindInsight的简要数据模型如图3所示。一个训练日志目录会被MindInsight识别为一个训练作业。训练作业是MindInsight的最小管理单元。一个训练作业可以关联0-1个溯源数据,关联0-1个训练过程数据。训练过程数据内部有着丰富的结构,每一个具体的数据,可以通过给定的插件名称、标签和迭代唯一确定。下面将分别介绍这些概念。

图3 以UML类图表示的数据模型

训练作业

MindInsight通过目录来区分不同的训练作业。为了方便用户区分不同训练作业的训练日志文件,SummaryCollector、SummaryRecord都要求用户指定存放训练日志文件的目录。相同目录中的训练日志文件,被认为是同一次训练作业中产生的训练数据,不同目录中的训练日志文件,被认为是不同训练作业中产生的文件。

在MindInsight的代码中,一次训练一般被称为一个TrainJob。TrainJob的id即该次训练的日志所在目录的目录名(例如 ./train_my_lenet_1)。

一次训练的过程中,一般会产生该次训练的溯源数据文件(文件名以_lineage结尾)和训练过程数据文件(文件名一般以_MS结尾)。其中溯源数据主要从全局出发,描述该次训练的不变性质,例如训练所用的数据集路径、训练所用的优化器、以及用户自定义的溯源信息。这些信息最突出的特点是不会在训练过程中变化。而训练过程数据主要描述该次训练的变化情况,例如loss值、参数分布、一个迭代中送入模型的图片数据等。这些信息最突出的特点是每个迭代都会发生变化。

需要注意的是,关于训练信息是否发生变化的分类,并不是绝对的。比如训练过程数据文件中会含有计算图数据,其一般在训练开始的时候就确定了。

溯源数据

溯源数据主要从全局出发,描述某次训练的不变性质。当MindInsight识别到多个训练日志目录时,这若干次训练的溯源数据,被组织成表格的形式展示,以方便对比和分析。

训练过程数据

  • 插件名称(plugin_name)

对于训练过程数据,首先将这些训练数据按类型分为标量数据(scalar)、直方图数据(histogram)、图片数据(image)、张量数据(tensor)等类型,这些类型在MindInsight的中被称为插件名称(plugin_name),当前mindinsight支持的插件名称定义在mindinsight.datavisual.common.enums.PluginNameEnum中。

  • 标签(tag)

无论数据属于何种类型,其都会依照tag进一步被分为不同的序列。tag一般由用户命名,用于对数据进行区分。比如记录loss值的标量数据,其tag名可以为loss。需要说明的是,MindInsight在对数据进行处理时,会根据插件名称自动为tag附加后缀。例如tag为loss的数据为标量数据,则该tag会被自动重命名为loss/scalar。

  • 迭代数(step)

训练过程数据是在训练的每个迭代中产生的,为了区分这些数据,数据会被标记上该数据所对应的迭代数。

  • 数据的查询和展示

在展示数据时,用户常常希望看到某个标签下的数据,随着训练过程的变化情况。因此,查询数据时,一般不会指定迭代数,而是直接指定训练作业、插件名称和标签,查询该标签下所有迭代的数据。

MindInsight训练可视整体设计介绍的更多相关文章

  1. MindInsight张量可视设计介绍

    MindInsight张量可视设计介绍 特性背景 张量可视,能够帮助用户直观查看训练过程中的Tensor值,既支持以直方图的形式呈现Tensor的变化趋势,也支持查看某次step的具体Tensor值. ...

  2. MindInsight计算图可视设计

    MindInsight计算图可视设计 特性背景 计算图可视的功能,主要协助开发者在下面这些场景中使用. 开发者在编写深度学习神经网络的代码时,可以使用计算图的功能查看神经网络中算子的数据流走向,以及模 ...

  3. Alink漫谈(十二) :在线学习算法FTRL 之 整体设计

    Alink漫谈(十二) :在线学习算法FTRL 之 整体设计 目录 Alink漫谈(十二) :在线学习算法FTRL 之 整体设计 0x00 摘要 0x01概念 1.1 逻辑回归 1.1.1 推导过程 ...

  4. [转]Libev源码分析 -- 整体设计

    Libev源码分析 -- 整体设计 libev是Marc Lehmann用C写的高性能事件循环库.通过libev,可以灵活地把各种事件组织管理起来,如:时钟.io.信号等.libev在业界内也是广受好 ...

  5. RecyclerView源码分析(一)--整体设计

    RecyclerView这个控件出来已经有一段时间了,如果看这篇文章的你,还没有使用过这个控件.那请先去学习怎样使用.不然看也白看.这里奉上一些关于介绍RecyclerView使用方法的优秀博客: 鸿 ...

  6. ibatis源码学习1_整体设计和核心流程

    背景介绍ibatis实现之前,先来看一段jdbc代码: Class.forName("com.mysql.jdbc.Driver"); String url = "jdb ...

  7. MindSpore Lite整体架构介绍

    MindSpore Lite整体架构介绍 MindSpore Lite框架的总体架构如下所示: 前端(Frontend): 负责模型生成,用户可以通过模型构建接口构建模型,将第三方模型和MindSpo ...

  8. MindSpore整体架构介绍

    MindSpore整体架构介绍 MindSpore框架架构总体分为MindSpore前端表示层.MindSpore计算图引擎和MindSpore后端运行时三层. MindSpore前端表示层(Mind ...

  9. Mybatis原理分析之二:框架整体设计

    1.引言 本文主要讲解Mybatis的整体程序设计,理清楚框架的主要脉络.后面文章我们再详细讲解各个组件. 2.整体设计 2.1 总体流程 (1)加载配置并初始化       触发条件:加载配置文件 ...

随机推荐

  1. hdu1466 递推

    题意:       给你n条直线,不会存在三线共点,输出所有的可能交点数.. 思路:       这个是个地推的题目,假设当前的线段i,他里面有r条是随意的,有(i - r)条是平行的,那么当前的交点 ...

  2. 逆向工程第001篇:解锁FIFA07传奇模式

    FIFA07传奇难度的解锁,可以说是所有FIFA07玩家的终极目标.但是如果想以正常方式对其进行解锁,绝对是一件耗时耗力的工作.所以在这里我打算通过分析游戏存档文件的十六进制代码的方式,一步一步地找到 ...

  3. Word/Excel文档伪装病毒-kspoold.exe分析

    一. 病毒样本基本信息 样本名称:kspoold.exe 样本大小: 285184 字节 样本MD5:CF36D2C3023138FE694FFE4666B4B1B2 病毒名称:Win32/Troja ...

  4. Linux中的防火墙(Netfilter、Iptables、Firewalld)

    目录 Netfilter Iptables iptables做本地端口转发 Firewalld Netfilter Netfilter是Linux 2.4内核引入的全新的包过滤引擎,位于Linux内核 ...

  5. Python中的输入(input)和输出打印

    目录 最简单的打印 打印数字 打印字符 字符串的格式化输出 python中让输出不换行 以下的都是在Python3.X环境下的 使用 input 函数接收用户的输入,返回的是 str 字符串 最简单的 ...

  6. 利用 ROP 技术绕过 DEP 保护的一次简单尝试

    \x 01 前言 DEP是数据执行保护的英文缩写,全称为Data Execution Prevention.数据执行保护(DEP) 是一套软硬件技术,能够在内存上执行额外检查以帮助防止在系统上运行恶意 ...

  7. OGG-Oracle同步Sequence

    一.需求,使用OGG同步软件,将Oracle 11g Sequence实时同步到19c新库中 参考文档 Implementing replication of cyclic sequences in ...

  8. iwrite复制攻略

    打开iwrite,一提交作业,发现: 这可咋办啊! 那就跟着步骤来呗: 按F12打开元素审查 点一下左上角 再点一下文本框,就能定位到HTML中的位置 在文本框中写几个字母,康康具体位置: 那就复制进 ...

  9. 续订Jetbrain学生包

    今天打开IDEA和Pycharm都不约而同的告诉我我的账号无法使用学生包了 此刻我的内心是: 冷静下来我算了算,嗷,原来是一年的订阅期到了,那就简单了,直接续订吧,唉.其实续订和重新认证是一样的. 首 ...

  10. Day006 方法的定义和调用

    方法的定义 Java的方法类似于其他语言的函数,是一段用来完成特定功能的代码片段,一般情况下,定义一个方法包含以下语法: 方法包含一个方法头和一个方法体.下面是一个方法的所有部分: 修饰符:修饰符,这 ...