MindInsight训练可视整体设计介绍
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训练可视整体设计介绍的更多相关文章
- MindInsight张量可视设计介绍
MindInsight张量可视设计介绍 特性背景 张量可视,能够帮助用户直观查看训练过程中的Tensor值,既支持以直方图的形式呈现Tensor的变化趋势,也支持查看某次step的具体Tensor值. ...
- MindInsight计算图可视设计
MindInsight计算图可视设计 特性背景 计算图可视的功能,主要协助开发者在下面这些场景中使用. 开发者在编写深度学习神经网络的代码时,可以使用计算图的功能查看神经网络中算子的数据流走向,以及模 ...
- Alink漫谈(十二) :在线学习算法FTRL 之 整体设计
Alink漫谈(十二) :在线学习算法FTRL 之 整体设计 目录 Alink漫谈(十二) :在线学习算法FTRL 之 整体设计 0x00 摘要 0x01概念 1.1 逻辑回归 1.1.1 推导过程 ...
- [转]Libev源码分析 -- 整体设计
Libev源码分析 -- 整体设计 libev是Marc Lehmann用C写的高性能事件循环库.通过libev,可以灵活地把各种事件组织管理起来,如:时钟.io.信号等.libev在业界内也是广受好 ...
- RecyclerView源码分析(一)--整体设计
RecyclerView这个控件出来已经有一段时间了,如果看这篇文章的你,还没有使用过这个控件.那请先去学习怎样使用.不然看也白看.这里奉上一些关于介绍RecyclerView使用方法的优秀博客: 鸿 ...
- ibatis源码学习1_整体设计和核心流程
背景介绍ibatis实现之前,先来看一段jdbc代码: Class.forName("com.mysql.jdbc.Driver"); String url = "jdb ...
- MindSpore Lite整体架构介绍
MindSpore Lite整体架构介绍 MindSpore Lite框架的总体架构如下所示: 前端(Frontend): 负责模型生成,用户可以通过模型构建接口构建模型,将第三方模型和MindSpo ...
- MindSpore整体架构介绍
MindSpore整体架构介绍 MindSpore框架架构总体分为MindSpore前端表示层.MindSpore计算图引擎和MindSpore后端运行时三层. MindSpore前端表示层(Mind ...
- Mybatis原理分析之二:框架整体设计
1.引言 本文主要讲解Mybatis的整体程序设计,理清楚框架的主要脉络.后面文章我们再详细讲解各个组件. 2.整体设计 2.1 总体流程 (1)加载配置并初始化 触发条件:加载配置文件 ...
随机推荐
- hdu1466 递推
题意: 给你n条直线,不会存在三线共点,输出所有的可能交点数.. 思路: 这个是个地推的题目,假设当前的线段i,他里面有r条是随意的,有(i - r)条是平行的,那么当前的交点 ...
- 逆向工程第001篇:解锁FIFA07传奇模式
FIFA07传奇难度的解锁,可以说是所有FIFA07玩家的终极目标.但是如果想以正常方式对其进行解锁,绝对是一件耗时耗力的工作.所以在这里我打算通过分析游戏存档文件的十六进制代码的方式,一步一步地找到 ...
- Word/Excel文档伪装病毒-kspoold.exe分析
一. 病毒样本基本信息 样本名称:kspoold.exe 样本大小: 285184 字节 样本MD5:CF36D2C3023138FE694FFE4666B4B1B2 病毒名称:Win32/Troja ...
- Linux中的防火墙(Netfilter、Iptables、Firewalld)
目录 Netfilter Iptables iptables做本地端口转发 Firewalld Netfilter Netfilter是Linux 2.4内核引入的全新的包过滤引擎,位于Linux内核 ...
- Python中的输入(input)和输出打印
目录 最简单的打印 打印数字 打印字符 字符串的格式化输出 python中让输出不换行 以下的都是在Python3.X环境下的 使用 input 函数接收用户的输入,返回的是 str 字符串 最简单的 ...
- 利用 ROP 技术绕过 DEP 保护的一次简单尝试
\x 01 前言 DEP是数据执行保护的英文缩写,全称为Data Execution Prevention.数据执行保护(DEP) 是一套软硬件技术,能够在内存上执行额外检查以帮助防止在系统上运行恶意 ...
- OGG-Oracle同步Sequence
一.需求,使用OGG同步软件,将Oracle 11g Sequence实时同步到19c新库中 参考文档 Implementing replication of cyclic sequences in ...
- iwrite复制攻略
打开iwrite,一提交作业,发现: 这可咋办啊! 那就跟着步骤来呗: 按F12打开元素审查 点一下左上角 再点一下文本框,就能定位到HTML中的位置 在文本框中写几个字母,康康具体位置: 那就复制进 ...
- 续订Jetbrain学生包
今天打开IDEA和Pycharm都不约而同的告诉我我的账号无法使用学生包了 此刻我的内心是: 冷静下来我算了算,嗷,原来是一年的订阅期到了,那就简单了,直接续订吧,唉.其实续订和重新认证是一样的. 首 ...
- Day006 方法的定义和调用
方法的定义 Java的方法类似于其他语言的函数,是一段用来完成特定功能的代码片段,一般情况下,定义一个方法包含以下语法: 方法包含一个方法头和一个方法体.下面是一个方法的所有部分: 修饰符:修饰符,这 ...