Core ML简史

背景

深度学习是最新一波技术发展的最大增长点,随着研究的深入和算力的发展,深度学习也逐渐从论文走到了实际应用。由于现在我们仍然处于移动互联网的成熟期,手机仍然是今年最通用的计算平台,所以深度学习不可避免的也要跑在手机上,这是技术+时代的共同需求。

为了应对这个需求,科技行业的巨头们都提出了自己的解决办法,2017年3月,Google就在TensorFlow的基础上开源了TensorFlow Lite,目标就是完成移动端深度学习计算。Google做这个事情是非常好理解的,因为TensorFlow太重了,不太可能直接在移动端上运行,为了满足移动端深度学习需求,必须提出一个新的框架,这就是TF Lite。

在这个背景下,Apple也在2017年的WWDC向大家介绍了Core ML:
在这里插入图片描述
有兴趣的可以去看一下WWDC2017 Core ML部分。

由于水平有限,很多内容可能与现实有出路,有错误请轻喷。。。

Core ML

注意这里是没有1.0这个版本号的。

如果用最简单的方法来介绍Core ML,下图就可以说明:
在这里插入图片描述
通过一个Core ML将一个Core ML 模型集成到iOS 或 MacAPP中,给APP提供该模型具备的预测能力。由于17年深度学习最爆炸性的结果就是CV中的分类任务,所以Core ML也对图像分类做了非常细致的设计和开发,另一个重点是自然语言处理(NLP),由于我本人对NLP知之甚少,所以就一笔带过。

详细点来说,我们可以看下面这个框架图,最底层是计算用的一些性能库,多说一句,这些库并不是和Core ML耦合在一起的,意思就是,我们在其他的场合也可以直接调用这些库来完成计算,比如图像处理等操作。
在这里插入图片描述
基于这些底层的计算库,在上面实现了Core ML,用来完成深度学习或者机器学习模型的前向推理。

这里马上就有一个第一个问题,模型从哪来?

在Core ML时代,模型大部分是从其他训练框架保存并转换而来,比如TensorFlow和Pytorch(需要先转成onnx),但是也支持训练模型,对于简单的任务,是可以通过Core ML直接训练得到mlmodel。

有了模型之后,就可以使用Core ML加载并进行前向计算,大致的过程可以参考为什么TensorFlow要使用图结构?,这个设计过程并不复杂,重点一是如何进行计算加速,二是如何转换?这里Apple应该是充分利用了Metal,在GPU上进行计算,所以性能较高。针对模型转换,Apple开源了一个转换工具coremltools,如果是从TensorFlow转的话,还有一个更为熟知的转换工具tfcoreml

作为以产品出名的大公司,Core ML如果只做到推理部分,那和其他科技公司有什么区别呢(-_-!)?所以当然是不止于此,Apple生态闭环的优势决定了它可以做很多有效的设计,不管是耦合还是解耦合,都可以根据实际需求做出最优设计。在CV和NLP火热的时代背景下,Apple在Core ML这一层上面设计了两个应用开发框架Vision.frameworkNatrualLanguage.framework,具体的需求提出具体的办法,这样做的好处是开发容易,几行代码就可以完成CV模型的部署,所以说很优秀。

这两个framework都可以在系统路径中找到:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks

在这里插入图片描述
在这里插入图片描述
除此之外,Apple开发布了一些Demo,供开发者学习,这里也不再赘述。

补充一个非常有意思的点,Apple在发布Core ML时,着重强调了On-device,就是端上运行,然后从四个方面来说明端上运行的重要性:
在这里插入图片描述

  1. 用户隐私
  2. 数据传输消耗
  3. 服务端的消耗
  4. 7天24小时随时在线

以及一个最重要的概念:
5. Realtime!

基于以上这些点,Apple认为移动端本地推理是深度学习的主流,所以Core ML也就做了这件事情。

总体来说,Core ML是顺应技术和时代背景需求的产物,Apple在移动互联网+AI的时代下提出的用来在Apple APP上部署机器学习算法的框架,利用转换工具,将训练好的模型转换成Core ML Model,并用已经开发好的加速库完成推理计算,在此基础上,对常用的两类应用场景做了抽象设计,发布了Vision和NLP的framework,供开发者使用。

Core ML 2

2018年,Apple有一个重要的调整,将Core ML的开发团队和Siri的团队合并,组建了一个新的AI/ML团队,由John Giannandrea(下图)负责。
在这里插入图片描述
这老哥在来之前已经是Google重臣,而且经历也颇为传奇,所以Apple这是要花重金来做AI和ML了。

在2018年的WWDC,Apple发布了Core ML 2,主题就是 What’s New in Core ML
在这里插入图片描述
在上一节我们有说过Core ML面临两个问题,一是模型的来源,二是算力。其实这两个问题也几乎是所有移动端推断框架所面临的共性问题。

