2020蘋果Core ML框架三大更新:更多層類型、模型加密、基于CloudKit模型部署
今年蘋果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。