CoreML是一个Apple框架用于将机器学习模型集成到应用程序中

新闻 2020-07-23 15:26:25

今年苹果 WWDC 全球开发者大会上为我们带来了软硬件的更新。其中,苹果 Core ML 框架也带来了三项更新:更多的层类型,对模型加密的更多支持,以及在 CloudKit 上托管模型更新能力。

移动端机器学习不再是 2020 年热门新事物,将应用程序智能化早已成为行业的标准做法。

去年,苹果公司对 Core ML 进行了重大更新。今年的更新要简单得多:更多的层类型,对模型加密的更多支持,以及在 CloudKit 上托管模型更新能力。

CoreML 是一个 Apple 框架,用于将机器学习模型集成到应用程序中。

其优势是,Core ML 通过利用 CPU,GPU 和神经引擎来优化设备上的性能,同时最大程度地减少其内存占用空间和功耗,严格在用户设备上运行模型将消除对网络连接的任何需求,这有助于保持用户数据的私密性和应用程序的响应速度。

Core ML 还是一些其他苹果框架和功能的基础。CoreML 是视觉处理,自然语言,speech 转换音频文本,以及音频识别的核心模型,Core ML 本身构建于低层面的原语之上,比如 Accelerate and BNNS 和 Metal Performance Shaders。

更多的层类型,为 Core ML 带来更多的功能

这些新的层类型是:

新的层类型只能在高版本中被使用,这意味着系统必须是 iOS 14 和 macOS 11.0,或者更高的版本。 另一个有用的改进是针对 InnerProductLayer、BatchedMatMulLayer 的8 位量化操作。

在 Core ML 的早期版本中,用户可以量化权重,但是在加载模型时权重将被反量化为浮点数。利用新的 int8DynamicQuantize 功能,权重在加载时保持为 8 位整数值,并且实际计算也使用整数进行。

使用 INT8 进行计算的潜力很大,就速度上而言可能比浮点运算快得多。

但是研究人员指出,这是否仅对 CPU 而非 GPU 有利,因为 GPU 确实更喜欢浮点。也许即将发布的 Neural Engine 的更新将支持 INT8 操作。

CPU 上的 Core ML 现在也可以使用 16 位浮点运算而不是 32 位浮点运算(在 A11 Bionic 及更高版本上)。16 位浮点数现在是一流的 Swift 数据类型。通过 CPU 本身支持的 16 位浮点数,Core ML 的速度可以提高两倍以上!

在 CloudKit 上,可以实现托管模型更新

这项新的 Core ML 功能可让用户独立于应用程序更新模型。

现有应用程序无需发布应用程序更新,而只需下载 mlmodel 文件的新版本。这不是一个新的想法,一些第三方供应商都为此提供了 SDK,自己构建它也不难。

使用 Apple 解决方案的优点是模型托管在 Apple Cloud 上。

用户的应用程序中可能有多个模型,模型集合可以将多个模型捆绑在一起,更新时应用程序便会立即更新所有模型。用户可以在 CloudKit 仪表板上创建这些集合。在应用程序中,用户还可以使用MLModelCollection下载和管理模型更新。

为了准备要部署的 Core ML 模型,Xcode 中有一个Create Model Archive按钮。这将写入一个.mlarchive文件。用户可以将此模型版本上传到 CloudKit 仪表板,然后将其放入模型集合中。(mlarchive 实际上只是一个包含 mlmodelc 文件夹内容的 zip 文件。) 另一个不错的功能是用户可以将不同的模型集合部署到不同的用户。比如,iPhone 上的摄像头与 iPad 上的摄像头不同,因此用户可能需要创建模型的两个版本,然后将一个发送给该应用程序的 iPhone 端,另一个发送给 iPad 端。

用户可以为设备(iPhone / iPad /电视/手表),操作系统和版本,区域代码,语言代码和应用版本创建定位规则。 新模型的版本部署不是立即进行的。应用程序需要先在某个时刻检测到新模型可用,并自动下载该模型,将其放置在应用程序的沙箱中。但是用户无法控制何时或如何发生这种情况,Core ML 可能会在不使用手机时在后台执行下载。

因此,最好将使用内置模型作为后备选项来交付应用程序,比如可以同时处理 iPhone 和 iPad 的通用模型。

模型加密,让专有技术不再被盗用

以往,窃取用户的 Core ML 模型再将其粘贴到其他应用程序中,是一件非常容易的事情。 从 iOS 14 / macOS 11.0 开始,Core ML 可以自动加密和解密模型,陌生人便不可以窥视用户的 mlmodelc 文件夹。不管用户有没有新的 CloudKit 部署,都可以加密。

Xcode 加密编译的模型 mlmodelc 不是原始的 mlmodel 文件。这个模型在用户设备上会永久加密。 当应用程序实例化模型时,Core ML 才会自动对其解密。此解密版本不会在任何位置存储为文件,仅储存在内存中。

首先,用户需要一个加密密钥,而用户并不需要管理此密钥。Xcode 的 Core ML 模型查看器中现在有一个「创建加密密钥」按钮。当用户单击此按钮时,Xcode 会生成一个与 Apple 开发人员团队帐户关联的新加密密钥。

此过程将创建一个新的 .mlmodelkey 文件。该密钥存储在 Apple 的服务器上,但是用户还可以获得在 Xcode 中加密模型所需的本地副本,无需在应用程序中嵌入此加密密钥。

若要加密 Core ML 模型,用户可以添加--encrypt YourModel.mlmodelkey 到模型的编译器标志。或者如果要使用 CloudKit 部署,需在创建模型档案时需要提供加密密钥。

要在应用程序实例化的时候解密模型,Core ML 将需要通过网络从 Apple 的服务器中获取加密密钥,因此显然需要网络连接。Core ML 仅在用户第一次使用该模型时需要连接网络。

如果网络中断并且尚未下载加密密钥,则应用将无法实例化 Core ML 模型。因此,用户应该使用新 YourModel.load ()功能。它可以完成处理程序并提示用户响应加载的错误。

这个功能很容易在应用程序中实现,很好的解决了盗用专有技术的问题。 此外,Create ML 在今年也有了很大的改进, 提供了新的模板和训练功能。

用户使用 Xcode 12 的新版本,可以暂停训练并继续,保存模型检查点,并预览模型的运行状况,用户可以更好地控制训练过程。在 CreateML.framework 中,还提供了更多针对视觉和自然语言的 API。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时候联系我们修改或删除,多谢