使用MindStudio进行MindInsight调优

相对应的视频教学可以在B站进行观看:
https://www.bilibili.com/video/BV1St4y1473r

一、MindSpore和MindInsight环境搭建和配置介绍

1 MindSpore简介

昇思MindSpore是一个全场景深度学习框架,旨在实现易开发、高效执行、全场景覆盖三大目标。

其中,易开发表现为API友好、调试难度低;高效执行包括计算效率、数据预处理效率和分布式训练效率;全场景则指框架同时支持云、边缘以及端侧场景。

昇思MindSpore总体架构如下图所示:

ModelZoo(模型库):ModelZoo提供可用的深度学习算法 络(ModelZoo地址)

Extend(扩展库):昇思MindSpore的领域扩展库,支持拓展新领域场景,如GNN/深度概率编程/强化学习等,期待更多开发者来一起贡献和构建。

Science(科学计算):MindScience是基于昇思MindSpore融合架构打造的科学计算行业套件,包含了业界领先的数据集、基础模型、预置高精度模型和前后处理工具,加速了科学行业应用开发(了解更多)。

Expression(全场景统一API):基于Python的前端表达与编程接口。同时未来计划陆续提供C/C++、华为自研编程语言前端-仓颉(目前还处于预研阶段)等第三方前端的对接工作,引入更多的第三方生态。

Data(数据处理层):提供高效的数据处理、常用数据集加载等功能和编程接口,支持用户灵活的定义处理注册和pipeline并行优化。

Compiler(AI编译器):图层的核心编译器,主要基于端云统一的MindIR实现三大功能,包括硬件无关的优化(类型推导、自动微分、表达式化简等)、硬件相关优化(自动并行、内存优化、图算融合、流水线执行等)、部署推理相关的优化(量化、剪枝等)。

Runtime(全场景运行时):昇思MindSpore的运行时系统,包含云侧主机侧运行时系统、端侧以及更小IoT的轻量化运行时系统。

Insight(可视化调试调优工具):昇思MindSpore的可视化调试调优工具,能够可视化地查看训练过程、优化模型性能、调试精度问题、解释推理结果(了解更多)。

Armour(安全增强库):面向企业级运用时,安全与隐私保护相关增强功能,如对抗鲁棒性、模型安全测试、差分隐私训练、隐私泄露风险评估、数据漂移检测等技术(了解更多)。

执行流程

有了对昇思MindSpore总体架构的了解后,我们可以看看各个模块之间的整体配合关系,具体如图所示:

昇思MindSpore作为全场景AI框架,所支持的有端(手机与IOT设备)、边(基站与路由设备)、云(服务器)场景的不同系列硬件,包括昇腾系列产品,英伟达NVIDIA系列产品,Arm系列的高通骁龙、华为麒麟的芯片等系列产品。

左边蓝色方框的是MindSpore主体框架,主要提供神经 络在训练、验证相关的基础API功能,另外还会默认提供自动微分、自动并行等功能。

蓝色方框往下是MindSpore Data模块,可以利用该模块进行数据预处理,包括数据采样、数据迭代、数据格式转换等不同的数据操作。在训练的过程会遇到很多调试调优的问题,因此有MindSpore Insight模块对loss曲线、算子执行情况、权重参数变量等调试调优相关的数据进行可视化,方便用户在训练过程中进行调试调优。

