伴随 AI 技术的发展,智能时代的快速推进,端、边、云全场景 AI 也将成为发展的新篇章。那面对全场景 AI 不同的计算需求与开发模式的差异,开发者如何快速进行开发并在端、边、云上全场景适配呢?
12 月 20 日,DevRun选择不凡 华为技术沙龙腾专场来到杭州,围绕全场景 AI 开发面临的技术挑战,邀请华为多位 AI 领域技术专家,通过案例 + 实践,为现场开发者解读了全栈全场景 AI 计算框架与开发全流程。
1 如何基于 Atlas 进行推理业务开发?
面对端、边、云不同的 AI 算力需求,华为提出全栈全场景 AI 解决方案。作为全栈全场景 AI 解决方案的基石,Atlas 人工智能计算平台基于华为腾 AI 处理器和业界主流异构计算部件,通过模块、板卡、小站、AI 服务器、集群等丰富的产品形态,满足了全场景 AI 的算力需求。
以 Atlas 300 进行推理业务开发的流程为例,可以总结为以下几个环节:
开发前准备:首先对 OS 类型及版本、AI 框架和模型、视频 / 图像编解码能力进行需求评估,然后再安装硬件与软件,搭建开发环境;
业务迁移:基于 Matrix 业务软件框架,调用各类接口来完成推理业务的软件开发和算法迁移;
集成调优:对系统整体体性能进行优化,包括应用侧和算法模型侧。
测试验收:最后进行功能测试、可靠性测试、可维护性与性能测试等验收测试,保证产品可商用。
Matrix 的典型流程如上图所示。主要分为 Host 和 Device 两个部分,Host 属于服务器 CPU 侧,Device 属于 Atlas 300 AI 加速卡侧。Engine 作为流程的基本功能单元,允许用户自定义,实现数据输入、图片视频分类处理、结果输出等。Graph 则作为管理若干个 Engine 的流程,每个 Graph 在腾310 侧默认对应一个线程来处理。
通过 Graph 配置文件,配置 Engine 之间的串接和节点属性,节点间数据的实际流向根据具体业务在节点中实现,通过 APP 向业务流的开始节点灌入数据启动整个 Engine 的计算流程。
2 应用 Mind Studio,降低 AI 开发门槛
为了满足开发者全场景 AI 开发的诉求,华为推出了 Mind Studio。Mind Studio 是一套基于华为腾 AI 处理器开发的 AI 全栈开发工具链,包括基于芯片的算子开发、模型开发与转换,AI 应用层开发等能力,让用户的算子、模型和应用最大限度的发挥出处理器的计算能力,又通过场景化的工具体验降低算子、模型、AI 应用的开发门槛。
Mind Studio 可提供面向 AI 算子开发、模型开发、应用开发的全栈全场景支持。算子开发上,支持 TBE 自定义算子、 支持 TBE 自定义算子插件开发、支持语法的智能纠错和代码自动补全;模型开发支持离线模型转换、支持模型算子精度比对、支持模型整网性能 profiling 分析、支持网络模型的可视化;应用开发支持 AI 应用开发与调试、支持代码框架自动生成、支持推理结果图形化展示、支持全系统调优。
Mind Studio 集成开发环境,可用于仿真形态下模型运行流程编排开发和 TBE 算子开发。开发者可以创建深度学习应用,例如基于 Fasterrcnn 的图像检测应用。如果有不支持的算子,可以通过 TBE 自定义算子,然后再把已经训练好的模型转换成腾 AI 处理器的模型。
模型开发支持当前业界主流框架 Tensorflow、Caffe 等,通过转换工具将模型转换成腾 AI 处理器的格式,来发挥出芯片的加速能力。算子比对功能可以通过与业界标准的模型对比,识别出模型算子的精度差异并优化。
在转换过程中,开发者还可以配置模型中的输入和输出节点,量化配置参数,图像预处理的参数,生成满足开发者输入要求的更高效的模型。
算子比对可以对已经生成的模型和基准的模型(如 Caffe 模型)进行算子的比对,比对的方式可以选择不同的算法,如 LowerBound 等。算子比对的结果可以发现出模型中各个算子计算结果的偏差,通过对偏差的大小设置,开发者可以快速定位出偏差较大的算子并进行优化。
3 解读 MindSpore 三大技术创新点
针对目前计算框架仍存在的开发门槛高、运行成本高、部署难度大等亟需解决的问题,以及在技术战和贸易战的压力下,华为在支持业界 AI 框架的基础上,自主研发了支持端、边、云独立和协同、统一的训练和推理框架MindSpore。
同时,为了助力开发者与产业从容地应对人工智能时代带来的系统级挑战,华为还提出了新编程范式、执行模式与协作方式三点技术创新点:
新编程范式:实现 AI 算法即代码,打破模型开发技能需求高的挑战,降低了 AI 开发的门槛;
新执行模式:针对 AI 领域的计算复杂性和算力多样性的运行态挑战,通过 On-Device 的执行模式,来提升执行效率。
全场景按需协同:面对端、边、云三类应用场景需求与目标不同,通过统一的框架来实现按需协同。
基于三个技术创新点,MindSpore 的核心架构分为以下几层:部署态包括了按需协作分布式架构、调度、分布式部署、通信库等;往上是执行高效层(包括数据模型下沉),另外是并行的 Pipeline 执行层和深度图的优化,再上层有 MindSpore 原生的计算图表达。支持了自动微分、自动并行、自动调优的特性点,形成 AI 算法即代码、运行高效、部署态灵活的一体化。
新编程范式基于源码转换机制生成抽象语法树的思想,在接口层支持原生的 Python 编程和控制流表达,增强可编程性。在中间编译层复用编译器优化的能力进行代码优化,实现更高性能。在算子层利用算子自动生成,以及软硬件协同优化,简单代码便可自动化生成高性能算子。同时灵活的可视化接口与动静结合的框架, 整体达到易用、高效、易调试的效果。
在新执行模式上,MindSpore 有几项关键技术。第一项是通过面向处理器的深度图优化技术,最大化实现数据、计算与通信的并行度。第二项利用梯度数据驱动的自适应图切分优化,实现去中心化的调度。第三项是自动整图切分可按算子输入输出数据纬度切分整图。最后一项是集群拓扑感知调度,感知集群拓扑自动调度子图执行,实现最小通信开销。
新协作方式实现了统一架构下的端云协同训练和推理,避免硬件架构多样性导致的全场景下部署差异和不确定性,以及训练推理分离导致的模型孤立。
4 实现平稳迁移到鲲鹏的全流程
利用鲲鹏处理器与 Atlas 产品结合,可打造出高性能的 AI 解决方案。不过,由于鲲鹏平台和 x86 平台的架构存在差异,要想将 x86 平台上的软件在鲲鹏平台上运行,还需要对软件进行迁移,编译成可供鲲鹏平台识别的指令。
在整个软件迁移过程中,策略选择是非常重要的,能够直接影响后面软件迁移的工作量和迁移的可实行性。
对于 Java、Python 等解释性语言,可以通过部署运行环境来实现跨平台支持。而对于 C、C++、Go 等编译型语言,需要获取源码编译。开源的软件可通过源码重新编译来实现迁移;商用闭源软件,可选取其它可替代的软件进行迁移,也可选择与 x86 平台混合部署。
整个迁移过程需要经过以下几个步骤:
扫描:包括软件依赖库扫描、代码扫描、编译项扫描与兼容的软件白名单;
移植:包括代码移植和编译项移植;
优化:包括系统、应用、进程性能优化分析。
针对迁移的痛点,鲲鹏提供了对应的工具链。利用分析扫描工具( Dependency Advisor ),分析移植软件包依赖库和软件代码文件,评估可移植性与移植工作量,以此提升软件移植分析效率和准确率。代码迁移工具 (Porting Advisor) 可分析待移植软件的源码文件,给出代码移植指导报告,来准确定位代码修改点及指导修改。
性能优化工具 (Tuning Kit) 在软件运行状态下,通过采集系统数据,分析出系统性能指标,定位到瓶颈点并给出调优建议。在前面调优的基础上,还提供了 glibc 基础库与 HMPP 两种加速库,目前已优化 16 个最常用接口,整体上同比 benchmark 测试指标提升 4.16%,gzip 压缩库有 8% 的性能提升。