深度学习技术日渐火热,越来越多的开发人员对参与深度学习相关项目产生了浓厚的兴趣。但是,在参与深度学习开发的初始阶段,开发人员需要编写大量的重复代码,并且需要对日常不熟悉的数学算法进行编码。很多大公司看到这种情况后开发了一些深度学习框架。这些框架通常是开源的,可以提供深度学习开发常用的接口、库和工具,帮助开发者上传数据,训练深度学习模型,得到精确、直观的预测分析。开发人员只需具有基本的人工智能、机器学习和深度学习知识即可使用这些开源框架进行开发。
对于希望参与深度学习开发的技术人员而言,选择一个合适的框架是非常重要的。正所谓“工欲善其事,必先利其器”,一个合适的深度学习框架可以起到事半功倍的效果。本小节介绍目前流行的深度学习框架及其特性,供读者在开始学习前参考。
TensorFlow是谷歌大脑团队开发的深度学习框架,支持Python语言和R语言,适用于稳定的机器学习产品,以及在功能复杂的研究中使用。
TensorFlow提供了数据可视化工具TensorBoard。它能够简化显示数据的过程,也可以使用Python语言和R语言的可视化包来自己开发数据可视化功能。
TensorFlow的初始版本于2015年11月9日面世,稳定版本2.4.1于2021年1月21日推出,采用Python、C++和CUDA语言开发,支持Linux、macOS、Windows和Android平台。
谷歌的软件工程师弗朗索瓦·肖莱开发了Keras。Keras拥有超过35万用户和700多个开源贡献者,是成长最快的深度学习框架之一。
Keras支持Python开发的高阶神经网络API(应用程序接口),这也是它深受欢迎的原因之一。很多研究机构、实验室和公司选择使用 Keras。2017 年 7 月,Keras 得到了CNTK 2.0的后台支持,2018年TensorFlow 2.0发布后,Keras被正式确定为TensorFlow的高阶API开发包,即tf.keras包。
Keras的初始版本于2015年3月27日面世,稳定版本2.4.0于2020年6月17日推出。
PyTorch由Facebook的人工智能研究院(FAIR)开发,支持动态图并提供了Python接口,是Python优先的深度学习框架。PyTorch被大公司广泛应用。
PyTorch的初始版本于2016年9月面世,稳定版本1.7.1于2020年12月10日推出。
Theano由蒙特利尔大学使用Python开发,是一个擅长处理多维数组的Python库。Theano 是 Python 深度学习中的一个关键基础库,可以直接用来创建深度学习模型或包装库,简化了开发者的编码复杂度。
Theano的初始版本于2007年面世,被称为最早的深度学习开源框架,稳定版本1.0.5于2020年7月27日推出。Theano支持Linux、macOS和Windows平台。
Caffe(嵌入快速特征的卷积体系结构)由加利福尼亚大学伯克利分校开发,开发语言是C++,并提供Python接口。Caffe用于图像的检测和分类。
Caffe支持基于GPU和CPU的加速计算核心库,例如NVIDIA、cuDNN和IntelMLK等。使用一个NVIDIA K40 GPU,Caffe可以在一天内处理超过6000万张图像。
Apache MXNet是用于训练和部署深度神经网络的开源框架,由亚马逊(Amazon)公司官方维护。MXNet支持快速的模型训练和灵活的编程模型(支持C++、Python、Java、Julia、MATLAB/JavaScript、Go、R-Scala、Perl 和 Wolfram 等开发语言)。MXNet 库可以很方便地部署于多种GPU平台和各种设备(包括手机)。
CNTK 是微软公司开发的深度学习开源框架,可以通过有向图的一系列计算步骤构建神经网络。CNTK支持Python和C++接口,通常用于手写文字的识别、语音识别和人脸识别。
PaddlePaddle(飞桨)是百度公司推出的深度学习框架,集深度学习核心训练和推理框架、基础模型库、端到端开发套件和丰富的工具组件于一体。PaddlePaddle 采用 C++和Python语言开发,支持Linux、macOS和Windows平台。
PaddlePaddle的初始版本于2018年7月面世,稳定版本2.1于2021年5月发布。
MindSpore是华为推出的开源深度学习框架,是华为全栈全场景AI解决方案的重要组成部分。MindSpore具有以下特性。
① 开发态友好:支持自动微分、网络+算子统一编程、函数式/算法原生表达、反向网络算子自动生成等特性,AI科学家和工程师更易使用。
② 运行态高效:可以充分发挥昇腾芯片的大算力特性;提升并行线性度;支持深度图优化,自适应AI Core算力和精度。
③ 部署态灵活:支持端−边−云统一架构,实现一次开发,按需部署;按需协同计算,更好地保护隐私。
MindSpore的总体架构介绍详见本书第2章。MindSpore的初始版本于2019年8月面世。2020年3月28日,华为宣布MindSpore正式开源。
本小节将从开发商、口碑、入门难度、性能和易用性以及落地应用的适用性几个方面评估和选择深度学习框架。
一个平台和框架的成功离不开它的开发商。知名开发商无论从技术力量还是从拥有的社会资源来评估都具备很大的优势。比如华为在开发MindSpore的过程中,获得了许多合作伙伴的支持,包括爱丁堡大学、北京大学、伦敦帝国理工学院和机器人初创公司Milvus等。从长远发展的角度看,没有巨头背书的框架很可能面临边缘化或被淘汰的结局。鉴于此,本小节的分析都基于拥有知名开发商的深度学习框架。
拥有知名开发商的深度学习框架见表1-1。
表1-1 拥有知名开发商的深度学习框架
从GitHub star/Gitee star数和Google Trends提供的统计数据可以反映深度学习框架的口碑。
GitHub star数可以反映国际开发者对深度学习框架的关注情况。国内框架主要使用Gitee开放源代码,因此Gitee star数可以反映国内开发者对深度学习框架的关注情况。拥有知名开发商的深度学习框架的GitHub star/Gitee star数对比见表1-2(统计数据截至2022年6月10日22:00)。
表1-2 拥有知名开发商的深度学习框架的GitHub star/Gitee star数对比
从表1-2中我们可以看出,在国外,开发者更关注TensorFlow、PyTorch和Keras;在国内,开发者对MindSpore的关注要明显高于其他深度学习框架。
Google Trends的统计数据可以反映来自国际社会公众的关注。2015年5月1日—2022年6月11日深度学习框架Google Trends统计情况如图1-12所示(说明:在Google Trends中输入“2015/5/1—2022/6/11”,显示的效果就是图1-12)。
图1-12 2015年5月1日—2022年6月11日深度学习框架Google Trends统计情况
2018年5月11日—2022年6月9日深度学习框架百度趋势统计情况如图1-13所示。
图1-13 2018年5月11日—2022年6月9日深度学习框架百度趋势统计情况
由于统计数量的限制,图1-13只选择了TensorFlow、PyTorch、Keras、PaddlePaddle和MindSpore进行统计。从统计数据中我们可以看出,国内与国外的社会大众关注点是一致的,排名次序依次为 PyTorch、TensorFlow、Keras、PaddlePaddle 和 MindSpore。PaddlePaddle 和 MindSpore 作为国内知名的深度学习框架,目前影响力与国际知名框架尚有一定的差距。MindSpore 由于面世和开源都比较晚,因此在前面的时间段中搜索引擎没有统计数据,自2022年后逐渐迎头赶上,一度超过PaddlePaddle。随着华为的培训、科普和推广力度逐渐增大,MindSpore在国内、国外的影响力会越来越大。
对初学者而言,在众多深度学习框架中选择一款适合自己的平台不是一件容易的事。在各项评估标准中,框架的入门难度无疑是大多数初学者优先考虑的因素。
对于国内的初学者而言,国产框架要比国外框架更容易上手。以华为为代表的国产框架打造全中文的开源社区,提供完备的中文教程和开发文档。国外深度学习框架虽然也有一些中文资料,但是及时性和完备性都是不够的,并且人工智能和深度学习领域有很多专业名词,阅读英文资料对于初学者而言仍有不便。
近些年,华为与很多高校和培训机构合作开设了MindSpore训练营,初学者还可在网上找到相关培训视频资料,这样降低了国内开发人员的入门难度。
性能和易用性是评估深度学习框架的重要因素,但是,对于深度学习框架而言,性能和易用性很难同时兼顾。在1.3节中会介绍深度学习框架的执行模式。大多数深度学习框架选择Graph(图)模式作为执行模式,Graph模式可以分为静态图和动态图两种。其中静态图更容易被优化,因此具有良好的性能;动态图更容易调试,对于编程实现更加友好。这也是性能与易用性不容易兼顾的原因。
MindSpore 提供了动态图和静态图统一的编码方式。开发者可以很方便地用一条语句切换动态图和静态图的执行模式,做到了兼顾性能和易用性,这也是MindSpore框架的特色之一。
使用深度学习框架的主要目的之一就是能够方便地将训练好的模型应用到现实生活中,使模型具有更广泛的适用性。MindSpore作为华为全栈全场景AI解决方案的重要组成部分,在部署环境、IP/芯片、计算框架和应用框架等各个层面都有与其高度兼容的同品牌产品。
从部署环境层面看,MindSpore提供了统一模型文件MindIR,同时存储网络结构和权重参数值:支持部署到端(终端设备)、边(边缘设备)、云(云端平台)等各种应用场景;实现一次开发、按需部署。
从IP/芯片层面看,MindSpore与算力最强的AI处理器Ascend 910同时发布,并全面支持昇腾Ascend 910和Ascend 310硬件平台。
因此,在国内使用MindSpore框架训练好的模型具有更好的落地应用的适用性。