设计理念

  • 支持全场景协同
  • 昇思MindSpore是源于全产业的最佳实践,向数据科学家和算法工程师提供了统一的模型训练、推理和导出等接口,支持端、边、云等不同场景下的灵活部署,推动深度学习和科学计算等领域繁荣发展。
  • 提供Python编程范式,简化AI编程
  • 昇思MindSpore提供了Python编程范式,用户使用Python原生控制逻辑即可构建复杂的神经 络模型,AI编程变得简单。
  • 提供动态图和静态图统一的编码方式
  • 目前主流的深度学习框架的执行模式有两种,分别为静态图模式和动态图模式。静态图模式拥有较高的训练性能,但难以调试。动态图模式相较于静态图模式虽然易于调试,但难以高效执行。 昇思MindSpore提供了动态图和静态图统一的编码方式,大大增加了静态图和动态图的可兼容性,用户无需开发多套代码,仅变更一行代码便可切换动态图/静态图模式,例如设置context.set_context(mode=context.PYNATIVE_MODE)切换成动态图模式,设置context.set_context(mode=context.GRAPH_MODE)即可切换成静态图模式,用户可拥有更轻松的开发调试及性能体验。
  • 采用函数式可微分编程架构,使用户聚焦于模型算法的数学原生表达
  • 神经 络模型通常基于梯度下降算法进行训练,但手动求导过程复杂,结果容易出错。昇思MindSpore的基于源码转换(Source Code Transformation,SCT)的自动微分(Automatic Differentiation)机制采用函数式可微分编程架构,在接口层提供Python编程接口,包括控制流的表达。用户可聚焦于模型算法的数学原生表达,无需手动进行求导。
  • 统一单机和分布式训练的编码方式
  • 随着神经 络模型和数据集的规模不断增加,分布式并行训练成为了神经 络训练的常见做法,但分布式并行训练的策略选择和编写十分复杂,这严重制约着深度学习模型的训练效率,阻碍深度学习的发展。MindSpore统一了单机和分布式训练的编码方式,开发者无需编写复杂的分布式策略,在单机代码中添加少量代码即可实现分布式训练,例如设置context.set_auto_parallel_context(parallel_mode=ParallelMode.AUTO_PARALLEL)便可自动建立代价模型,为用户选择一种较优的并行模式,提高神经 络训练效率,大大降低了AI开发门槛,使用户能够快速实现模型思路。
  • 层次结构

    昇思MindSpore向用户提供了3个不同层次的API,支撑用户进行 络构建、整图执行、子图执行以及单算子执行,从低到高分别为Low-Level Python API、Medium-Level Python API以及High-Level Python API。

  • High-Level Python API
  • 第一层为高阶API,其在中阶API的基础上又提供了训练推理的管理、混合精度训练、调试调优等高级接口,方便用户控制整 的执行流程和实现神经 络的训练推理及调优。例如用户使用Model接口,指定要训练的神经 络模型和相关的训练设置,对神经 络模型进行训练,通过Profiler接口调试神经 络性能。
  • Medium-Level Python API
  • 第二层为中阶API,其封装了低阶API,提供 络层、优化器、损失函数等模块,用户可通过中阶API灵活构建神经 络和控制执行流程,快速实现模型算法逻辑。例如用户可调用Cell接口构建神经 络模型和计算逻辑,通过使用Loss模块和Optimizer接口为神经 络模型添加损失函数和优化方式,利用Dataset模块对数据进行处理以供模型的训练和推导使用。
  • Low-Level Python API
  • 第三层为低阶API,主要包括张量定义、基础算子、自动微分等模块,用户可使用低阶API轻松实现张量定义和求导计算。例如用户可通过Tensor接口自定义张量,使用ops.composite模块下的GradOperation算子计算函数在指定处的导数。
  • 2 MindInsight简介

    MindInsight是昇思MindSpore的可视化调试调优工具。利用MindInsight,您可以可视化地查看训练过程、优化模型性能、调试精度问题、解释推理结果。您还可以通过MindInsight提供的命令行方便地搜索超参,迁移模型。在MindInsight的帮助下,您可以更轻松地获得满意的模型精度和性能。

    MindInsight包括以下内容:

  • 训练过程可视 (收集Summary数据、查看训练看板)
  • 训练溯源及对比
  • 性能调优
  • 精度调试
  • 超参调优
  • 模型迁移
  • 3 环境安装配置

    3.1 MindSpore环境安装配置

    选择适合自己的环境条件后,获取命令并按照指南进行安装,或使用云平台创建和部署模型,安装细节参见链接:
    https://www.mindspore.cn/install

    验证是否安装成功

    方法一:

    python -c “import mindspore;mindspore.run_check()”

    如果输出:

    MindSpore version: 版本
    The result of multiplication calculation is correct, MindSpore has been installed successfully!

    说明MindSpore安装成功了。

    方法二:

    import numpy as np
    from mindspore import Tensor
    import mindspore.ops as ops
    import mindspore.context as context
    context.set_context(device_target=”Ascend”)
    x = Tensor(np.ones([1,3,3,4]).astype(np.float32))
    y = Tensor(np.ones([1,3,3,4]).astype(np.float32))
    print(ops.add(x, y))

    如果输出:

    [[[[2. 2. 2. 2.]
    [2. 2. 2. 2.]
    [2. 2. 2. 2.]]
    [[2. 2. 2. 2.]
    [2. 2. 2. 2.]
    [2. 2. 2. 2.]]
    [[2. 2. 2. 2.]
    [2. 2. 2. 2.]
    [2. 2. 2. 2.]]]]

    说明MindSpore安装成功了。

    升级MindSpore版本

    当需要升级MindSpore版本时,可执行如下命令:

    pip install –upgrade mindspore-ascend=={version}

    其中:

  • 升级到rc版本时,需要手动指定{version}为rc版本 ,例如1.6.0rc1;如果升级到正式版本,=={version}字段可以缺省。
  • 3.2 MindInsight环境安装配置

    确认系统环境信息

  • 硬件平台支持Ascend、GPU和CPU。
  • 确认安装Python 3.7.5或3.9.0版本。如果未安装或者已安装其他版本的Python,可以选择下载并安装:Python 3.7.5版本 64位,下载地址:官 或华为云。Python 3.9.0版本 64位,下载地址:官 或华为云。
  • MindInsight与MindSpore的版本需保持一致。
  • 若采用源码编译安装,还需确认安装以下依赖。确认安装node.js 10.19.0及以上版本。确认安装wheel 0.32.0及以上版本。
  • 其他依赖参见requirements.txt。
  • 可以采用pip安装,源码编译安装和Docker安装三种方式。

    pip安装

    安装PyPI上的版本:

    pip install mindinsight=={version}

    安装自定义版本:

    pip install https://ms-release.obs.cn-north-4.myhuaweicloud.com/{version}/MindInsight/any/mindinsight-{version}-py3-none-any.whl –trusted-host ms-release.obs.cn-north-4.myhuaweicloud.com -i https://pypi.tuna.tsinghua.edu.cn/simple

    其中:

  • 当环境中的MindSpore不是最新版本时,需要手动指定{version}为当前环境中MindSpore版本 。
  • 注:非root用户需要在命令中加入“–user”参数。

    源码编译安装

    从代码仓下载源码

    git clone https://gitee.com/mindspore/mindinsight.git -b r1.7

    编译安装MindInsight

    可选择以下任意一种安装方式:

    1.在源码根目录下执行如下命令。

    cd mindinsight
    pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
    python setup.py install

    2.构建whl包进行安装

    进入源码的根目录,先执行build目录下的MindInsight编译脚本,再执行命令安装output目录下生成的whl包。

    cd mindinsight
    bash build/build.sh
    pip install output/mindinsight-{version}-py3-none-any.whl -i https://pypi.tuna.tsinghua.edu.cn/simple

    Docker安装

    MindSpore的镜像包含MindInsight功能,请参考官 安装指导。

    验证是否成功安装

    执行如下命令:

    mindinsight start

    如果出现下列提示,说明安装成功:

    Web address: http://127.0.0.1:8080
    service start state: success

    二、MindStudio简介和安装

    1 MindStudio简介

    MindStudio提供在AI开发所需的一站式开发环境,支持模型开发、算子开发以及应用开发三个主流程中的开发任务。依靠模型可视化、算力测试、IDE本地仿真调试等功能,MindStudio能够帮助您在一个工具上就能高效便捷地完成AI应用开发。MindStudio采用了插件化扩展机制,开发者可以通过开发插件来扩展已有功能。

    功能简介

  • 针对安装与部署,MindStudio提供多种部署方式,支持多种主流操作系统,为开发者提供最大便利。
  • 针对 络模型的开发,MindStudio支持TensorFlow、Pytorch、MindSpore框架的模型训练,支持多种主流框架的模型转换。集成了训练可视化、脚本转换、模型转换、精度比对等工具,提升了 络模型移植、分析和优化的效率。
  • 针对算子开发,MindStudio提供包含UT测试、ST测试、TIK算子调试等的全套算子开发流程。支持TensorFlow、PyTorch、MindSpore等多种主流框架的TBE和AI CPU自定义算子开发。
  • 针对应用开发,MindStudio集成了Profiling性能调优、编译器、MindX SDK的应用开发、可视化pipeline业务流编排等工具,为开发者提供了图形化的集成开发环境,通过MindStudio能够进行工程管理、编译、调试、性能分析等全流程开发,能够很大程度提高开发效率。
  • 功能框架

    MindStudio功能框架如图所示,目前含有的工具链包括:模型转换工具、模型训练工具、自定义算子开发工具、应用开发工具、工程管理工具、编译工具、流程编排工具、精度比对工具、日志管理工具、性能分析工具、设备管理工具等多种工具。

    工具功能

    MindStudio工具中的主要几个功能特性如下:

  • 工程管理:为开发人员提供创建工程、打开工程、关闭工程、删除工程、新增工程文件目录和属性设置等功能。
  • SSH管理:为开发人员提供新增SSH连接、删除SSH连接、修改SSH连接、加密SSH密码和修改SSH密码保存方式等功能。
  • 应用开发:针对业务流程开发人员,MindStudio工具提供基于AscendCL(Ascend Computing Language)和集成MindX SDK的应用开发编程方式,编程后的编译、运行、结果显示等一站式服务让流程开发更加智能化,可以让开发者快速上手。
  • 自定义算子开发:提供了基于TBE和AI CPU的算子编程开发的集成开发环境,让不同平台下的算子移植更加便捷,适配昇腾AI处理器的速度更快。
  • 离线模型转换:训练好的第三方 络模型可以直接通过离线模型工具导入并转换成离线模型,并可一键式自动生成模型接口,方便开发者基于模型接口进行编程,同时也提供了离线模型的可视化功能。
  • 日志管理:MindStudio为昇腾AI处理器提供了覆盖全系统的日志收集与日志分析解决方案,提升运行时算法问题的定位效率。提供了统一形式的跨平台日志可视化分析能力及运行时诊断能力,提升日志分析系统的易用性。
  • 性能分析:MindStudio以图形界面呈现方式,实现针对主机和设备上多节点、多模块异构体系的高效、易用、可灵活扩展的系统化性能分析,以及针对昇腾AI处理器的性能和功耗的同步分析,满足算法优化对系统性能分析的需求。
  • 设备管理:MindStudio提供设备管理工具,实现对连接到主机上的设备的管理功能。
  • 精度比对:可以用来比对自有模型算子的运算结果与Caffe、TensorFlow、ONNX标准算子的运算结果,以便用来确认神经 络运算误差发生的原因。
  • 开发工具包的安装与管理:为开发者提供基于昇腾AI处理器的相关算法开发套件包Ascend-cann-toolkit,旨在帮助开发者进行快速、高效的人工智能算法开发。开发者可以将开发套件包安装到MindStudio上,使用MindStudio进行快速开发。Ascend-cann-toolkit包含了基于昇腾AI处理器开发依赖的头文件和库文件、编译工具链、调优工具等。
  • 2 MindStudio安装

    2.1 安装Python依赖

    (1)官方 站下载安装安装Python3.7.5到Windows本地。

    (2)设置环境变量。

    (3)“Win + R”快捷键打开系统命令行,输入“Python -V”,显示Python版本 表示安装成功。

    (4)安装Python3相关依赖。

    pip install xlrd==1.2.0
    pip install absl-py
    pip install numpy
    pip install requests

    (5)如若返回如下信息,则表示安装成功。

    Successfully installed xlrd-1.2.0
    Successfully installed absl-py-0.12.0 six-1.15.0
    Successfully installed numpy-1.20.1
    Successfully installed requests-2.27.1

    更多安装细节请参考:
    https://www.hiascend.com/document/detail/zh/mindstudio/50RC1/instg/instg_000022.html

    2.2 安装MinGW依赖

    (1)根据电脑配置,下载适合的(下载参考地址),例如64位可以选择x86_64-posix-seh。

    (2)解压MinGW安装包到自定义路径。

    (3)在Windows 10操作系统的“控制面板 > 系统和安全 > 系统”中选择“高级系统设置”,如图所示。

    (4)打开系统命令行,输入gcc -v命令。若显示版本 表示安装成功。

    更多安装细节请参考:
    https://www.hiascend.com/document/detail/zh/mindstudio/50RC1/instg/instg_000022.html

    2.3 安装Java依赖

    (1)要求Java版本为11,参考下载地址。

    (2)下载后安装到本地,设置Java环境变量。

    (3)打开系统命令,输入java –version,如显示Java版本信息,则表示安装成功。

    2.4 安装Cmake

    以msi格式软件包为例,安装步骤如下(下载参考地址),你也可以登录CMake官 下载合适的版本

    (1)单击快捷键“win+R”,输入cmd,单击快捷键“Ctrl+Shift+Enter”,进入管理员权限命令提示符。若弹出“用户帐户控制”提示窗口,单击“是”。

    (2)执行以下命令,安装软件包:

    msiexec /package {path}{name}.msi

    例如:

    msiexec /package D:cmake-3.22.3-win64-x64.msi

    (3)根据安装向导进行安装。

    更多安装细节请参考:
    https://www.hiascend.com/document/detail/zh/mindstudio/50RC1/instg/instg_000022.html

    2.5 安装MindStudio

    (1)MindStudio官 为我们提供两种安装方式。大家可以选择.zip文件,也可以选择.exe文件。此处我选择下载.zip文件。

    (2)下载好后直接解压到任意目录。解压后目录结构如图所示。

    (3)点击“bin”目录,然后双击目录下的“MindStudio64.exe”应用程序,运行MindStudio。

    详细安装指导请参阅:
    https://www.hiascend.com/document/detail/zh/mindstudio/50RC1/instg/instg_000021.html

    三、使用MindStudio创建训练工程和运行脚本

    1 导入模型代码创建训练工程

    (1) 启动MindStudio

    首次启动MindStudio会进入如下欢迎界面,大家按需选择新建项目或打开本地项目,在这里,我点击 Open 按钮打开本地现存项目(
    https://gitee.com/mindspore/models/tree/master/official/recommend/ncf)。

    (2) 选择项目所在位置,添加 ncf 项目,点击 OK确定。

    (3) 项目结构如图所示。

    2 配置远程环境

    2.1 连接远程服务器

    (1) 点击 Tools -> Deployment -> Configuration,配置远程连接服务器。

    (2) 选中左侧 Deployment 选项卡,点击左上角加 ,输入自定义远程连接名称。

    (3) 输入服务器 IP 地址、端口 、用户名及密码,建议勾选 Save password 保存密码,测试可以成功连接后,点击OK确定。

    (4) 点击 Mappings 配置本地到服务器的文件路径映射。Local Path 填入本地项目路径,Deployment Path 选中远程服务器的项目路径,这两个文件夹名称不必完全相同。Excluded Paths(非必需)为配置忽略路径,表示忽略的项目文件不会上传到远程服务器。配置完成后,点击 OK 确定。

    2.2 设置CANN

    (1) 点击 File -> Settings,进入设置。

    (2) 在左侧菜单依次选中 Appearance & Behavior -> System Settings -> CANN, 进入 CANN 配置选项卡中,设置远程服务器CANN路径。

    2.3 配置远程SDK

    (1) 点击 File -> Projects Structure 进入项目设置。

    (2) 在左侧菜单中选择 SDKs,点击左上角加 ,选择 Add Python SDK… 进行SDK配置。

    (3) 在弹出的选项卡中选择 SSH Interpreter,在Deploy中选择远程连接名称,等待 IDE 自动检测可用的Interpreter。

    (4) 自动检测远程的SDK并显示如下,可以对其进行手动修改,我将 SDK 名称更改为 msp1.7 以便区分。

    (5) 在 Project 中设置刚才配置的远程SDK msp1.7。

    3 运行训练脚本

    3.1 安装项目依赖

    (1) 点击 Tools -> Start SSH session 打开远程服务器终端。

    (2) 远程服务器终端显示在 IDE 下方控制台处,输入 pip list 检查所需依赖是否已安装。

    (3) 菜单栏中点击 Ascend -> Convert To Ascend Project,将当前项目转换为昇腾项目。

    (4) 在弹出的对话框中选择转换的类型和框架,此处选择 Ascend Training 和 MindSpore 框架,点击 OK 确定。

    3.2 数据集下载和处理

    (1)NCF模型介绍

    NCF 是用于协同过滤推荐的通用框架,其中神经 络架构用于对用户交互进行建模。与传统模型不同,NCF 不诉诸矩阵分解 (MF),其对用户和项目的潜在特征进行内积。它用可以从数据中学习任意函数的多层感知器代替积。

    详见:
    https://gitee.com/mindspore/models/tree/master/official/recommend/ncf

    (2)展开src目录,右击 movielens.py,配置运行参数。

    (3)配置运行参数,其中 Script path 设置为运行文件,Parameters 中设置参数,Python interpreter 选择前文配置的远程服务器中的 SDK,点击 OK 确定。

    (4) 点击工具栏中的运行按钮,等待 ml-1m 数据集下载和预处理,大家可以在控制台输出查看当前程序运行的实时日志。

    如果数据处理结束,会在控制台输出正常退出。

    (5) 当运行程序后产生新的文件时,需要本地同步更新。建议大家点击Tools -> Deployment -> Automatic Upload 开启本地与服务器文件自动同步的功能。

    (6)开启自动同步后,更新过程如图所示:

    3.3 训练项目

    (2)设置训练参数,此处设置了训练20个epoch,batch_size为256,输出保存在 ./output文件夹中,checkpoint保存在 ./nfc.ckpt 文件夹中,点击 OK 确定。

    (3)点击运行,项目开始进行训练。

    (4)在控制台中查看训练过程中实时打印的日志。

    四、MindInsight训练可视化及精度调优指南

    1 准备训练脚本

    (1)在train.py中,导入SummaryCollector。

    from mindspore.train.callback import SummaryCollector

    (2)在train.py代码中,实例化 SummaryCollector,并添加到callbacks中。

    # Init summary_collector
    summary_collector = SummaryCollector(summary_dir=”./summary_dir”)

    model.train(epochs,
    ds_train,
    callbacks=[TimeMonitor(ds_train.get_dataset_size()),
    callback, ckpoint_cb, summary_collector],
    dataset_sink_mode=False)

    声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

    上一篇 2022年6月17日
    下一篇 2022年6月17日

    相关推荐