寒武纪端云一体人工智能开发平台整体架构
寒武纪端云一体人工智能开发平台整体架构
1. 引言
当前人工智能(Artificial Intelligence)技术发展迅猛,在机器视觉、语音识别以及自然语言处理等多个技术领域取得了卓越的进展,带来了更高的精确度和泛化能力,因此越来越广泛地应用于众多行业领域,形成了智慧制造、智慧金融、智慧交通、智慧教育和智慧零售等诸多“人工智能+”的行业应用。可以预见,随着人工智能理论和技术的日益成熟,将为越来越多的行业带来更加广泛的应用和更深远的变革。
人工智能自上世纪50年代诞生以来经历了多个跨越式发展阶段。其中,机器学习(Machine Learning)的出现让人工智能不再是按照人类设定的规则和总结的知识运作,而是从经验数据中学习获得规律,并利用此规律对未知事件做出决策和推断,其代表方法包括感知机、神经网络和支持向量机等。而真正推动人工智能大爆发的是机器学习领域中的新技术—深度学习(Deep Learning),其算法模型称为深度神经网络(Deep Neural Networks)。2006年,在Geoffrey Hinton研究团队的推动下,深度学习开始备受关注。从2012年开始,人工智能进入爆发式的发展阶段,其主要的驱动力是深度学习算法的进步以及计算机运算能力的提高。
然而,随着深度学习算法模型的规模越来越大、种类越来越多,人工智能技术的应用也面临一些问题。首先是深度学习的算法模型对算力的需求猛增,从2012年的AlexNet到2017年的AlphaGoZero,对算力需求的增长超过30万倍,其对计算资源的大规模需求导致计算硬件的购买和运行成本不断攀升,在一定程度上制约了人工智能的应用落地。另一方面,深度学习中没有一劳永逸的算法模型,往往要根据实际应用场景和数据定制开发,因此需要选取适用性广并且运行性能高的开发平台。
寒武纪作为全球人工智能芯片领域的先行者,自2016年至今,陆续推出了1A、1H8/1H16、1M等人工智能IP产品,以及面向云端深度学习计算任务的智能处理卡思元100(MLU®100)和思元270(MLU®270)。为了方便开发者在寒武纪硬件平台上开发和部署,寒武纪推出了端云一体人工智能开发平台(Cambricon Neuware®),能够满足云端和终端的深度学习应用场景针对软件开发平台和高性能计算硬件的需求。同时,Cambricon Neuware针对深度学习应用的开发和部署提供了一套完善而高效的软件栈工具,集成了多种开源的深度学习编程框架,并且提供了基于高性能编程库和编程语言等高效灵活的开发模式,以及一系列调试和调优工具。基于寒武纪智能处理器打造的终端处理器IP产品和云端智能处理卡产品,相比传统芯片可达数量级的性能领先、成本缩减和功耗降低,并且基于Cambricon Neuware率先提出“端云一体”的智能处理思路,使其终端和云端产品可共享同样的软件开发接口和完备生态。
更多产品信息请参见寒武纪官网www.cambricon.com和寒武纪开发者论坛forum.cambricon.com。
2. 人工智能的关键技术
在人工智能技术的发展中,机器学习是其中至关重要的途径,而近几年得以快速发展的深度学习是机器学习的一个子集,也是推动人工智能爆发的核心因素。而深度神经网络作为深度学习的算法模型,已经在许多应用领域中获得了远远超过传统机器学习方法的精度,并且随着计算硬件算力的不断提升以及大数据的加持,针对深度神经网络的训练和推理任务获得了更高的精度和效率。
2.1 深度学习中的训练和推理
深度学习的训练(Training)是指针对现有数据进行学习训练,将数据输入深度神经网络模型中运算,并且通过多次迭代运算不断调整和优化网络模型参数的过程。训练过程的特点是需要的训练数据量大且运算过程复杂,导致运算耗时长,并且模型优劣和训练数据的规模直接影响到后续推理结果的准确性。因此一个复杂模型的训练任务对计算硬件的算力需求非常大。
推理(Inference)是指将新的待处理数据输入训练好的,即完成模型参数优化和调整的深度神经网络模型中,通过该模型计算并输出结果,从而获得深度学习针对未知数据进行自主推断的结果。推理在实际的应用和部署过程中需要计算硬件做到高性能、高精度、低延迟和低功耗。
2.2 深度学习应用的开发
针对深度学习应用的开发,大体可以分为三类方法:
方法一是不借助任何深度学习编程库,直接使用编程语言进行开发并在CPU上运行。其优势是编程灵活,能够实现任意结构的神经网络模型。缺点是编程繁琐低效,实际运行过程中由于没有计算硬件加速导致运行效率低。
方法二是利用深度学习算法加速的各类计算硬件所配套的专用SDK(Software Development Kit)进行开发,优势是算法模型的执行能够得到高于CPU性能的计算硬件的加速,缺点是开发出的深度学习应用通用性差,仅能运行于某一种计算硬件之上,并且其运算效率依赖于该计算硬件的算力。
方法三是利用开源的深度学习编程框架进行开发,例如Caffe、TensorFlow、MXNet、PyTorch等。优势是为开发者提供了更加简单且通用的编程方法,同时也可利用各类计算硬件对算法模型进行加速。缺点是不同的计算硬件对编程框架支持的完善度和性能有较大差别,并且执行效率同样依赖于该计算硬件的算力。
2.3 寒武纪端云一体人工智能开发平台
寒武纪研发的端云一体人工智能开发平台Cambricon NeuwareTM能够很好地处理上述深度学习的推理以及应用开发过程中所面临的关键问题,未来还将支持训练任务。
Neuware®支持全系列寒武纪智能处理器产品,基于Neuware开发出的应用可完美运行于寒武纪云端智能处理卡思元100(MLU®100)和思元270(MLU®270)之上,以及搭载了寒武纪智能处理器IP的终端设备之上,可充分利用其深度学习加速功能提升深度神经网络模型的推理性能,未来还将支持训练任务。同时,寒武纪智能处理器相比传统芯片可达数量级的性能领先、成本缩减和功耗降低,并且率先提出“端云一体”的智能处理思路,使其终端和云端产品可共享同样的软件开发接口和完备生态。
针对深度学习应用开发过程中所面临的关键问题,Neuware不仅支持多种主流的深度学习编程框架,使得应用的开发更加简洁且通用,还提供了高性能编程库,带来更高的程序执行效率。同时,Neuware提供了专门针对寒武纪智能处理器应用开发的编程语言--Bang语言,开发者能够使用Bang语言进行灵活高效的应用开发,充分利用寒武纪智能处理器产品上的计算和存储资源,在编程灵活的同时确保了推理的高性能。
Neuware适用于图像和视频处理、语音识别和机器翻译等人工智能算法领域,目前已协同各类寒武纪智能处理器产品应用于智能终端、智慧交通、智能教育、智能制造等场景。
3. 关于Cambricon Neuware™
寒武纪端云一体人工智能开发平台Cambricon Neuware™是寒武纪专门针对其云端和终端的智能处理器产品打造的软件开发平台,其中包括了多种深度学习/机器学习编程库,以及编程语言、编译器、程序调试/调优工具、驱动工具和视频编解码工具等,形成了完善的软件栈,为人工智能应用特别是深度学习推理应用的开发和部署提供了便利。在云端,开发者可以简单高效地实现深度学习乃至机器学习应用的开发和调试;在终端,可以借助云端丰富的硬件资源和强大的功能进行开发和调试,仅在部署阶段将开发完成的离线文件部署到终端上,解决了终端上开发调试困难的问题。同时,由于同是基于Cambricon指令集,因此云端和终端的应用程序可以做到无缝的相互切换。
3.1 Neuware®的软件栈架构
Neuware®集成了多种编程库和工具,其软件架构如下图所示:
图3.1 Neuware的软件栈架构
Neuware软件架构从上往下分别为深度学习应用、主流的深度学习框架、寒武纪机器学习编程库CNML(Cambricon Neuware Machine Learning Library)、寒武纪Bang编程语言、寒武纪运行时库CNRT(Cambricon Neuware Runtime Library)、系统工具层以及驱动层。此外还包括针对多媒体智能处理的SDK。
· Neuware集成的开源深度学习编程框架包括TensorFlow、Caffe、MXNet、PyTorch、Android NN,其中Android NN仅支持寒武纪处理器IP核。这些框架的API与官方开源框架一致,内部实现则加入了针对寒武纪智能处理器产品的定制。
· 寒武纪机器学习编程库CNML提供了机器学习,主要是深度学习应用的开发所需基础算子,开发者可以便捷地调用这些算子灵活地构造各类深度神经网络模型以及其他机器学习领域的算法,而无须关心寒武纪智能处理器产品的内部硬件资源如何调度。
· 寒武纪运行时库CNRT提供了一套针对寒武纪智能处理器产品的上层编程接口,用于与寒武纪智能处理器产品的硬件之间进行交互和调度硬件资源。用户既可以调用CNRT协同CNML一起开发深度学习应用,也可以直接基于CNRT来高效地运行Neuware构建的神经网络离线模型。
· 寒武纪Bang语言是专门针对寒武纪智能处理器产品设计的编程语言,它支持最常用的 C99和C++11语言的语法特性,并提供了用于编写高性能程序的内置函数接口。此外,Bang语言还增加了与寒武纪智能处理器产品硬件相关的类型系统,使用这些内置函数和新增类型系统能够充分发挥寒武纪智能处理器的算力和性能。
· Neuware的编译器部分包括了面向寒武纪产品的Bang语言和汇编语言编译,针对寒武纪产品设计的高级汇编语言做了多种优化,输出能够运行于寒武纪各类硬件产品上的可执行二进制文件。
· Neuware软件栈中的调试工具CNGDB是Linux系统上调试Bang语言的工具,它是基于GNU的调试器GDB开发的。使用CNGDB可以在真实的硬件上同时调试寒武纪处理器产品的设备侧和主机侧的代码。
· Neuware软件栈中的性能优化工具CNPerf(Cambricon Neuware Performance)可针对寒武纪智能处理器产品进行性能剖析。
· Neuware软件栈中的系统工具CNMon(Cambricon Neuware Monitor)能够采集寒武纪智能处理器产品的底层硬件信息,并实时获取上层软件对硬件资源调度状态等。
· Neuware软件栈中的自动化硬件诊断软件CNQual(Cambricon Neuware Qualification)针对寒武纪智能处理卡进行功耗测试、PCIe链路状态诊断、硬件压力测试、多卡互联状态诊断等测试等功能,确保寒武纪智能处理卡在系统中能够长时间稳定工作。
· Neuware软件栈中还提供了丰富的多媒体开发套件,包括CNStream、Gstreamer等视频智能处理的SDK和CNCodec图片、视频的编解码SDK。
3.2 Neuware®的主要特性
Neuware除了提供上述各项功能以外,还包括以下的主要特性:
· 提供了灵活便捷且高效的编程方法,包括开源深度学习编程框架、高性能编程库CNML和CNRT、Bang语言,以及多媒体智能开发套件。
· 开发出的应用程序可同时运行于寒武纪云端和终端的智能处理器产品中,并解决了终端产品上不便于开发、调试和调优的问题
· 支持多种低精度量化方法和离线模型的转换,可以在提升运行效率的同时降低端到端的时延。
· 提供了混合精度的数据类型支持:思元100(MLU100)系列智能处理卡和1H系列处理器IP支持INT8和FP16数据类型;思元270(MLU270)系列智能处理卡和1M系列处理器IP支持FP32、FP16、INT16、INT8、INT4的数据类型。
4. 使用Cambricon Neuware™开发高效的深度学习推理应用
在开发深度学习推理应用的过程中,Neuware提供了三类开发手段,分别满足开发者对开发效率(Productivity)、运行性能(Performance)和编程灵活性(Programmability)的偏好需求,并且这三种开发方法可通过多种性能优化策略提高推理性能。此外Neuware还提供了程序调试、性能调优等工具。
4.1 Productivity:基于深度学习框架开发
对于基于主流的开源深度学习编程框架开发的开发者来说,在迁移到Neuware上继续开发时,最便捷高效的方法是使用Neuware支持的同样的框架进行开发和部署。Neuware支持的框架包括Caffe、TensorFlow、MXNet、PyTorch、Android NN。
Neuware支持的上述框架,其API与官方开源框架一致,并且扩展了对寒武纪智能处理器产品的支持,包括对产品硬件资源调度、新增算子以及优化机制的支持。同时还支持原生深度学习框架的Python和C/C++编程接⼝以及原⽣⽹络模型文件。
4.2 Performance:基于高性能编程库开发
对于希望进一步提升深度学习应用的推理性能的开发者来说,可以使用Neuware提供的CNML和CNRT高性能编程库进行开发。
CNML是针对机器学习与深度学习的编程库,充分结合了寒武纪智能处理器产品的硬件特性,提供更高效、通用、灵活的编程接口用以加速人工智能算法,开发者可通过CNML提供的算子构造自定义的网络算子。CNML包含了如正反卷积、池化、全连接等常用的卷积神经网络算子和LSTM、GRU等循环神经网络算子,以及矩阵、向量、标量运算等算子。此外,CNML还支持算子的拼接和增减。目前CNML已提供上百种基本算子及其组合算子,并在持续增加。此外,CNML还具备以下关键特性:
§ 支持对算子的算法优化和对网络的图结构、指令生成、任务调度,以及访存压缩等相关功能综合优化。
§ 支持对训练好的模型进行离线优化,生成离线模型。
§ 支持云端编译,模拟终端运行环境,两端指令一致,做到端云一体。
CNRT提供了一套直接面向寒武纪智能处理器产品的硬件设备接口,提供运行时系统存储、任务和设备管理。CNRT具备以下关键特性:
§ 支持寒武纪智能处理器产品的硬件设备及多卡管理。
§ 提供设备内存管理接口。
§ 支持任务队列和同步机制。
§ 支持加载离线模型。
§ 支持寒武纪编译器CNCC(Cambricon Neuware C/C++ Compiler)和寒武纪汇编器CNAS(Cambricon Neuware Assembler)生成的二进制文件的执行。
4.3 Programmability:基于Bang语言开发
寒武纪的Bang语言支持开发者构建自定义算法模型。Bang语言是针对寒武纪智能处理器产品的硬件而设计的编程语言,它支持最常用的C99、C/C++11语言的语法特性,并提供了用于编写高性能程序的内置函数接口,还增加了与寒武纪产品硬件相关的语言类型,使用这些内置函数和语言类型能够充分发挥硬件算力和性能。此外,Bang语言还具备以下关键特性:
§ 提供统一高效的编程接口,充分发挥寒武纪产品的硬件特性。
§ 提供异构编程模型,方便用户扩展自己的应用程序。
§ 提供多核并行编程模型。
§ 能够以插件(Plugin)的形式与CNML进行交互,实现多种开发手段混合编程。
4.4 多种性能优化策略提升推理性能
为了提升模型在寒武纪智能处理器产品上运行时的推理性能,Neuware提供了多种性能优化策略。
策略一是在线融合模式。用户直接调用CNML或者通过深度学习框架调用CNML构建网络后进行编译,再调用CNRT运行,该运行方式称为在线模式。而在线融合模式是基于在线运行模式下的算子(即网络层)优化策略,可将多个算⼦的指令融合,减少模型推理过程中智能处理器的内存访问次数,减少智能处理器内核启动次数,从而降低启动开销。在融合模式中,被融合的多个算子作为整体的运算在智能处理器上运行,从而在降低时延的同时减少了对I/O带宽的占用。
策略二是离线模型模式。开发者所构建的神经网络模型在通过Neuware完成编译后可保存为离线⽂件,即寒武纪离线模型。而后在寒武纪智能处理器产品上运行该模型时即可直接调用CNRT加载对应的离线⽂件进行部署,该方式称为离线运行模式。离线模式包括在线编译和离线执⾏两个阶段:在线编译是⽣成与模型结构对应的寒武纪指令,对模型权值进行精度转换以及数据布局(Data Layout)优化,将指令和权值保存到文件;离线执行是加载在线编译⽣成的⽂件,实现模型推理,因此离线执⾏模式可以避免编译和权值转换开销。
策略三是低精度量化方法。在低精度量化方法中,例如INT8定点量化FP16或FP32的数据,将浮点数量化成INT8后,神经网络的精度变化在可接受的误差范围之内,但是这些数据所占用的存储空间却可以大大降低,进而带宽占用也随之显著减少,从而能够加快神经网络的推理速度。寒武纪INT8神经网络模型以有符号8位整型数据保存,模型提供INT8定点数的指数和缩放因⼦,并且可以提供适用于各种模型的多种量化模式。Neuware支持的开源深度学习框架已经为VGG、ResNet、GoogLeNet等常见神经网络模型提供量化或重训练完成的8位定点数⽹络模型。同时,Neuware提供了把原生框架下的浮点模型转换为INT8模型的工具,如果INT8量化后产生的精度偏差,Neuware提供了进行重训练的工具。此外,INT8量化方法确保了INT8量化后的模型适合在内存和带宽资源较差的寒武纪终端产品上运行。
4.5 使用程序调试和性能调优工具
Neuware还为深度学习应用程序的调试和性能调优提供了相应的软件工具。其中,CNGDB(Cambricon Neuware GDB)是Linux系统上调试Bang语言程序的工具,它是基于GNU的调试器GDB开发的。使用CNGDB可以在真实的硬件上同时调试寒武纪硬件产品的设备侧和主机侧的代码。CNGDB面向Bang语言开发者提供控制程序执行、访问变量等多种操作,解决了开发者难以调试的问题。
CNGDB的主要特性如下:
§ 支持GNU GDB在CPU上原有的全部操作。
§ 支持硬件设备上GDB的大部分操作,包括断点、单步、访问修改变量等。
§ 支持灵活的多核调试模式。
§ 支持思元270(MLU270)及以上硬件的调试。
§ CPU/Device的调试切换过程对用户透明,对用户来说其过程类似CPU函数调用。
§ 支持生成CNML内核的错误信息。
Neuware中的性能调优工具CNPerf(Cambricon Neuware Performance)是一款针对寒武纪智能处理卡的性能剖析工具。CNPerf通过跟踪程序执行流程,获取硬件性能计数器,可用于程序性能瓶颈查找和热点函数定位。CNPerf内部函数主要是基于CNPAPI(Cambricon Neuware Profiling API)实现,其提供了性能剖析所必备的软件接口,用户可精确观察到寒武纪智能处理卡内部的CPU以及智能处理器的行为。
CNPerf具备如下关键特性:
§ 精确获得用户程序及部分依赖库中每个函数的执行时间。
§ 获得CPU的内存开销和智能处理卡的内存开销以及拷贝内存所带来的时间开销。
§ 获得函数调用栈信息。
§ 获取CNML库中部分OpForward系列函数的计算效率以及DDR访存带宽。
§ 获取用户自定义kernel函数的实际执行时间。
§ 除命令行外,还提供了用户友好的图形化分析界面。
4.6 使用系统工具实时查看推理平台的硬件状态
Neuware提供了多种系统工具,用于部署寒武纪智能处理卡时进行硬件检测以及实时查看硬件状态。其中,CNQual(Cambricon Neuware Qualification)是一款自动化硬件诊断软件,能够进行功耗测试、PCIe链路状态诊断、压力测试、多卡互联状态诊断等测试,保证在云端部署的寒武纪智能处理卡在系统中能够长时间稳定工作。CNQual具有以下特点:
§ 测试流程测试方法操作简单,自动化程度高,实用性较强。
§ 可以通过配置文件选择测试卡以及测试项。
§ 测试信息可同时支持终端显示和文件保存。
§ 丰富的测试项有助于定位板卡在当前系统中的硬件性能瓶颈。
CNMon(Cambricon Neuware Monitor)是一款能够实时采集寒武纪智能处理卡的硬件信息并且实时获取上层软件对硬件资源调度状态等的一款工具。CNMon通过CNDev(Cambricon Neuware Device Interface)获取底层硬件信息,为开发者实时显示当前底层硬件的详细信息和状态。同时,开发者还可以通过CNDev实现定制化的需求,例如云服务平台或自动化测试平台的设备管理。
CNMon的主要特性如下:
§ 查看寒武纪智能处理卡的设备工作状态,如健康状态、处理器核利用率、智能处理卡上DDR内存的占用等信息。
§ 查看设备的拓扑逻辑关系和CPU亲和性等信息。
§ 设置设备工作模式如主频、带宽、TDP(Thermal Design Power)上限等。
§ 在虚拟化环境下提供额外的虚拟机信息查看功能。
5. 基于寒武纪人工智能处理器的计算架构
在使用寒武纪人工智能处理器产品部署深度学习推理应用的过程中,Cambricon NeuwareTM主要功能是加载训练好的神经网络模型和权值参数并将其解析生成包含了寒武纪指令集和模型参数的寒武纪模型数据,将其传输至寒武纪智能处理器产品的DRAM(Dynamic Random Access Memory)存储中,然后继续通过Neuware输入待处理的应用数据并读取运算结果数据。
5.1推理计算流程
Cambricon NeuwareTM在深度学习推理应用中的开发和部署流程如下图所示:
图5.1 使用Neuware进行推理的应用开发和部署流程
在基于深度学习编程框架进行开发的过程中,开发者可利用Neuware支持的框架所提供的编程接口加载训练好的神经网络模型文件,包括神经网络和权值参数文件。同时还能直接使用该框架创建神经网络结构或修改已加载的神经网络。随后编程框架会调用CNML库,将加载的模型文件解析并生成寒武纪指令文件以及转换后的权值参数文件,即寒武纪模型数据。在解析模型的过程中,用户可以使用融合模式以提升后续的模型运行效率,也可以使用Bang语言编写网络算子并通过Plugin(插件)方式将其整合到CNML的操作数(Operator)中,并生成整合后的寒武纪指令文件。
在应用部署的过程中,上述CNML生成的寒武纪模型数据文件通过CNRT库经驱动程序传输至寒武纪智能处理器产品上的DRAM中。该过程称为在线部署,即每次部署寒武纪模型前均需要经过CNML解析和编译并生成模型数据文件。而在离线部署的情况下,开发者可调用CNML接口直接将上述寒武纪模型数据文件保存为离线模型文件,随后在每次部署时仅需调用该离线文件即可,省去了编译和解析过程。该离线部署方式同时也是使用寒武纪终端产品部署深度学习应用的主要方法,即在终端产品上加载生成好的离线模型即可。
5.2 利用多核和多卡进行并行的推理计算
为有效提升深度学习应用的运行效率,寒武纪智能处理器产品在部署深度学习应用时使用多核并行计算和多通道DRAM访存模式,同时在云端部署中还可以支持多机(多台服务器)、多卡运行,即同时使用多块寒武纪智能处理卡协同完成深度学习推理任务。下图以寒武纪MLU®100智能处理器架构为例介绍芯片上的推理计算流程:
图5.2 MLU100智能处理器架构
Neuware生成的寒武纪模型数据和待处理的应用输入数据都加载到智能处理卡的DRAM中以后,启动卡上的智能处理器,其内部的众多处理器核就能够并行执行该神经网络模型。以MLU100智能处理器为例,其内部共有32个处理器核,相互之间通过片上网络(NoC, Network on Chip)模块互连,这32个处理器核能够访问相同的数据在DRAM上的地址范围,协同工作进行神经网络的推理计算。
在部署深度学习应用时,开发者只需要根据实际应用需求利用Neuware指定所需的处理器核的数量,在部署时Neuware能够将神经网络模型在拓扑结构、输入输出、模型参数等多个维度进行划分,使得划分后的模型能够同时在多个处理器核上并行地执行,并自动的保证多核间的数据同步。通常情况下,其使用的核心数更多,处理器所耗的计算时间就更短,有利于降低端到端延迟。此外还支持在多组处理器核上同时运行多个模型,各组处理器核在计算时共享了这些指令和参数,这样多组处理器核即可同时处理多份输入数据,极大地提升了处理器进行深度学习推理计算的吞吐率,进而提升了智能处理卡的整体运算性能。
寒武纪智能处理器产品除了多核并行计算的功能之外,其云端智能处理卡还支持多机多卡运行。即多个服务器上的多块寒武纪智能处理卡可协同完成并行推理计算的任务。Neuware会根据开发者指定的硬件资源,利用其中的CNCL(Cambricon Neuware Communication Library)库将深度学习应用中的待处理数据分布在多块卡上的处理器上并行处理。其中,CNCL是面向寒武纪智能处理卡设计的高性能通信库,帮助开发者优化了基于智能处理卡进行多机多卡的集合通信操作。CNCL支持多种针对寒武纪智能芯片的互联技术,包括PCIe、Serdes、Infiniband Verbs以及IP sockets。同时,CNCL能够根据芯片的互联拓扑关系,自动的选择最优的通信算法和数据传输路径,从而最小化使用系统和硬件资源、最大化利用传输带宽完成不同的通信操作。
5.3 寒武纪人工智能处理器架构的主要特性
除上述功能外,寒武纪智能处理器架构还拥有以下主要特性:
· 通用性好。支持各类深度学习技术,支持多模态智能处理(视觉、语音和自然语言处理)。
· 高能效。相比GPU处理器,采用了针对深度学习和人工智能应用特点定制的指令集和处理器架构,具有更优的能效比。
· 可以以极小的芯片面积,提供高性能低功耗的深度学习解决方案。
· 针对DRAM访存数据,增加了数据压缩/解压功能,大幅节省内存容量和访存带宽
· 包含多级缓存和共享存储结构,可充分利用处理器内部存储进行性能优化
· MLU270处理器和1M处理器IP均支持混合精度的数据类型,包括FP32、FP16、INT16、INT8、INT4。
6. 丰富的多媒体开发套件
人工智能技术在计算机视觉(Computer Vision)的应用中,除了基本的智能处理以外,往往需要对多媒体数据流进行预处理和后处理,比如针对智能摄像头采集的视频或图片数据流进行编解码,而这些编解码功能对实时性和吞吐率的需求是非常高的,尤其是当人工智能计算硬件在同时处理多路高清视频流时,其编解码所需的硬件算力往往会制约计算硬件整体的性能,从而导致计算硬件所能处理的高清视频路数较低或实时性能差等情况。针对这个问题,寒武纪在思元100和思元270系列智能处理卡中增加了视频和图片编解码的硬件模块,不再需要服务器CPU参与编解码运算。该硬件模块可以和智能处理卡上搭载的寒武纪智能处理器芯片协同工作,确保编解码过程不会阻塞智能处理器的推理过程,从而进一步提升了智能处理卡的整体性能,确保了多媒体数据流智能处理的实时性和吞吐率。
Neuware针对寒武纪智能处理卡上的编解码硬件模块提供了一套视频和图片的编解码SDK,便于开发者在应用中调用接口以开发适合自己产品应用场景的功能。同时,针对计算机视觉领域应用中常用到的视频和图片的结构化智能分析,Neuware也提供了一套SDK,提供了主流的智能处理方法并针对寒武纪智能处理卡进行了性能优化。
6.1 视频和图片编解码SDK
CNCodec是基于寒武纪智能处理卡开发的一套视频和图片编解码SDK,封装了视频和JPEG图片的编解码接口,在兼顾灵活性的同时,可以充分发挥硬件编解码性能。CNCodec提供了一套C语言的API,支持多路并发的视频和图片的解码、编码以及缩放等常见后处理。
其主要特性如下:
· 解码输出像素格式⽀持:YUV420SP-NV21、BGR24、RGB24、YUV422。
· 编码输⼊像素格式⽀持:YUV420SP-NV21、BGR24、RGB24、YUV422。
· 支持多路并发编解码通道。其中,思元270最高可支持64路编解码通道;思元100最高可支持32路编解码通道。
· 最高支持4096*2160输入分辨率。
· 解码数据格式支持:MPEG4、H.264、H.265、JPEG、VP8。
· 编码数据格式支持:H.264、H.265、JPEG。
6.2 视频和图片智能分析SDK
针对视频和图片智能分析,Neuware提供了两套SDK:CNStream和开源多媒体编程框架Gstreamer。其中,CNStream是针对寒武纪智能处理卡上快速部署和二次开发SDK,借助思元系列板卡的硬件特性,CNStream可以帮助开发人员快速构建高效、高性能、多场景的可扩展的AI应用程序。CNStream基于模块化和流水线的思想,提供了一套基于C++语言的API,适用于视频结构化、姿态检测、图像分割等常见应用领域。适用于图像视频处理的多个应用领域,能帮助客户快速部署和落地应用需求。
针对视频分析领域,CNStream提供了3个通用功能模块:视频解码模块、神经网络推理模块和颜色域转换模块。其中,视频解码模块可以对多种格式的视频压缩格式进行解码;神经网络推理模块可以使用多种神经网络离线模型对解码得到的图像数据进行神经网络推理。CNStream的插件式设计,给用户提供了视频流解码和推理之后对数据进一步加工处理的办法。
其主要特性如下:
· 支持高并发的多级流水线。
· 支持异构并发神经网络推理。
· 灵活可变的插件机制。
· 极低的二次开发成本和部署成本。
· 内置大量可以直接使用的硬解码,前处理,后处理,显示,OSD等插件。
· 支持Edge to Cloud。
· 支持运行时在线模型转离线模型。
此外,Neuware还支持开源的多媒体编程框架Gstreamer,提供了和原始框架一样的API,并通过寒武纪智能处理卡加速其内部的运算过程,它和CNStream一样可以帮助开发人员快速构建高效、高性能、多场景的可扩展的人工智能应用程序。和CNStream相比,Gstreamer可以使用大量已经开源的插件,适合已经在Gstreamer框架基础上进行业务开发的客户以极低的成本快速迁移到寒武纪推理平台。
此外,Neuware还提供了对OpenCV和FFmpeg的部分编程接口支持并利用寒武纪智能处理卡加速其内部运算过程,其编程接口的适配正在不断完善中。
7. 在云端和终端部署深度学习推理应用
7.1 云端部署
Neuware为客户在云端部署深度学习推理应用提供了便捷而高效的虚拟化技术和软件环境。
Kubernetes
Kubernetes是一个用于自动部署、扩展和管理容器化应用程序的开源系统,支持横向缩放、自我修复、存储编排、服务发现和负载均衡等功能。Device Plugins是Kubernetes提供的一种机制,用于第三方设备厂商通过插件化的方式将设备资源对接到Kubernetes,为容器提供额外计算资源。
Neuware遵循Kubernetes Device Plugin规范和机制实现,用于发现、上报、分配和监控寒武纪智能处理卡资源,实现寒武纪智能处理卡和Kubernetes对接,实现寒武纪智能处理卡容器虚拟化功能。
SR-IOV
为了进一步提高寒武纪智能处理卡在云端服务器上的利用率,降低用户成本,思元270及以上产品支持SR-IOV硬件虚拟化技术,SR-IOV技术允许在多个虚拟机之间高效共享PCIe设备,并且它是在硬件中实现的,可以获得能够与本机性能媲美的I/O性能。Neuware SR-IOV主要特性如下:
· 可获得近似原生的性能,
· 可扩展性好,可配置支持1/2/4 VFs
· 支持热升级
· 支持热迁移
· 不同虚拟机之间可实现安全隔离性
7.2 端云一体部署
寒武纪智能处理器终端产品和云端产品共享同样的软件接口和完备生态,可以方便地进行人工智能应用的开发、迁移和调优。Neuware软件栈的底层驱动,同时支持SoC和PCIe两种环境,其运行模式脱离了上层深度学习框架,跨越终端与云端的设备障碍,是端云一体开发和部署的基础。开发者可以借助云端丰富的计算资源进行算法模型的解析与调试,利用Neuware生成离线模型,并能够在任意搭载寒武纪智能终端IP的设备运行,解决了终端调试手段受硬件资源限制的问题。同时,由于该离线模式无编译过程,摆脱了对CNML与框架层的依赖,是终端部署的最佳选择。端云一体业务部署流程如下图所示:
图7.1 端云一体开发和部署流程
8. Cambricon Neuware™总结
得益于近年来深度学习技术的迅速发展,人工智能技术如今已广泛应用于越来越多的行业领域,但随着深度学习算法模型规模和种类的迅速增长,其推理过程在实际的应用和部署过程中需要计算硬件做到高性能、高精度、低延迟和低功耗,同时深度学习应用开发对灵活性和硬件算力的需求也制约了其应用落地。
寒武纪端云一体人工智能开发平台Cambricon Neuware™能够很好地处理上述问题,Neuware支持全系列寒武纪智能处理器产品,包括智能处理卡和智能处理器IP产品,用户可充分利用其深度学习加速功能提升深度神经网络模型的推理性能。Neuware集成了多种主流的深度学习编程框架,使得应用的开发更加简洁且通用,减少客户迁移开发环境的成本;还提供了高性能编程库CNML和CNRT,进一步提升编程的可扩展性和推理程序的运行性能;此外还提供了Bang语言用于客户开发自定义或特殊的算法模型。
为了进一步提升该模型在寒武纪智能处理器产品上运行时的推理性能,Neuware提供了多种性能优化策略,包括在线融合模式、离线模型模式以及低精度量化方法。在提升运行效率的同时降低了推理的端到端时延和对I/O带宽的占用。
此外,Neuware针对寒武纪智能处理卡上的编解码硬件模块提供了一套视频和图片的编解码SDK,便于开发者在应用中调用接口以开发适合自己产品应用场景的功能。同时针对视频和图片的智能分析,Neuware提供了两套SDK:CNStream和Gstreamer,适用于有快速部署和简单应用落地需求的客户。
针对寒武纪智能处理器产品在云端部署,云端芯片产品支持容器及Kubernetes编排技术,以及在思元270及以上产品支持SR-IOV虚拟化技术,可实现硬件资源池化及按需分配;在终端,借助Neuware端云一体开发和部署,可借助云端丰富的计算资源进行算法模型的解析与调试,然后在终端产品上完成最终部署。