Core ML 2主要目的就是开始尝试解决这两个问题。主要有以下三点:

  • 模型量化
  • 性能提升
  • 自定义Layer

其中前面两点都是为了计算或者存储效率,第三点是尝试解决模型来源,简单来说就是提供自定义layer,增加框架的适应性。

模型量化

众所周知TFLite设计的一个核心就是模型量化,再联系到Core ML新掌门人的Google背景,我都怀疑是不是把TF Lite的思路直接搬过去了,关键是这东西在TF Lite上面已经证明目前不存在通用解法,在Core ML上面又能有多大的实际用途呢?

具体的思路几乎都可以想象,Core ML都是用32位精度来进行计算,输出甚至是64位精度浮点数数组。在Core ML2,提供了16bit 、8bit、4bit甚至是1bit的量化,模型的Size确实是显著降下来了,但是精度也必然会打折扣。具体情况,可能要结合模型来具体分析了。

性能优化

除了常规的代码层面的提升,有一个更侧重框架上的改进,就是批量输入。一次输入一个batch的好处是一次计算即可完成多个输入的计算。这个原本是训练过程必备的功能,现在也逐渐延伸移动端推理。

batch推理看似很好,但是需要注意的是,batch推理的时间是比单张图的推理时间要长的。从计算时间上来说:单张图输入 < batch输入的时间 < 多张图逐个输入。这个系数是多少,每个模型都不一样,要具体测试了。而且,有多少场景是需要在移动端进行batch输入呢?

自定义Layer

自定义Layer明面上的好处是,如果某个模型在转换时失败,或者某个layer你觉得Core ML实现的不好,可以用自定义Layer来实现或者替代。如果是放到现在来看,这个功能相当鸡肋,但是在当时还是有一定的意义,因为算法模型确实是百花齐放,各种Layer也是层出不穷,自定义是有必要的。

Core ML 3

WWDC 2019发布的Core ML,应该是第三个版本了。框架上该版本并没有实质性的变化,但是这一版对Core ML来说缺很重要,因为补全了几乎所有的学习类模型的部署所需条件。

除了之前已经支持很好的CV和NLP之外,现在还增加了一个Speech.framework以及SoundAnalysis.framework。以及大量的模型类别以及Layers。

到此Core ML基本上解决了移动端部署的问题。

Core ML 2020

时间很快来到了2020,曾经大火的深度学习移动端部署,到现在已经是昨日黄昏,并不是说昨日黄昏就不美了,而是…看腻了。

前面已经说过,移动端部署到目前已经基本上算是一个有解的问题,所以Core ML也将重心放在了提高效率和改进流程上面。

Core ML在2020提出了CloudKit.framework。不过很遗憾,Core ML暂时并不打算直接将模型部署到云端,而是通过Cloudkit,提供模型更新,即如果仅仅需要更新模型,不需要重新发布APP,只需要将新模型上传到Apple Cloud,然后APP会下载最新的云端模型资源,就完成了模型的更新。这个过程中可能会涉及到安全问题,因此Core ML也提供了model encryption用于完成模型加密,保障安全!

另外,移动端确实是腻了,因为这些年出现了很多移动端推理框架,不管是模型表示、内存管理、计算优化以及配套工具,都已经慢慢趋于一致。移动端深度学习现在虽然谈不上成熟,但是移动端推理框架已经比较成熟了,大厂也都借鉴开源框架设计并实现了自己的移动端推理,小厂也都找到了自己最合适的开源框架。

2020的关键词是云!

在Core ML刚开始出现的2017年,深度学习云服务正处在野蛮生长的阶段,安全性和稳定性都得不到保障,最关键的是,没有特别的需求需要使用云服务来提供算法能力,以及云端算法能力如何和本地融合,这些东西都还没有考虑清楚。

在2020年,云服务几乎是每个大厂都在考虑做的事情,一是算力,云端能将机器算力充分压榨,通过虚拟化技术,可以提供弹性可配置的算力,这个算力是移动端无法比拟的;二是5G的前景,5G的低延时让云服务在未来具有无限的可能,再加上边缘计算,似乎真的可以完全搞定算力问题,所以提前布局是非常有必要的;三是现在深度学习算法很难作为单一算法出现,即单纯依赖深度学习算法无法解决一个系统问题,因此深度学习算法往往是和其他算法打包到一起来解决复杂问题,更常见的情况,是多个将深度学习算法包装成底层能力,随时需要随时调用,在这种场景下,没有比云服务更好的选择了。

不知道Core ML是否也会出一个Core ML Serving 呢?

参考

https://www.appcoda.com/coreml2/
https://golden.com/wiki/Core_ML
https://www.appcoda.com/coreml-introduction/
https://machinethink.net/blog/new-in-coreml3/
https://machinethink.net/blog/new-in-apple-machine-learning-2020/
https://techcrunch.com/2018/07/10/apple-combines-machine-learning-and-siri-teams-under-giannandrea/

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值