移动终端人工智能技术与应用开发
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2.7 深度学习框架

1.深度学习框架概述

深度学习框架是用于开发和运行人工智能算法的平台,它为软件人员开发人工智能应用提供了模块化的基础,一般提供数据输入、编写神经网络模型、训练模型、硬件驱动和部署等多种功能。

当前,人工智能基础性算法已经较为成熟,为了让开发人员更便捷地使用这些算法和模型来开发特定的人工智能应用,各大厂商纷纷发力建设算法模型工具库,并将其封装为软件框架供开发人员使用。随着深度学习框架的发展,深度神经网络结构的设计已经高度模块化。开发者只需要在比较宏观的层面上选择组件,构建网络,定制参数,就可以实现深度神经网络的设计。而深度学习框架负责解释开发者定制的网络,并将其转换成芯片可以执行的指令,进而进行模型训练和推理工作。一个优秀的深度学习框架,一方面要对开发者友好,能提供丰富的组件以及便捷的组网方式,另一方面也要和AI芯片紧密结合,能实现高效的训练和推理。对于深度学习框架的设计,要综合考虑易用性、稳定性、系统性能等多个因素。首先,深度学习框架需要能够支持研究者和开发者高效地进行人工智能算法模型和应用的开发,因此易用性是一个重要的考量因素。其次,为了能够支持企业级应用,框架的稳定性和可靠性也至关重要。最后,由于深度学习框架往往要处理超大规模的多模态数据,因此训练和预测的性能对实际应用也有很大的影响。

总体来说,软件框架在模型库建设及调用功能方面具有一定的共性,但又各具特点。软件框架有闭源和开源两种形式:苹果公司等少数企业选择采用闭源方式提供软件框架,目的是打造技术壁垒,而目前业内主流软件框架基本都是开源化运营的。深度学习框架陆续开源,已经大幅降低了开发门槛。但直接基于深度学习框架开发和设计新的模型算法仍有较高的技术门槛。因此,人们对网络结构自动化设计的研究越来越多,通过机器学习来设计深度学习模型,减少依赖经验和反复尝试调参,以此弥补深度学习专家的稀缺,比较典型的产品包括Google的AutoML和百度的AutoDL等。同时,零算法基础的快速应用平台等降低技术门槛的平台开始出现,极大地降低了深度学习应用的入门成本。

人工智能发展到现在,对于开发者来说,软件框架基本可以说是必不可少的工具,同时其重要性也在于,它是行业巨头打造其软硬件生态的重要环节。从2016年Google将自己的深度学习框架开源以来,软件框架处于群雄并起的时代,各大巨头意识到通过开源技术建立产业生态是抢占产业制高点的重要手段,纷纷推出了自家的开源深度学习框架,将深度学习软件框架作为打造开发及使用生态核心的重点。在目前的产业态势下,深度学习模型的表示及存储尚未统一,训练软件框架及推理软件框架尚未形成一一对应关系,技术生态争夺将持续。在接下来的几年中,深度学习框架发展的焦点将是如何更智能地实现量化,如何更好地促进框架间的融合,如何更有效地支持GPU、ASIC等芯片的异构加速能力,如何针对新硬件进行自动编译,等等。

从功能上看,深度学习框架主要用于支持深度学习的训练和推理。由于服务器和移动终端的算力和运行环境差别显著,因此对移动终端上的推理框架有一些特殊的要求,在下一节中我们会具体阐述。基于深度学习的通用框架主要实现对海量数据的读取、处理及训练,主要部署在CPU及GPU服务集群(云端),功能侧重于实现训练神经网络模型、维持系统稳定性及优化多硬件并行计算等。目前主流的深度学习训练软件框架主要有TensorFlow、PyTorch、MXNet、Caffe 2等,如表1-2所示。其中应用最广泛的是TensorFlow和PyTorch。

表1-2 常用深度学习框架

注:Facebook于2021年更名为Meta,本书中为便于表述,保留为Facebook。

TensorFlow是Google Brain基于DistBelief研发的第二代分布式人工智能学习系统,其命名来源于本身的运行原理,是一个使用数据流图(Data Flow Graph)进行数值计算的开源软件库,TensorFlow支持主流的CPU、GPU以及Google自己研发的TPU,支持Java、C、Go等语言。

PyTorch是Facebook于2017年1月18日发布的Python端的开源的深度学习库,基于Torch,支持动态计算图,提供良好的灵活性,支持C++、Python等语言。

Caffe2是Facebook在2017年4月18日开幕的F8年度开发者大会上发布的一款全新的开源深度学习框架。它是一个清晰、高效、开源的深度学习框架,核心语言是C++,支持命令行、Python和MATLAB接口,既可以在CPU和GPU上运行,也可以在移动端部署。

MXNet是DMLC(Distributed Machine Learning Community)开发的一款开源、轻量级、可移植、灵活的深度学习库,它让用户可以混合使用符号编程模式和指令式编程模式来使效率和灵活性最大化,MXNet支持主流CPU和GPU,支持C++、Python、R、JavaScript等多种语言,目前由亚马逊维护,已经是AWS官方推荐的深度学习框架。

CNTK(Computational Network Toolkit)是微软出品的开源深度学习工具包,根据微软开发者的描述,CNTK的性能比Caffe、Theano、TensorFlow等工具都要强。它支持CPU和GPU模式,支持C#和C++等语言。

PaddlePaddle(飞桨)是功能较为完备的国产端到端开源深度学习平台,集深度学习训练和预测框架、模型库、工具组件和服务平台于一体,具有五大优势:拥有兼顾灵活性和高性能的开发机制;具有工业级应用效果的模型;具有超大规模并行深度学习能力;具有推断引擎一体化设计,支持系统化服务。PaddlePaddle致力于让深度学习技术的创新与应用更简单,支持CPU和GPU,支持C++、Python等语言。

