FPGA之道(18)FPGA设计的编译过程(FPGA编译步骤)
1092
2022-05-29
一、昇腾全栈解决方案
1.1. 昇腾整体介绍
当前中国的人工智能主要聚焦于应用,基础软硬件相对薄弱。昇腾的目标就是打造最强的软硬件的基础平台,赋能千行百业到人工智能无所不及。
接下来会介绍如何通过 MindStudio 全流程工具链串起一条从上到下的应用流,如何从训练模型、开发模型到应用模型和使用 SDK,快速的走通一个应用、一个分类目标检测的应用。
2019 年 8 月 29 日,科技部宣布将依托华为建设基础软硬件国家新一代人工智能开放创新平台。
昇腾的全栈解决方案:
底层从推理到训练,全场景的硬件产品
上层 CANN 软件平台,通过异构计算架构平台 CANN 能充分释放昇腾产品强大的澎湃的验算力,它里面做了很多图结构的编译优化
再上层是 MindSpore AI 框架,他是一个支持边端云协同的 AI 训练推理框架
最上层提供了数据中心、智能边缘的一些组件、做了极致优化的模型优化、还有各个行业的 SDK,ModelArts 提供了数据标注、模型部署等等很多一站式的方案
全流程的开发工具链,和昇腾开发场景相关的一个工具链,它从模型开发、算子开发、应用开发到端到端开发都可使用起来。
目标:硬件开放,软件开发,使能伙伴。
上面列出了推理训练的产品,这些硬件会集成开放给合作伙伴,进入他们的解决方案和服务器中,这就是所说的硬件开发,打造算力平台基石。
1.2. 极致性能 CANN
强大的异构计算平台,能够充分的释放强大的算力,提供了 AscendCL 统一编程接口,通过 CANN 的优化做到极致性能。
AI 框架:华为推出的 MindSpore 框架,还有业界比较具有代表的 AI 框架
操作系统:支持 14+ OS
设备形态:支持端、边、云的各种设备
通过极致的优化,昇腾在训练场景性能持续领先,通过第一个柱状图的红色柱子,可以看出 Huawei Atlas 800 在各个模型上的吞吐量都是最强的;昇腾在推理场景性能全面占优,通过第二个柱状图的红色柱子,可以看出Huawei Atlas 3001 就可以实现 80 路高清视频同时分析。这些都得益于 CANN 的极致优化。
1.3. 全场景 AI 框架 MindSpore
全场景 AI 框架 MindSpore,构建端边云全场景生态。它能做到全自动并行,不像现在很多模型都很大、很多参数甚至多达 175 亿个参数,如果在这种情况下,不并行执行,效率会很低。支持全场景协同,端边云协同打通,非常适合于昇腾产品。同时也做到全流程极简。
MindSpore 发展势头也非常好,开源贡献者 1500+,日均下载量 600+,有良好的商业生态,同时在学术上也不仅和高校合作还发表相关论文也众筹 200+ 个模型。
1.4. 使能 MindX
MindX归纳为 2 + 1 +
2:深度学习使能 MindX DL,数据中心设备与计算资源统一管理与调度;智能边缘使能 MindX Edge,轻量化的边缘计算资源统一管理运维。通过这些组件屏蔽一些配置和开发,使上层调用更加简洁,做到极简易用。
1:优化模型库 ModelZoo,预训练高性能模型,总共推出 60+ 的模型。
X:行业 AI 应用软件开发套件,比如,mxVision,行业 SDK mxManufacture,AI 超算、交易、医疗、金融、电力……。用尽量少的代码,打通一个全流程。
1.5. MindStudio 2.0 支撑全流程开发
它能支持极简、易用的开发,只要选择模型,提供数据,提供业务流程,一个简易的基于 SDK 的全流程只需要 140 行代码,如果不基于 SDK 而是自行开发模型则需要 1.5 万行以上的代码。
在实际的工厂生产线上,质检的准确率高达 99.9%,使人工质工作量减低超过 60%。
1.6. 昇腾开发者社区
昇腾开发者社区上不仅有各种需要的工具、框架、组件,都可以直接下载,还有很多其他的资源,比如,样例、模型,还有课程和教学资源,还可以去论坛发表意见、想法。
二、MindStudio 整体介绍
2.1. 面向昇腾芯片的全栈开发工具链
MindStudio 是一套基于 IntelliJ 框架的开发工具平台,提供了应用开发、调试、模型转换功能,同时还提供了网络移植、优化和分析功能,为用户开发应用程序带来了极大的便利。针对计算子开发、提供了全套的算子开发、调优能力;针对网络模型开发,集成了离线模型转换工具、模型量化工具、模型精度对比工具、日志分析工具;针对计算引擎,预制了典型的分类模型、检测网络;针对应用开发,集成了各种工具,如分析器和便器,为开发提供了图形化的集成开发环境。
2.2.昇腾 AI 开发
应用开发场景的流程:创建应用工程,代码开发,模型集成,应用调试,应用性能调优,质量保证,发布应用。
模型调优场景:创建算法工程,模型训练,生成模型,模型转换,模型算子精度比对,模型整网调优,模型评估。
算子开发场景:创建算子工程,算子开发,算子调试,算子仿真运行,算子性能调优,算子上板运行,算子质量评估。
2.3. MindStudio 架构
Mind Studio是一套基于IntelliJ框架的开发工具链平台,提供了应用开发、调试、模型转换功能,同时还提供了网络移植、优化和分析功能,为用户开发应用程序带来了极大的便利。
功能简介
针对算子开发,Mind Studio提供了全套的算子开发、调优能力。通过Mind Studio提供的工具链也可以进行第三方算子开发,降低了算子开发的门槛,并提高算子开发及调试调优的效率,有效提升了产品竞争力。
针对网络模型的开发,Mind Studio集成了离线模型转换工具、模型量化工具、模型精度比对工具、模型运行性能分析工具、日志分析工具,提升了网络模型移植、分析和优化的效率。
针对计算引擎开发,Mind Studio预置了典型的分类网络、检测网络等计算引擎代码,降低了开发者的技术门槛,加快了开发者对AI算法引擎的编写及移植效率。
针对应用开发,Mind Studio集成了各种工具如分析器(Profiler)和编译器(Compiler)等,为开发者提供了图形化的集成开发环境,通过Mind Studio能够进行工程管理、编译、调试、性能分析等全流程开发,能够很大程度提高开发效率。
2.3. MindStudio 安装流程
Mind Studio只能安装在Ubuntu服务器上,可以在Ubuntu服务器上使用原生桌面自带的终端gnome-terminal进行安装,也可以在Windows服务器上通过SSH登录到Ubuntu服务器进行安装,因为Mind Studio是一款GUI程序,所以在Windows服务器上通过SSH登录到Ubuntu服务器进行安装时,需要使用集成了X server的SSH终端(比如mobaxterm,该工具版本需要为v20.2及以上)。
Mind Studio所在的环境为开发环境,开发人员可以进行普通的工程管理、代码编写、编译、模型转换;实际安装昇腾AI处理器的环境为运行环境,实际运行用户开发的应用。如果需要在真实的昇腾AI处理器上运行开发的工程,则需要将Mind Studio连接到主机,并通过主机和设备上的工具后台服务模块进行配合,完成所有开发工程的运行、日志和性能分析等功能。
Toolkit:开发套件包,为开发者提供基于昇腾AI处理器的相关算法开发工具包,旨在帮助开发者进行快速、高效的人工智能算法开发。开发者可以将开发工具包安装到Mind Studio上,使用Mind Studio开发工具进行算法快速开发。
2.4. MindStudio 部署形态
部署形态可分为
共部署形态
分部署形态
2.5. MindStudio 软件包与环境准备
硬件:内存:最小4GB,推荐8GB,磁盘空间:最小6GB
操作系统:版本:18.04 64位操作系统
Python:3.7.5
OpenJDK:openjdk-8
cmake:3.5.1+
gcc:7.4.0
g++:7.4.0
protobuf:3.11.3+
系统语言:en_US.U
2.6. MindStudio CANN-Toolkit 包管理
ADK Manager为用户提供了在不重装Mind Studio的前提下,切换以及更新ADK版本的功能。使用该功能之前,请确保已经完成Mind Studio以及ADK的安装。
在Mind Studio工程界面菜单栏依次选择“File > Settings... > Appearance&Behavior > System Settings > ADK”,弹出ADK Manager界面。
在Mind Studio工程界面菜单栏依次选择“Tools > ADK Manager”,弹出ADK Manager界面。
在Mind Studio快捷工具栏右上角,单击如下图标进入ADK Manager界面。
在Mind Studio欢迎页面右下角,依次选择“Configure > ADK Manager ”,弹出ADK Manager界面。
三、AI 应用开发
3.1. MindStudio 的使用-工具界面
Create new project:创建新工程,创建后工程保存在“$HOME/AscendProjects”目录。
Open project:打开已有工程。
Checkout from version control:从git等版本控制工具导出工程。
3.2. MindStudio 的使用-应用工程(1)
应用工程开发流程
新建 Ascend App 工程
代码开发、模型、数据准备
编译配置与工程编译
运行配置与工程运行
借助 dump/profiling 功能性能调优
3.3. MindStudio 的使用-应用工程(2)
在New Project窗口中,选择Ascend App,配置工程相关参数,单击Next。
在New Project窗口中,选择工程类型。
Create Empty Project:创建一个仅包括开发框架的工程,不含具体的代码逻辑。
Classification(resnet50) :创建一个以acl_resnet50样例为模板的工程。
3.4. MindStudio 的使用-应用工程(3)
代码开发、模型/数据准备
开发应用代码
模型准备,下载模型数据、转换模型、添加模型
数据准备,打开并执行
3.1. MindStudio 的使用-应用工程(4)
编译配置与工程编译
编译配置,通过菜单栏“Build->Edit Build Configuration”或者点击工具栏的“工具图标”,编辑编译配置。
编译工程,通过菜单栏“Build->Build/Rebuild->具体配置”或者点击工具栏的“工具图标”。
3.5. MindStudio 的使用-应用工程(5)
运行配置与工程运行
运行配置,菜单栏“Run->Edit Configuration”,编辑运行配置。
工程运行,菜单栏“Run->Run ...”。
3.6. MindStudio 的使用-应用工程(6)
借助 dump 和 profiling 功能调优
Dump configuration,选择“Ascend > Dump Configuration”菜单。
Run,设置dump完成后,分别单击MindStudio界面“Build”和“Run”菜单,重新编译和运行应用工程。
3.7. MindStudio 的使用-Profiling 工具(1)
MindStudio针对昇腾AI处理器提供高效、易用的系统化性能分析工具Profiling,便于快速识别产品的关键性能瓶颈并提出针对性能优化的建议,最终实现产品的极致性能。Profiling提供针对APP工程的硬件和软件性能数据采集、分析、汇总展示。
通过以下操作方法启动Profiling:
选择已编译完成的工程。
单击菜单栏“Run > Run...”,在弹出窗口中选择“Edit Configurations...”,弹出Profiling设置窗口。
3.8. MindStudio 的使用-Profiling 工具(2)
Profiling执行成功后,通过右键单击工程目录,选择“View Profiling Result”菜单,查看Profiling数据结果。在Profiling运行完成后,以时序图的呈现方式为用户提供全流程推理过程中的运行情况,按照调度流程ACL> GE > Runtime > Ascend Compute来呈现整体的运行状况。
3.9. MindStudio 的使用-Profiling 工具(3)
Summary View视图,支持Summary View视图展示,呈现APP工程信息、AI Core Op Statistic信息、算子Memory Bandwidth信息与AI Core Utilization信息。
3.10. MindStudio 的使用-日志工具
MindStudio为昇腾AI处理器提供覆盖全系统的日志收集与日志分析解决方案,提升运行时算法问题定位效率。MindStudio提供全系统统一的日志格式,并以图形化的形式提供跨平台日志可视化分析能力及运行时诊断能力,提升日志分析系统的易用性。
通过Log工具,您可以进行以下操作:
日志管理
设置日志级别
在MindStudio窗口底部单击“+Log”标签,显示“Log”窗口,可以通过该窗口查看日志信息。
四、模型调优
4.1. MindStudio 的使用-模型转换(1)
用户使用Caffe/TensorFlow等框架训练好的模型,可通过ATC工具将其转换为昇腾AI处理器支持的离线模型,模型转换过程中可以实现算子调度的优化、权重数据重排、内存使用优化等,可以脱离设备完成模型的预处理。
可以通过如下两种方式进入模型转换界面:
在菜单栏选择“Ascend > Model Converter”。
在菜单栏选择“View > Appearance > Toolbar” ,菜单栏下方会出现一行工具栏,选择。
4.2. MindStudio 的使用-模型转换(2)
配置输入节点(Input Node)。
某些情况下,用户想要查看某层算子参数是否合适,则需要将该层算子的参数输出,即可以通过单击“Select”按钮,在弹出网络拓扑结构中将所需层的算子标记为“Select”,然后在“Output Nodes”参数下方选中想要输出的算子,模型转换后,在相应.om模型文件可以看到该算子的输出直接作为模型的输出。
4.3. MindStudio 的使用-模型转换(3)
数据预处理是昇腾AI处理器提供的硬件图像预处理模块,包括色域转换,图像归一化(减均值/乘系数)和抠图(指定抠图起始点,抠出神经网络需要大小的图片)等功能。
只有当“Model Information”页签,“Input Nodes”参数中,输入节点的“Type”有配置为“Uint8”类型,“Data Pre-Processing”页签才可以配置该节点的数据预处理功能。如果模型有多个输入,每个输入节点都可以获取shape信息中的宽和高,并且“Input Nodes”参数中每个输入节点的“Type”都配置为“Uint8”,则“Data Pre-Processing”页签,可以配置多个节点的数据预处理功能。
4.4. MindStudio 的使用-模型可视化(1)
对于已经转换成功的.om模型文件,可以在MindStudio界面呈现其网络拓扑结构,并可以查看模型所使用的算子。依次单击菜单栏 “Ascend > Model Visualizer”,或在工具栏选择。
4.5. MindStudio 的使用-模型可视化(2)
查看算子信息
单击某层算子,该层算子会出现绿色选中框,右侧区域会展示该算子的详细信息,包括算子名称、算子输入、输出等信息。单击展开算子的所有参数信息,用户也可以逐层单击相关参数左侧的展开按钮,查看参数的详细信息;单击折叠所有的算子信息。
右下角会展示该网络模型的整体结构,包括左侧展示框中的算子在整体网络结构中的位置,即图中的蓝色框选择位置。左侧展示区域下拉,右侧整体区域中的蓝区选择框随之往下移动。左侧展示框放大和缩小,右侧蓝色框随之缩小和放大。
查看算子输出维度和shape信息
每一层算子输出的维度和shape信息,将鼠标移至某个shape上面,在其上面会显示算子输出的维度信息。
搜索算子
在界面右下方会弹出搜索区域。搜索区域中给出了该模型所用到的所有算子,您可以在搜索区域对话框中输入算子名称,下方搜索区域会列出相关的算子。选择其中一个算子,左侧网络拓扑结构中相应算子会显示绿色选中框,右上方会展示该算子的详细信息,包括算子名称、算子输入、输出等信息。
搜索算子内部信息
选中某层算子,单击右上方的展开按钮,右侧区域框会展示该层所包括所有算子的信息,单击或在右侧区域使用“Ctrl+F”快捷键,弹出搜索界面。其中,Case sensitive:大小写敏感;Wrap Search:循环搜索;Backward:反向搜索。
4.6. MindStudio 的使用-精度对比
在模型转换过程中对模型进行了优化,包括算子消除、算子融合、算子拆分,可能会造成自有实现的算子运算结果与业界标准算子(如Caffe、TensorFlow、ONNX)运算结果存在偏差,此时需要提供工具比对两者之间的差距,帮助开发人员快速解决算子精度问题。
精度比对工具提供比对华为自有模型算子的运算结果与Caffe、TensorFlow、ONNX标准算子的运算结果,以便确认误差发生的算子,目前提供以下比对项目:余弦相似度、最大绝对误差、累积相对误差、欧氏相对距离、KLD散度、标准差的算法比对。
4.6. MindStudio 的使用-模型评估报告(推理场景)
进行模型转换时,如果选择的模型文件中包含不支持算子,就会转换模型失败,并生成模型评估报告。
4.7. MindStudio 的使用-训练工程(1)
在MindStudio欢迎界面中单击“Create new project”,进入创建工程界面,在左侧导航栏选择“Ascend Training”。
4.8. MindStudio 的使用-训练工程(2)
单击应用工程界面“Run > Edit Configurations...”,进入运行配置界面。在运行配置界面上点击“+ ”然后选择“Ascend Training”进入运行参数配置界面。“Run Mode”选择“Remote Run”或“Local Run”。
单击应用工程界面“Run >Run”,执行训练。训练执行过程:连接远端训练机器 -> 打包训练工程发布到远端训练机器 -> 启动训练工程执行。执行训练后,在应用工程界面底部“Run”窗口显示运行实时信息。如果训练成功,打印训练成功信息。如果训练失败,在工程根目录下的out/reports下生成训练工程的整网支持度报告network_analysis_timestamp.report。
4.9. MindStudio 的使用-脚本转换
MindConverter是一款用于将PyTorch脚本文件、TensorFlow框架模型文件转换到MindSpore脚本的工具。结合转换报告的信息,用户只需对转换后的脚本进行微小的改动,即可快速将PyTorch脚本文件、TensorFlow框架的模型迁移到MindSpore。
五、AI算子
5.1. MindStudio 的使用-自定义算子开发(1)
在MindStudio欢迎界面中单击“Create new project”,进入创建工程界面。在左侧导航栏选择“Ascend Operator”,在右侧配置算子工程信息。单击“Next”,在弹出的页面中配置算子相关信息。
5.2. MindStudio 的使用-自定义算子开发(2)
通过调用TBE DSL接口,在算子工程下的“tbe/impl/add.py”文件中进行Add算子的实现,包括算子函数定义、算子入参校验、compute过程实现及调度与编译。
5.3. MindStudio 的使用-自定义算子开发(3)
进入“op_proto/”目录,编写IR实现文件“xxx.h”和“xxx.cpp”,将算子注册到算子原型库中。网络运行时,GE会调用算子原型库的校验接口进行基本参数的校验,校验通过后,会根据原型库中的推导函数推导每个节点的输出shape与dtype,进行输出tensor的静态内存的分配。
需要通过配置算子信息文件,将算子的相关信息注册到算子信息库中。算子信息库主要体现算子在昇腾AI处理器上物理实现的限制,包括算子的输入输出dtype、format以及输入shape信息。网络运行时,FE会根据算子信息库中的算子信息做基本校验,判断是否需要为算子插入合适的转换节点,并根据算子信息库中信息找到对应的算子实现文件进行编译,生成算子二进制文件进行执行。
5.4. MindStudio 的使用-自定义算子开发(4)
以上为算子工程目录结构和主要文件。
5.5. MindStudio 的使用-自定义算子开发(5)
上图展示了设置 TBE Python 库的步骤。
5.6. MindStudio 的使用-UT 测试
MindStudio提供了基于gtest框架的新的UT测试方案,简化了开发者开发UT测试用例的复杂度。
UT(Unit Test:单元测试)是开发人员进行单算子运行验证的手段之一,主要目的是:
测试算子代码的正确性,验证输入输出结果与设计的一致性。
UT侧重于保证算子程序能够跑通,选取的场景组合应能覆盖算子代码的所有分支(一般来说覆盖率要达到100%),从而降低不同场景下算子代码的编译失败率。
5.7. MindStudio 的使用-ST 测试
MindStudio提供了MindSpore框架的算子ST(System Test)测试框架,可以自动生成测试用例,在真实的硬件环境中,验证算子功能的正确性和计算结果准确性,包括:
根据算子实现和算子信息文件(*_impl.py)生成算子测试用例定义文件(*.json),作为算子ST测试用例的输入。
根据算子测试用例定义文件生成ST测试数据及测试用例执行代码,在硬件环境上执行算子测试用例。
5.8. MindStudio 的使用-算子部署
在弹出的界面中选择“Deploy Locally”,并单击“Deploy”按钮。
5.9. MindStudio 的实践-云端实验室
在云端实验室提供了一套完成的在线实验环境,方便大家学习和体验。
六、总结
MindStudio工具中的主要几个功能特性,工程管理,SSH管理,应用开发,自定义算子开发,离线模型转换,日志管理,性能分析,设备管理,精度比对,开发工具包的安装与管理。提供了应用开发、调试、模型转换功能,同时还提供了网络移植、优化和分析功能,为用户开发应用程序带来了极大的便利。
本文整理自华为云社区【内容共创】活动第12期。
查看活动详情:https://bbs.huaweicloud.com/blogs/325315
相关任务详情:任务24. 昇腾全栈与MindStudio全流程开发工具链
AI MindSpore
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。