MindInsight训练可视整体设计介绍
MindInsight訓(xùn)練可視整體設(shè)計介紹
MindInsight是MindSpore的可視化調(diào)試調(diào)優(yōu)組件。通過MindInsight可以完成訓(xùn)練可視、性能調(diào)優(yōu)、精度調(diào)優(yōu)等任務(wù)。
訓(xùn)練可視功能主要包括訓(xùn)練看板、模型溯源、數(shù)據(jù)溯源等功能,訓(xùn)練看板中又包括標(biāo)量、參數(shù)分布圖、計算圖、數(shù)據(jù)圖、數(shù)據(jù)抽樣、張量等子功能。
本文主要介紹MindInsight訓(xùn)練可視功能的邏輯架構(gòu)、代碼組織和數(shù)據(jù)模型。
訓(xùn)練可視邏輯架構(gòu)
在架構(gòu)上,訓(xùn)練可視功能的邏輯架構(gòu)分為兩部分:訓(xùn)練信息收集架構(gòu),訓(xùn)練信息分析及展示架構(gòu)。
圖1 MindInsight訓(xùn)練可視邏輯架構(gòu)
訓(xùn)練信息收集架構(gòu)
訓(xùn)練信息收集功能在MindSpore中,包括訓(xùn)練信息收集API模塊和訓(xùn)練信息持久化模塊。
訓(xùn)練信息收集API包括:
? 基于summary算子的訓(xùn)練信息收集API。這部分API主要包括4個summary算子,即用于記錄標(biāo)量數(shù)據(jù)的ScalarSummary算子,用于記錄圖片數(shù)據(jù)的ImageSummary算子,用于記錄參數(shù)分布圖(直方圖)數(shù)據(jù)的HistogramSummary算子和用于記錄張量數(shù)據(jù)的TensorSummary算子。請訪問算子支持列表以獲取關(guān)于這些算子的信息。
? 基于Python API的訓(xùn)練信息收集API。通過SummaryRecord.add_value方法,可以在Python代碼中完成訓(xùn)練信息的收集。
? 易用的訓(xùn)練信息收集callback。通過SummaryCollector這一callback可以方便地收集常用訓(xùn)練信息到訓(xùn)練日志中。
訓(xùn)練信息持久化模塊主要包括用于管理緩存的summary_record模塊和用于并行處理數(shù)據(jù)、寫入文件的write_pool模塊。訓(xùn)練信息持久化后,存儲在訓(xùn)練日志文件(summary文件中)。
訓(xùn)練信息分析及展示架構(gòu)
訓(xùn)練信息分析及展示架構(gòu)在MindInsight中,包括Web UI和后端兩大部分。后端從下到上可以分為數(shù)據(jù)加載及緩存層、業(yè)務(wù)邏輯層、API 層。數(shù)據(jù)加載及緩存層主要由訓(xùn)練日志文件發(fā)現(xiàn)模塊、訓(xùn)練日志文件解析模塊及緩存管理模塊組成。業(yè)務(wù)邏輯層主要由訓(xùn)練看板業(yè)務(wù)模塊和溯源業(yè)務(wù)模塊組成。API層主要由RESTful API模塊組成。各模塊的主要功能如下:
? 訓(xùn)練日志文件發(fā)現(xiàn)模塊:用于在給定的訓(xùn)練日志根目錄(summary-base-dir)中掃描并發(fā)現(xiàn)含有訓(xùn)練日志文件的訓(xùn)練日志目錄。只有含有訓(xùn)練日志文件的目錄會被識別為訓(xùn)練日志目錄。
? 訓(xùn)練日志文件解析模塊:用于解析訓(xùn)練日志文件。
? 緩存管理模塊:用于管理訓(xùn)練日志解析任務(wù),緩存訓(xùn)練日志解析結(jié)果。其會定期調(diào)用訓(xùn)練日志發(fā)現(xiàn)模塊,掃描最新的訓(xùn)練日志目錄列表;然后調(diào)用解析模塊解析文件內(nèi)容,將解析結(jié)果存儲在緩存中以供UI查詢。
? 訓(xùn)練看板模塊:用于提供訓(xùn)練看板功能的業(yè)務(wù)邏輯,支撐UI查詢訓(xùn)練看板數(shù)據(jù)。
? 溯源模塊:用于提供模型溯源和數(shù)據(jù)溯源的業(yè)務(wù)邏輯,支撐UI查詢溯源數(shù)據(jù)。
? RESTful API模塊:用于將業(yè)務(wù)模塊提供的接口包裝為RESTful API。
代碼組織
以下是MindInsight代碼倉庫中的部分重要目錄及說明。
訓(xùn)練可視數(shù)據(jù)模型
訓(xùn)練信息數(shù)據(jù)流
訓(xùn)練信息產(chǎn)生于用戶訓(xùn)練的過程中。用戶可以通過訓(xùn)練信息收集API將這些訓(xùn)練信息收集起來,并通過訓(xùn)練信息持久化模塊將這些訓(xùn)練信息保存到磁盤上,產(chǎn)生訓(xùn)練日志文件(summary文件)。訓(xùn)練日志文件生成后,便可以使用MindInsight對其中的信息進(jìn)行可視化。
圖2 訓(xùn)練信息數(shù)據(jù)流
數(shù)據(jù)模型
MindInsight的簡要數(shù)據(jù)模型如圖3所示。一個訓(xùn)練日志目錄會被MindInsight識別為一個訓(xùn)練作業(yè)。訓(xùn)練作業(yè)是MindInsight的最小管理單元。一個訓(xùn)練作業(yè)可以關(guān)聯(lián)0-1個溯源數(shù)據(jù),關(guān)聯(lián)0-1個訓(xùn)練過程數(shù)據(jù)。訓(xùn)練過程數(shù)據(jù)內(nèi)部有著豐富的結(jié)構(gòu),每一個具體的數(shù)據(jù),可以通過給定的插件名稱、標(biāo)簽和迭代唯一確定。下面將分別介紹這些概念。
圖3 以UML類圖表示的數(shù)據(jù)模型
訓(xùn)練作業(yè)
MindInsight通過目錄來區(qū)分不同的訓(xùn)練作業(yè)。為了方便用戶區(qū)分不同訓(xùn)練作業(yè)的訓(xùn)練日志文件,SummaryCollector、SummaryRecord都要求用戶指定存放訓(xùn)練日志文件的目錄。相同目錄中的訓(xùn)練日志文件,被認(rèn)為是同一次訓(xùn)練作業(yè)中產(chǎn)生的訓(xùn)練數(shù)據(jù),不同目錄中的訓(xùn)練日志文件,被認(rèn)為是不同訓(xùn)練作業(yè)中產(chǎn)生的文件。
在MindInsight的代碼中,一次訓(xùn)練一般被稱為一個TrainJob。TrainJob的id即該次訓(xùn)練的日志所在目錄的目錄名(例如 ./train_my_lenet_1)。
一次訓(xùn)練的過程中,一般會產(chǎn)生該次訓(xùn)練的溯源數(shù)據(jù)文件(文件名以_lineage結(jié)尾)和訓(xùn)練過程數(shù)據(jù)文件(文件名一般以_MS結(jié)尾)。其中溯源數(shù)據(jù)主要從全局出發(fā),描述該次訓(xùn)練的不變性質(zhì),例如訓(xùn)練所用的數(shù)據(jù)集路徑、訓(xùn)練所用的優(yōu)化器、以及用戶自定義的溯源信息。這些信息最突出的特點是不會在訓(xùn)練過程中變化。而訓(xùn)練過程數(shù)據(jù)主要描述該次訓(xùn)練的變化情況,例如loss值、參數(shù)分布、一個迭代中送入模型的圖片數(shù)據(jù)等。這些信息最突出的特點是每個迭代都會發(fā)生變化。
需要注意的是,關(guān)于訓(xùn)練信息是否發(fā)生變化的分類,并不是絕對的。比如訓(xùn)練過程數(shù)據(jù)文件中會含有計算圖數(shù)據(jù),其一般在訓(xùn)練開始的時候就確定了。
溯源數(shù)據(jù)
溯源數(shù)據(jù)主要從全局出發(fā),描述某次訓(xùn)練的不變性質(zhì)。當(dāng)MindInsight識別到多個訓(xùn)練日志目錄時,這若干次訓(xùn)練的溯源數(shù)據(jù),被組織成表格的形式展示,以方便對比和分析。
訓(xùn)練過程數(shù)據(jù)
? 插件名稱(plugin_name)
對于訓(xùn)練過程數(shù)據(jù),首先將這些訓(xùn)練數(shù)據(jù)按類型分為標(biāo)量數(shù)據(jù)(scalar)、直方圖數(shù)據(jù)(histogram)、圖片數(shù)據(jù)(image)、張量數(shù)據(jù)(tensor)等類型,這些類型在MindInsight的中被稱為插件名稱(plugin_name),當(dāng)前mindinsight支持的插件名稱定義在mindinsight.datavisual.common.enums.PluginNameEnum中。
? 標(biāo)簽(tag)
無論數(shù)據(jù)屬于何種類型,其都會依照tag進(jìn)一步被分為不同的序列。tag一般由用戶命名,用于對數(shù)據(jù)進(jìn)行區(qū)分。比如記錄loss值的標(biāo)量數(shù)據(jù),其tag名可以為loss。需要說明的是,MindInsight在對數(shù)據(jù)進(jìn)行處理時,會根據(jù)插件名稱自動為tag附加后綴。例如tag為loss的數(shù)據(jù)為標(biāo)量數(shù)據(jù),則該tag會被自動重命名為loss/scalar。
? 迭代數(shù)(step)
訓(xùn)練過程數(shù)據(jù)是在訓(xùn)練的每個迭代中產(chǎn)生的,為了區(qū)分這些數(shù)據(jù),數(shù)據(jù)會被標(biāo)記上該數(shù)據(jù)所對應(yīng)的迭代數(shù)。
? 數(shù)據(jù)的查詢和展示
在展示數(shù)據(jù)時,用戶常常希望看到某個標(biāo)簽下的數(shù)據(jù),隨著訓(xùn)練過程的變化情況。因此,查詢數(shù)據(jù)時,一般不會指定迭代數(shù),而是直接指定訓(xùn)練作業(yè)、插件名稱和標(biāo)簽,查詢該標(biāo)簽下所有迭代的數(shù)據(jù)。
總結(jié)
以上是生活随笔為你收集整理的MindInsight训练可视整体设计介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MindSpore Lite整体架构介绍
- 下一篇: MindInsight计算图可视设计