旷视科技自研的AI生产力平台Brain++从算法层、算力层和数据层分别为用户提供不同AI产品和服务。其中MegEngine深度学习框架数据属于算法层解决方案,MegCompute云计算平台和MegData数据管理平台分别属于算力层解决方案和数据层解决方案。MegEngine的研发始于2014年,一开始在旷视内部全员使用,并从2020年3月开始开源。MegEngine框架支持CPU、GPU、ARM等多种硬件平台,支持Python和C++语言。其最大特点是“训练推理一体”。MegEngine推理框架不仅能部署在不同硬件中,还能和MegEngine的训练框架无缝衔接,在部署时无须做额外的模型转换,速度/精度和训练保持一致,有效解决了AI落地中“部署环境和训练环境不同、部署难”的问题。

深度学习技术还在不断发展,对于作为工具的框架来说,是否能够跟上这门技术的发展是非常重要的一个考核标准,因为技术的发展是非常快的,如果工具的发展落后于技术的发展,就会有被淘汰的风险。所以,当工具的社区活跃度非常高时,这个风险度就会相应降低。总体上看,TensorFlow依旧是最受欢迎、使用度最广、影响最大的开源深度学习框架,在GitHub上,无论是从star的数量,fork的数量,还是从issues和pull request来看,TensorFlow都遥遥领先于其他同类深度学习开源框架。PyTorch则是过去几年发展最快的深度学习框架。百度的PaddlePaddle是国内自主研发软件框架的代表。

2.移动终端推理框架

前面介绍的框架主要应用在服务器端,能完成模型搭建、训练和部署推理任务,这些框架侧重于在高性能计算机上训练和优化模型。但我们知道,大量的推理应用是需要在终端设备上进行的。随着手机等移动终端算力的不断提升以及深度学习的快速发展,特别是小网络模型不断成熟,原本在云端执行的推理预测可以转移到移动终端上来做,相比服务器端,移动终端的智能应用具有低延时、兼顾数据隐私、节省云端资源等优势。

移动终端的人工智能应用有以下特点:终端设备需要处理的数据量没有训练时那么大,因受限于功耗,大多使用轻量化模型,手机芯片大多采用异构芯片,框架需要去适配这些芯片架构,优化并提高人工智能应用执行的效率,降低功耗,传统的深度学习框架未必能很好地适应移动端的需求,需要更轻量化、可适配异构芯片的框架,在算力、内存等限制下,高效地利用资源,快速完成推理。业界开发了众多用于移动终端的开源深度学习推理框架(也称为推理引擎)来更好地支持手机、平板等移动终端上的人工智能应用。端侧推理框架已经成为移动终端智能应用的核心模块,也可以说是移动终端的AI操作系统。端侧推理框架的优劣直接决定了算法模型能否在端侧运行,决定了业务能否上线。

一般来说,与TensorFlow、PyTorch等同时覆盖训练和推理的通用框架相比,移动终端推理框架更注重在推理时的加速和优化,深度学习推理框架使用深度学习训练框架训练出的模型,但要经过优化压缩、格式转换:首先优化模型大小,以便在移动终端上使用,可以通过剪枝、量化等手段实现;然后进行模型部署,包括模型管理、运维监控等;最后是端侧推理阶段,主要完成模型推理,即加载模型,完成推理相关的所有计算。基于深度学习的推理的计算量比训练过程小很多,但仍涉及大量的矩阵卷积、非线性变换等运算。端侧推理框架可以帮助人工智能应用完成这些过程,从而在移动端更高效地实现模型背后的业务。

表1-3中给出了主流端侧的深度学习推理框架。TensorFlow和Caffe在神经网络模型训练领域有重要地位,它们支持的预训练模型已成为“事实标准”,而国内厂商的深度学习训练框架影响力尚不如TensorFlow和Caffe等知名框架,所以在终端侧也只能尽可能去兼容更多的云端深度学习框架训练出的预训练模型,因此从表1-3中可以看到,国内厂商的终端深度学习框架支持更多的模型格式。

表1-3 主流端侧深度学习推理框架

根据移动终端深度学习推理框架可支持的硬件平台,推理框架还可以分为通用框架和专用框架。通用推理框架指能跨平台,在多种芯片平台上运行的人工智能推理框架,如TensorFlow Lite、PyTorch Mobile等。专用推理框架指仅能在指定的部分芯片平台上运行的框架,如高通的SNPE、华为的HiAI Foundation等。

我国移动终端推理框架具有一定基础,除了终端企业,互联网企业也以构建生态为目的发布了一批国产框架。NCNN是腾讯开源的移动终端AI框架,支持多种训练框架的模型转换,主要面向CPU的AI模型应用,无第三方依赖,具有较高的通用性,运行速度突出,是国内目前使用较为广泛的移动终端AI软件框架。基于NCNN,开发者能够将深度学习算法轻松移植到手机端并高效执行,开发出人工智能App。NCNN目前已在腾讯多款应用中使用,如QQ、Qzone、微信、天天P图等。Paddle Lite是百度自研的移动端深度学习软件框架,主要目的是将Paddle模型部署在手机端,其支持iOS GPU计算。MNN是阿里巴巴发布的轻量级深度学习端侧推理引擎,主要解决深度神经网络模型在端侧推理运行的问题,涵盖深度神经网络模型的优化、转换和推理。目前,MNN已经在淘宝、天猫、优酷、聚划算、UC、飞猪、千牛等20多个App中使用,覆盖直播、短视频、搜索推荐、商品图像搜索、互动营销、权益发放、安全风控等场景,每天稳定运行上亿次。此外,菜鸟自提柜等IoT设备中也有应用。