2020蘋果Core ML框架三大更新:更多層類型、模型加密、基于CloudKit模型部署
今年蘋果WWDC全球開發(fā)者大會上為我們帶來了軟硬件的更新。其中,蘋果Core ML框架也帶來了三項更新:更多的層類型,對模型加密的更多支持,以及在CloudKit上托管模型更新能力。
移動端機器學(xué)習(xí)不再是2020年熱門新事物,將應(yīng)用程序智能化早已成為行業(yè)的標(biāo)準(zhǔn)做法。
去年,蘋果公司對Core ML進行了重大更新。今年的更新要簡單得多:更多的層類型,對模型加密的更多支持,以及在CloudKit上托管模型更新能力。
CoreML是一個Apple框架,用于將機器學(xué)習(xí)模型集成到應(yīng)用程序中。
其優(yōu)勢是,Core ML通過利用CPU,GPU和神經(jīng)引擎來優(yōu)化設(shè)備上的性能,同時最大程度地減少其內(nèi)存占用空間和功耗,嚴(yán)格在用戶設(shè)備上運行模型將消除對網(wǎng)絡(luò)連接的任何需求,這有助于保持用戶數(shù)據(jù)的私密性和應(yīng)用程序的響應(yīng)速度。
Core ML 還是一些其他蘋果框架和功能的基礎(chǔ)。CoreML是視覺處理,自然語言,speech轉(zhuǎn)換音頻文本,以及音頻識別的核心模型,Core ML 本身構(gòu)建于低層面的原語之上,比如 Accelerate and BNNS 和 Metal Performance Shaders。
更多的層類型,為Core ML帶來更多的功能
這些新的層類型是:
新的層類型只能在高版本中被使用,這意味著系統(tǒng)必須是iOS 14和macOS 11.0,或者更高的版本。
另一個有用的改進是針對InnerProductLayer、BatchedMatMulLayer的8位量化操作。
在Core ML的早期版本中,用戶可以量化權(quán)重,但是在加載模型時權(quán)重將被反量化為浮點數(shù)。利用新的 int8DynamicQuantize 功能,權(quán)重在加載時保持為8位整數(shù)值,并且實際計算也使用整數(shù)進行。
使用INT8進行計算的潛力很大,就速度上而言可能比浮點運算快得多。但是研究人員指出,這是否僅對CPU而非GPU有利,因為GPU確實更喜歡浮點。也許即將發(fā)布的Neural Engine的更新將支持INT8操作。
CPU上的Core ML現(xiàn)在也可以使用16位浮點運算而不是32 位浮點運算(在A11 Bionic及更高版本上)。16位浮點數(shù)現(xiàn)在是一流的Swift數(shù)據(jù)類型。通過CPU本身支持的16位浮點數(shù),Core ML的速度可以提高兩倍以上!
在CloudKit上,可以實現(xiàn)托管模型更新
這項新的Core ML功能可讓用戶獨立于應(yīng)用程序更新模型。
現(xiàn)有應(yīng)用程序無需發(fā)布應(yīng)用程序更新,而只需下載mlmodel文件的新版本。這不是一個新的想法,一些第三方供應(yīng)商都為此提供了SDK,自己構(gòu)建它也不難。
使用Apple解決方案的優(yōu)點是模型托管在Apple Cloud上。
用戶的應(yīng)用程序中可能有多個模型,模型集合可以將多個模型捆綁在一起,更新時應(yīng)用程序便會立即更新所有模型。用戶可以在CloudKit儀表板上創(chuàng)建這些集合。在應(yīng)用程序中,用戶還可以使用MLModelCollection下載和管理模型更新。
為了準(zhǔn)備要部署的Core ML模型,Xcode中有一個Create Model Archive按鈕。這將寫入一個.mlarchive文件。用戶可以將此模型版本上傳到CloudKit儀表板,然后將其放入模型集合中。(mlarchive實際上只是一個包含mlmodelc文件夾內(nèi)容的zip文件。)
另一個不錯的功能是用戶可以將不同的模型集合部署到不同的用戶。比如,iPhone上的攝像頭與iPad上的攝像頭不同,因此用戶可能需要創(chuàng)建模型的兩個版本,然后將一個發(fā)送給該應(yīng)用程序的iPhone端,另一個發(fā)送給iPad端。
用戶可以為設(shè)備(iPhone / iPad /電視/手表),操作系統(tǒng)和版本,區(qū)域代碼,語言代碼和應(yīng)用版本創(chuàng)建定位規(guī)則。
新模型的版本部署不是立即進行的。應(yīng)用程序需要先在某個時刻檢測到新模型可用,并自動下載該模型,將其放置在應(yīng)用程序的沙箱中。但是用戶無法控制何時或如何發(fā)生這種情況,Core ML可能會在不使用手機時在后臺執(zhí)行下載。
因此,最好將使用內(nèi)置模型作為后備選項來交付應(yīng)用程序,比如可以同時處理iPhone和iPad的通用模型。
模型加密,讓專有技術(shù)不再被盜用
以往,竊取用戶的Core ML模型再將其粘貼到其他應(yīng)用程序中,是一件非常容易的事情。
從iOS 14 / macOS 11.0開始,Core ML可以自動加密和解密模型,陌生人便不可以窺視用戶的mlmodelc文件夾。不管用戶有沒有新的CloudKit部署,都可以加密。
Xcode加密編譯的模型mlmodelc不是原始的mlmodel文件。這個模型在用戶設(shè)備上會永久加密。
當(dāng)應(yīng)用程序?qū)嵗P蜁r,Core ML才會自動對其解密。此解密版本不會在任何位置存儲為文件,僅儲存在內(nèi)存中。
首先,用戶需要一個加密密鑰,而用戶并不需要管理此密鑰。Xcode的Core ML模型查看器中現(xiàn)在有一個「創(chuàng)建加密密鑰」按鈕。當(dāng)用戶單擊此按鈕時,Xcode會生成一個與Apple開發(fā)人員團隊帳戶關(guān)聯(lián)的新加密密鑰。
此過程將創(chuàng)建一個新的.mlmodelkey文件。該密鑰存儲在Apple的服務(wù)器上,但是用戶還可以獲得在Xcode中加密模型所需的本地副本,無需在應(yīng)用程序中嵌入此加密密鑰。
若要加密Core ML模型,用戶可以添加--encrypt YourModel.mlmodelkey到模型的編譯器標(biāo)志。或者如果要使用CloudKit部署,需在創(chuàng)建模型檔案時需要提供加密密鑰。
要在應(yīng)用程序?qū)嵗臅r候解密模型,Core ML將需要通過網(wǎng)絡(luò)從Apple的服務(wù)器中獲取加密密鑰,因此顯然需要網(wǎng)絡(luò)連接。Core ML僅在用戶第一次使用該模型時需要連接網(wǎng)絡(luò)。
如果網(wǎng)絡(luò)中斷并且尚未下載加密密鑰,則應(yīng)用將無法實例化Core ML模型。因此,用戶應(yīng)該使用新YourModel.load()功能。它可以完成處理程序并提示用戶響應(yīng)加載的錯誤。
這個功能很容易在應(yīng)用程序中實現(xiàn),很好的解決了盜用專有技術(shù)的問題。
此外,Create ML在今年也有了很大的改進, 提供了新的模板和訓(xùn)練功能。
用戶使用Xcode 12的新版本,可以暫停訓(xùn)練并繼續(xù),保存模型檢查點,并預(yù)覽模型的運行狀況,用戶可以更好地控制訓(xùn)練過程。在CreateML.framework中,還提供了更多針對視覺和自然語言的 API。