基于移動(dòng)設(shè)備的機(jī)器學(xué)習(xí),本地與云端孰優(yōu)孰劣?

責(zé)任編輯:editor005

作者:陳鳴鳩

2017-02-28 11:53:49

摘自:雷鋒網(wǎng)

工作原理:不需要您具備訓(xùn)練模型的專業(yè)知識(shí),只需上傳數(shù)據(jù),選擇想使用的模型型號(hào),并讓機(jī)器學(xué)習(xí)服務(wù)接管一切。 如果自己訓(xùn)練模型,那么該模型得出參數(shù)后,就可以選擇在服務(wù)器上還是在設(shè)備上進(jìn)行推斷。

如果您覺(jué)得,是時(shí)候給自己的手機(jī)應(yīng)用添加一些熱門的機(jī)器學(xué)習(xí)或深度學(xué)習(xí)算法.....這是個(gè)好想法!但您會(huì)怎么選擇?致力于提供算法服務(wù)及小白科普的咨詢師 Matthijs Hollemans 近期在博客上分享了他的一些心得體會(huì),雷鋒網(wǎng)獨(dú)家編譯,未經(jīng)許可不得轉(zhuǎn)載。

絕大多數(shù)機(jī)器學(xué)習(xí)實(shí)現(xiàn)方法的步驟不外乎如下三點(diǎn):

采集數(shù)據(jù)

利用采集的數(shù)據(jù)來(lái)訓(xùn)練一個(gè)模型

使用該模型進(jìn)行預(yù)測(cè)

假設(shè)想做一個(gè)“名人匹配 (celebrity match) ”的應(yīng)用程序,告訴用戶他們和哪位名人最相似。首先收集眾多名人的臉部照片; 然后基于這些照片,訓(xùn)練出一個(gè)深度網(wǎng)絡(luò)上并使其能夠辨認(rèn)出每個(gè)名人的模樣。這將用到某種卷積神經(jīng)網(wǎng)絡(luò),然后訓(xùn)練這個(gè)網(wǎng)絡(luò),直到它能比較普通人和名人之間的臉部差異。

訓(xùn)練過(guò)程困難重重且代價(jià)不菲,但一旦模型訓(xùn)練有成,實(shí)現(xiàn)了“推斷 (inference) ”——換句話說(shuō),做出預(yù)測(cè)是相當(dāng)容易的。上傳一張自拍給模型它會(huì)立即說(shuō):“您和George Clooney的相似度達(dá)到85%,但您有一雙Lady Gaga的眼睛!"

基于移動(dòng)設(shè)備的機(jī)器學(xué)習(xí),本地與云端孰優(yōu)孰劣?

需要什么樣數(shù)據(jù)、設(shè)計(jì)什么樣的模型、以及該如何訓(xùn)練這個(gè)模型,完全取決于您想構(gòu)建什么樣的應(yīng)用程序。但如何把機(jī)器學(xué)習(xí)系統(tǒng)融合到您的產(chǎn)品中,還需做出一些抉擇,這也是本篇博客存在的原因。

需要做出決定的事情主要是:

·想訓(xùn)練自己的模型嗎?

·在自己的電腦上還是在云中訓(xùn)練?

·在云中進(jìn)行推斷還是在本地設(shè)備上進(jìn)行推斷(離線狀態(tài)下)?

換言之,應(yīng)該使用云服務(wù)進(jìn)行深度學(xué)習(xí),還是應(yīng)該自己一手操辦?讓我們一探究竟!

簡(jiǎn)單快速的選項(xiàng)

第一個(gè)問(wèn)題是:真的需要擁有自己的模型嗎?

使用別人的模型是目前為止最簡(jiǎn)單的方法。機(jī)器學(xué)習(xí)領(lǐng)域的新公司如雨后春筍般出現(xiàn),他們能提供定制服務(wù),例如語(yǔ)音識(shí)別,文本分析,或者圖像分類。您不能直接訪問(wèn)他們的模型,因?yàn)檫@是他們的機(jī)密,但通過(guò)一個(gè)API接口,就可以將這些模型為己所用。

提供此類機(jī)器學(xué)習(xí)服務(wù)的供應(yīng)商有:

各地涌現(xiàn)的類似服務(wù)商還有很多。如果應(yīng)用程序需要執(zhí)行這些特定服務(wù)中的一個(gè),那么您應(yīng)該考慮使用這些服務(wù)。

基于移動(dòng)設(shè)備的機(jī)器學(xué)習(xí),本地與云端孰優(yōu)孰劣?

工作原理:移動(dòng)應(yīng)用程序僅需向此類網(wǎng)絡(luò)服務(wù)發(fā)送一個(gè)HTTPS請(qǐng)求以及提供預(yù)測(cè)所需的數(shù)據(jù),例如由設(shè)備的相機(jī)拍攝的照片,那么在幾秒鐘之內(nèi),設(shè)備就能接收到預(yù)測(cè)結(jié)果。一般情況下,您需要依據(jù)不同請(qǐng)求,支付不同的費(fèi)用,除此之外不需要擔(dān)心別的。您唯一需要做的,是在應(yīng)用程序內(nèi)部連接服務(wù)的API接口,通常有軟件開(kāi)發(fā)工具包 (SDK) 會(huì)讓這些服務(wù)易于集成。為了讓模型保持最新,服務(wù)供應(yīng)商會(huì)在后臺(tái)使用他們的數(shù)據(jù)對(duì)模型進(jìn)行重復(fù)訓(xùn)練。每當(dāng)他們改進(jìn)模型,您自然而然地能從中受益,而不必為了使用這些服務(wù)去了解任何機(jī)器學(xué)習(xí)的事。

使用這種“全包的”機(jī)器學(xué)習(xí)服務(wù)的好處是:

·易上手。(通常有免費(fèi)的。)

·一勞永逸、毫無(wú)困擾,不用擔(dān)心需要運(yùn)行自己的服務(wù)器或訓(xùn)練模型。

·不用費(fèi)力勞神,就能從機(jī)器學(xué)習(xí)中受益。

這種方法的缺點(diǎn):

·無(wú)法在本地設(shè)備上執(zhí)行推斷:所有推斷都是向他們的服務(wù)器發(fā)送網(wǎng)絡(luò)請(qǐng)求完成的。這意味著在請(qǐng)求推斷和獲得結(jié)果之間存在(短暫的)延遲,而且如果用戶沒(méi)有網(wǎng)絡(luò)連接,應(yīng)用程序?qū)⑼耆荒芄ぷ鳌?/p>

·需要為每個(gè)預(yù)測(cè)請(qǐng)求付費(fèi),例如每1000個(gè)請(qǐng)求需支付1美元。

·不能用自己的數(shù)據(jù)對(duì)模型進(jìn)行訓(xùn)練,所以模型只適用于處理常見(jiàn)的數(shù)據(jù),如圖片,視頻和語(yǔ)音。如果您的數(shù)據(jù)具有唯一性或特殊性,那么這就不是一個(gè)正確的選擇。

注意:這些服務(wù)實(shí)際上只允許有限種類的訓(xùn)練。例如Clarifai,允許上傳自定義的訓(xùn)練圖像來(lái)創(chuàng)建自己的模型,這樣增強(qiáng)他們現(xiàn)有模型的功能后,對(duì)于特定的圖像,能獲得更好的推斷結(jié)果。

如果現(xiàn)有的模型符合您所有的需求,使用全盤管理的機(jī)器學(xué)習(xí)服務(wù)是一個(gè)明智的選擇。對(duì)于大多數(shù)移動(dòng)應(yīng)用程序,選這個(gè)服務(wù)就對(duì)了!

訓(xùn)練自己的模型

如果您的數(shù)據(jù)在某種場(chǎng)景下上是獨(dú)一無(wú)二的,或者對(duì)現(xiàn)有的解決方案不滿意,那么您需要訓(xùn)練自己的模型。數(shù)據(jù)是成功進(jìn)行機(jī)器學(xué)習(xí)的關(guān)鍵,數(shù)據(jù)的質(zhì)量和數(shù)量是重中之重。如果想訓(xùn)練自己的模型,您需要海量的數(shù)據(jù)。一旦收集好了訓(xùn)練數(shù)據(jù),下一步是決定在哪里訓(xùn)練和如何訓(xùn)練,這取決于模型的復(fù)雜性和收集到的訓(xùn)練數(shù)據(jù)的數(shù)量。

小型模型:可以在個(gè)人電腦或一臺(tái)備用電腦上訓(xùn)練這個(gè)模型。

大型模型:具有多個(gè)GPU的強(qiáng)力機(jī)器更有利,這任務(wù)確實(shí)更適于高性能計(jì)算機(jī)集群處理。

除非您有自己的數(shù)據(jù)中心或是一個(gè)土壕,否則最實(shí)際的做法還是租用其他電腦的計(jì)算能力,許多云平臺(tái) 恭候您的光臨。如今,您可以在云中租用GPU來(lái)訓(xùn)練深度學(xué)習(xí)系統(tǒng)。

所以您要決定:租用,購(gòu)買,哪個(gè)更便宜嗎?然而除了價(jià)格,還有其他條件需要考慮。讓我們來(lái)看看其中一些考慮因素。

提示:在設(shè)備上訓(xùn)練又怎樣呢?如果需要進(jìn)行推斷的所有數(shù)據(jù)在用戶設(shè)備上都有——并且不需要其他來(lái)源的數(shù)據(jù)——完全可以不需要云端平臺(tái),在設(shè)備上進(jìn)行訓(xùn)練即可,可是這方法只適用于小型數(shù)據(jù)集和基礎(chǔ)的機(jī)器學(xué)習(xí)算法。這樣的做法還沒(méi)摸到深入學(xué)習(xí)的門欄。

在云端訓(xùn)練

你的選擇有兩個(gè):

通用云計(jì)算

托管機(jī)器學(xué)習(xí)

讓我們先看看通用云計(jì)算。

工作原理:在別處數(shù)據(jù)中心租用一臺(tái)或多臺(tái)計(jì)算機(jī),在這些電腦上無(wú)論做什么都隨您喜歡。讓云計(jì)算機(jī)訪問(wèn)訓(xùn)練數(shù)據(jù),然后運(yùn)行您喜歡的訓(xùn)練軟件,模型訓(xùn)練開(kāi)始。完成訓(xùn)練后,支付用于訓(xùn)練模型所用時(shí)間消耗的費(fèi)用,就可以下載模型得出的參數(shù)和刪除計(jì)算實(shí)例。這樣就有了一個(gè)訓(xùn)練好的且可以用于任何地方的的模型。

基于移動(dòng)設(shè)備的機(jī)器學(xué)習(xí),本地與云端孰優(yōu)孰劣?

提供這類服務(wù)的有Amazon EC2和Amazon Virtual Machines。針對(duì)深度學(xué)習(xí),除了租用高速GPU,甚至可以租用案例。

好處:

極致的靈活性,沒(méi)有責(zé)任需要承擔(dān)。如果需要更多的計(jì)算能力,僅需提供其他計(jì)算實(shí)例,這比出門購(gòu)買新電腦要經(jīng)濟(jì)得多。

訓(xùn)練通常只做一次,所以只需要租用這些電腦一小段時(shí)間。如果想重新訓(xùn)練模型,只需再租幾個(gè)小時(shí)或幾天的計(jì)算機(jī)時(shí)間。

可以訓(xùn)練任意類型的模型,還可以使用選好的訓(xùn)練包。

可以下載訓(xùn)練好的模型,然后根據(jù)喜好使用它。

缺點(diǎn):

訓(xùn)練模型完全由您負(fù)責(zé),因此需要清楚每一步的意義。如果不熟悉機(jī)器學(xué)習(xí)或者毫無(wú)訓(xùn)練經(jīng)驗(yàn),那么需要雇用一個(gè)經(jīng)驗(yàn)豐富的人。

需要將訓(xùn)練數(shù)據(jù)上傳到這個(gè)云服務(wù),您不僅要購(gòu)買計(jì)算時(shí)間,還要支付存儲(chǔ)費(fèi)用。

注意:上面的討論只和訓(xùn)練機(jī)器學(xué)習(xí)模型相關(guān),而不是和推斷相關(guān)。一旦訓(xùn)練好模型,需要設(shè)法讓它在應(yīng)用程序上可用,使得程序可以用該模型做出推斷。如果決定在本地設(shè)備上進(jìn)行推斷,那么將模型嵌入到移動(dòng)應(yīng)用程序中即可。但是如果在云中做推斷,您仍然需要建立自己的網(wǎng)絡(luò)服務(wù)來(lái)完成推理,隨之而來(lái)的是一系列需要考慮的因素(詳情在下面討論)。

托管機(jī)器學(xué)習(xí)

另一個(gè)云端選擇是托管機(jī)器學(xué)習(xí)。如亞馬遜,微軟和谷歌等公司,早已把提供機(jī)器學(xué)習(xí)列為云服務(wù)的首要任務(wù)。

工作原理:不需要您具備訓(xùn)練模型的專業(yè)知識(shí),只需上傳數(shù)據(jù),選擇想使用的模型型號(hào),并讓機(jī)器學(xué)習(xí)服務(wù)接管一切。

基于移動(dòng)設(shè)備的機(jī)器學(xué)習(xí),本地與云端孰優(yōu)孰劣?

這是個(gè)介于使用完全托管服務(wù)和自己親力親為之間的選項(xiàng),絕對(duì)比自己的訓(xùn)練要容易得多,特別是如果對(duì)訓(xùn)練模型不是很有信心。但是大多數(shù)這類服務(wù)不允許您下載訓(xùn)練好的模型,所以對(duì)于應(yīng)用程序的推斷部分,您別無(wú)選擇,只能使用他們的平臺(tái)進(jìn)行推斷。不能把訓(xùn)練好的模型移植到移動(dòng)設(shè)備上,也就是不能在設(shè)備上進(jìn)行預(yù)測(cè),每進(jìn)行一次推斷,都要連接他們的API接口和發(fā)送用戶的數(shù)據(jù)。

雖然這事未必對(duì)應(yīng)用程序造成困擾,但這是需要在開(kāi)始之前就注意到的事情。舉個(gè)例子來(lái)說(shuō),一旦使用了 Microsoft AzureMachine Learning的服務(wù),基本上永遠(yuǎn)被Azure套牢。如果想切換到另一個(gè)服務(wù),帶不走訓(xùn)練好的模型——您必須在新平臺(tái)上從頭開(kāi)始訓(xùn)練,并再次承擔(dān)訓(xùn)練費(fèi)用。這種類型的服務(wù)收取訓(xùn)練期間消耗的運(yùn)算時(shí)間產(chǎn)生的租金,以及訓(xùn)練數(shù)據(jù)所占的存儲(chǔ)空間的費(fèi)用。由于該服務(wù)提供了應(yīng)用程序用于請(qǐng)求預(yù)測(cè)的API接口,您還需要為每個(gè)預(yù)測(cè)請(qǐng)求支付費(fèi)用。

使用托管服務(wù)的好處:

只需上傳數(shù)據(jù),不必為訓(xùn)練操心。

容易把這些服務(wù)集成到應(yīng)用程序。雖然不能做離線推斷,但很容易讓網(wǎng)絡(luò)服務(wù)方面的事情建立且運(yùn)行起來(lái)。

缺點(diǎn):

需要使用他們的服務(wù),不能離線在移動(dòng)設(shè)備上進(jìn)行推斷。

可供選擇的模型數(shù)量有限,因此靈活性較低,例如Amazon Machine Learning目前僅支持線性回歸和邏輯回歸,使用他們的服務(wù)不能讓你訓(xùn)練出一個(gè)深度學(xué)習(xí)模型。

大公司——亞馬遜,微軟,谷歌——擁有廣泛的云服務(wù)類型。要使用他們的機(jī)器學(xué)習(xí)服務(wù),同樣得使用他們的存儲(chǔ)服務(wù)、SQL服務(wù)等。因此不得不上傳訓(xùn)練數(shù)據(jù)到他們的云服務(wù),這也需要單獨(dú)付費(fèi)。所以要為他們整個(gè)云端生態(tài)系統(tǒng)買單。

注意:新的谷歌Cloud Machine Learning平臺(tái)(當(dāng)前為測(cè)試版)似乎是一個(gè)讓人值得高興的例外。和其他競(jìng)爭(zhēng)對(duì)手一樣,這個(gè)云服務(wù)允許訓(xùn)練自己的模型(如果愿意,您還能部署它們)??梢砸浦灿?xùn)練好的模型,離線預(yù)測(cè)得以實(shí)現(xiàn),如果是TensorFlow粉絲,這項(xiàng)服務(wù)是一個(gè)非常好的選擇。再次注意,TensorFlow的運(yùn)行也是基于亞馬遜和Azure計(jì)算實(shí)例,從價(jià)格上也看得出它總是物超所值。

在自己的電腦上訓(xùn)練

原理:除了使用一臺(tái)或多臺(tái)自己的電腦外,在自己電腦上訓(xùn)練和在云上訓(xùn)練,真的沒(méi)有差異。在計(jì)算機(jī)上加載自己喜歡的集成庫(kù),賦予他們?cè)L問(wèn)數(shù)據(jù)的權(quán)限,啟動(dòng)它們,訓(xùn)練開(kāi)始。如果對(duì)深入學(xué)習(xí)的態(tài)度非常嚴(yán)肅,或者如果碰巧身邊有一些閑置的計(jì)算機(jī),那么從長(zhǎng)遠(yuǎn)來(lái)看,這個(gè)選擇可能比租用別人的電腦更實(shí)惠。

提示:即使想在云端訓(xùn)練,明智的做法是在自己計(jì)算機(jī)上,嘗試用簡(jiǎn)化的數(shù)據(jù)集運(yùn)行模型,確認(rèn)模型運(yùn)行結(jié)果的正確性。當(dāng)模型給出了有效的預(yù)測(cè)且對(duì)運(yùn)行結(jié)果感到滿意,再用完整的數(shù)據(jù)集在計(jì)算能力更強(qiáng)的計(jì)算機(jī)進(jìn)一步訓(xùn)練。

云訓(xùn)練的一個(gè)問(wèn)題是,需要將數(shù)據(jù)上傳到云服務(wù)。因?yàn)閿?shù)字存儲(chǔ)是云公司的業(yè)務(wù)之一,一般他們都會(huì)妥善保管好您的數(shù)據(jù)。但是數(shù)據(jù)也可能敏感到不希望它離開(kāi)您的住所,這種情況下,訓(xùn)練同樣需要在自己電腦上進(jìn)行。

好處:

完全受控,能自己決定如何訓(xùn)練和訓(xùn)練什么。

訓(xùn)練好的模型歸自己所有,能以任何合適的方式進(jìn)行部署:作為云服務(wù)或在設(shè)備上離線部署。

不需要為租用他人的計(jì)算機(jī)或云存儲(chǔ)而支付租金。

缺點(diǎn):

不得不為硬件,軟件,電力,以及讓自己的電腦保持運(yùn)行的一切所需買單。

如果模型足夠小,在自己的硬件上進(jìn)行訓(xùn)練是一個(gè)明智的選擇。但是,對(duì)于要處理龐大數(shù)據(jù)的大型模型,需要更多資源來(lái)訓(xùn)練,這時(shí)候使用云服務(wù)就能更快地?cái)U(kuò)展規(guī)模。

概述:訓(xùn)練選項(xiàng)

使用“托管”機(jī)器學(xué)習(xí)服務(wù),您提供數(shù)據(jù),服務(wù)商接管訓(xùn)練過(guò)程,其中一個(gè)很大的缺點(diǎn)是訓(xùn)練好的模型 并不歸自己所有。如果使用此類服務(wù),則還必須使用他們的API接口執(zhí)行預(yù)測(cè)。所以如果想在模型上訓(xùn)練自己的數(shù)據(jù),并且能離線使用訓(xùn)練好的模型,那么只有這些選項(xiàng):

在個(gè)人的電腦或備用的計(jì)算機(jī)上訓(xùn)練

不使用托管機(jī)器學(xué)習(xí)服務(wù),只租用他人的計(jì)算機(jī)或計(jì)算群集(如Amazon EC2)在云中進(jìn)行訓(xùn)練

使用如Google Cloud Machine Learning之類的服務(wù)在云端訓(xùn)練,這類服務(wù)允許下載訓(xùn)練好的模型

因?yàn)榻^大多數(shù)的云服務(wù)提供的功能非常相似,所以在選擇服務(wù)商之前,一定要貨比三家,讓自己盡可能 地少花冤枉錢。

注意:另一件需要考慮的事情是重新訓(xùn)練模型的頻率。是偶爾地再運(yùn)行一次相同的程序?還是經(jīng)常地重新訓(xùn)練模型?不是所有的托管機(jī)器學(xué)習(xí)服務(wù)商都支持在線學(xué)習(xí),如果在云上做在線學(xué)習(xí),需要長(zhǎng)期租用這些電腦。如果碰到這種情況,在自己電腦上訓(xùn)練會(huì)經(jīng)濟(jì)得多。

推斷:做出預(yù)測(cè)

很明顯,無(wú)論是在自己的電腦或是租用的電腦,訓(xùn)練都是脫機(jī)進(jìn)行的。但是,能選擇在設(shè)備上推斷,這樣的推斷并不需要網(wǎng)絡(luò)連接。

讓我們看一下這些選項(xiàng):

如果使用如Clarifai或 Watson提供的全包服務(wù),需要向其服務(wù)器發(fā)出網(wǎng)絡(luò)請(qǐng)求。這種全包服務(wù)選擇的余地不是很大。

如果使用類似Azure Machine Learning的托管機(jī)器學(xué)習(xí)服務(wù),你需要向其服務(wù)器發(fā)送網(wǎng)絡(luò)請(qǐng)求。使用自己的數(shù)據(jù)對(duì)模型進(jìn)行了訓(xùn)練,但該模型依附于他們的服務(wù)器,除非連接網(wǎng)絡(luò)API接口,否則無(wú)法訪問(wèn)該模型。

如果自己訓(xùn)練模型,那么該模型得出參數(shù)后,就可以選擇在服務(wù)器上還是在設(shè)備上進(jìn)行推斷。

究竟是在服務(wù)器上推理好,還是在本地設(shè)備上推理更好,取決于幾個(gè)權(quán)衡。

權(quán)衡之一是速度:是在移動(dòng)設(shè)備上進(jìn)行推斷得出結(jié)果更快?還是發(fā)送一個(gè)網(wǎng)絡(luò)請(qǐng)求讓性能更優(yōu)越的服務(wù)器做出推斷后返回結(jié)果更快?

然而某些推斷任務(wù)不可能在移動(dòng)設(shè)備上完成——可能設(shè)備沒(méi)有足夠的處理能力或RAM,或者可能受到其他條件約束。哪個(gè)選項(xiàng)更實(shí)用完全取決于案例需求。

在服務(wù)器上的推斷

工作原理:創(chuàng)建一個(gè)服務(wù)器——要么是在用自己的設(shè)備搭建的服務(wù)器要么是在云中租用的服務(wù)器——將訓(xùn)練好的模型上傳到該服務(wù)器上。應(yīng)用程序通過(guò)互聯(lián)網(wǎng)和服務(wù)器會(huì)話,服務(wù)器放出一個(gè)網(wǎng)絡(luò)API接口給應(yīng)用程序使用。

基于移動(dòng)設(shè)備的機(jī)器學(xué)習(xí),本地與云端孰優(yōu)孰劣?

假設(shè)一個(gè)應(yīng)用程序能將照片轉(zhuǎn)成基于深度學(xué)習(xí)的數(shù)字藝術(shù),用戶可以在他們的照片上加不同的效果。應(yīng)用程序?qū)⒄掌l(fā)送到服務(wù)器,服務(wù)器通過(guò)深度學(xué)習(xí)網(wǎng)絡(luò)給照片加上所需的效果,幾秒鐘后,程序就收到修改好的圖像。使用服務(wù)器進(jìn)行推斷使移動(dòng)應(yīng)用本身更簡(jiǎn)潔,所有復(fù)雜的事都在控制之下在服務(wù)器上進(jìn)行處理。您可以隨時(shí)改進(jìn)模型或添加新的功能,只要更新服務(wù)器,就能部署改進(jìn)的模型——不必更新移動(dòng)設(shè)備上的應(yīng)用程序。

好處:

如果已經(jīng)預(yù)留了一個(gè)后端給應(yīng)用程序,那么推理的邏輯能很好地與現(xiàn)有的后端集成在一起。

可以使用相同的軟件包進(jìn)行訓(xùn)練和推斷。(當(dāng)在本地設(shè)備上進(jìn)行推斷時(shí),可能需要使用不同的編程語(yǔ)言重寫推斷邏輯。)

隨時(shí)更新模型。

當(dāng)所有的機(jī)器學(xué)習(xí)邏輯都在服務(wù)器上時(shí),很容易移植應(yīng)用程序到不同的平臺(tái):IOS,Android,Web 等。

缺點(diǎn):

用戶需要網(wǎng)絡(luò)連接權(quán)限才能利用程序的功能進(jìn)行推斷。

需要維護(hù)自己的服務(wù)器。即使租用服務(wù)器,仍然需要處理所有典型的服務(wù)器問(wèn)題,例如防范黑客,拒絕服務(wù)攻擊,防止停機(jī)等。

需要?jiǎng)?chuàng)建API接口處理來(lái)自客戶端的預(yù)測(cè)請(qǐng)求,包括進(jìn)行身份驗(yàn)證,這樣只有授權(quán)用戶才能訪問(wèn)該服務(wù)。

需要購(gòu)買帶寬。所有用戶從網(wǎng)絡(luò)通道發(fā)送到服務(wù)器的照片占用了很大的存儲(chǔ)資源,如果服務(wù)器是自己的機(jī)器,為此還需要支付電費(fèi)。

如果應(yīng)用程序非常受歡迎,可能需要擴(kuò)展多個(gè)服務(wù)器,因?yàn)橐苊庖驗(yàn)榉?wù)器過(guò)載了造成應(yīng)用程序業(yè)績(jī)不佳的情況。

使用托管機(jī)器學(xué)習(xí)服務(wù),只需點(diǎn)擊一個(gè)按鈕即可將訓(xùn)練好的模型部署到網(wǎng)絡(luò)API接口。創(chuàng)建和托管自己的 API后,程序的靈活性將大大提高,但缺點(diǎn)也很明顯——所有事情都得自己動(dòng)手。如果應(yīng)用程序做得非常成功,有數(shù)百萬(wàn)的(付費(fèi))用戶,那么它值得讓您搭建一個(gè)自己維護(hù)的推斷后端。對(duì)于很多成功的應(yīng)用程序,這樣做可能更便宜,而且使用云內(nèi)全方位服務(wù)的機(jī)器學(xué)習(xí)方案,麻煩也更少。

注意:與其從頭開(kāi)始搭建自己的API接口,不如使用類似TensorFlow Serving的現(xiàn)成工具。

在設(shè)備上的推斷

工作原理:把模型的得出參數(shù)加載到應(yīng)用程序中,應(yīng)用程序在本地設(shè)備的CPU或GPU上運(yùn)行所有的推理計(jì)算——全程不需要與服務(wù)器通信。這個(gè)是框架服務(wù)統(tǒng)治的領(lǐng)域,像IOS上的BNNS and Metal CNN,但是一些機(jī)器學(xué)習(xí)集成庫(kù),例如TensorFlow和Caffe也同樣在設(shè)備上運(yùn)行。

基于移動(dòng)設(shè)備的機(jī)器學(xué)習(xí),本地與云端孰優(yōu)孰劣?

直接在設(shè)備上做推理的主要原因是即時(shí)性,不需要通過(guò)互聯(lián)網(wǎng)發(fā)送請(qǐng)求并等待答復(fù)——相反地,推斷(幾乎在)瞬間完成。還是把照片變成“深度藝術(shù)”的那個(gè)例子:如果把這例子移植到直播的相機(jī)里并且要求反饋實(shí)時(shí)結(jié)果呢?用發(fā)送網(wǎng)絡(luò)請(qǐng)求的方法來(lái)實(shí)現(xiàn)這功能是不可能的——它必須直接在設(shè)備上完成。

注意:說(shuō)真的,這個(gè)例子不具備現(xiàn)實(shí)意義,很多深度學(xué)習(xí)模型都做不到實(shí)時(shí)回饋。但要知道這點(diǎn):速度方面,本地處理無(wú)可匹敵。

在服務(wù)器上進(jìn)行推斷的一個(gè)最大的好處是,可以將改進(jìn)的模型立即投入使用:你需要做的僅僅是將新模型上傳到服務(wù)器,要在移動(dòng)設(shè)備上做到這一點(diǎn)可沒(méi)那么簡(jiǎn)單,因?yàn)樾枰O(shè)法把改進(jìn)的模型推送到所有安裝了應(yīng)用程序的設(shè)備上。如果經(jīng)常重復(fù)訓(xùn)練模型,為了方便把更新的模型參數(shù)發(fā)送到用戶的設(shè)備上,您可能需要搭建服務(wù)器等基本設(shè)備。

在設(shè)備上做推理的好處:

即使沒(méi)有網(wǎng)絡(luò)連接,用戶也可以輕松使用這款應(yīng)用程序的功能。

速度:相較于發(fā)送網(wǎng)絡(luò)請(qǐng)求到服務(wù)器進(jìn)行推斷,在本地設(shè)備做推斷更快捷也更可靠。

如果在設(shè)備上進(jìn)行推斷,則您不需要維護(hù)服務(wù)器。由于不需要搭建服務(wù)器,就不會(huì)遇到服務(wù)器過(guò)載的情況,當(dāng)應(yīng)用程序得到更多用戶青睞,變得更受歡迎,也完全不需要您擴(kuò)展任何設(shè)備。

注意:在設(shè)備上做推斷,用戶為此付出的代價(jià)是消耗更多的電量。實(shí)際上,和以免導(dǎo)致糟糕的用戶體驗(yàn)一樣,這也是不在設(shè)備上做推斷的原因。

缺點(diǎn):

將模型移植到應(yīng)用程序,下載擴(kuò)大后的安裝包顯然需要更多兆字節(jié)。

更新模型更加困難。用戶需要手動(dòng)下載更新后的應(yīng)用程序,或者應(yīng)用程序有自動(dòng)下載更新的功能,才能 讓設(shè)備上的模型得到更新。

將應(yīng)用程序移植到其他平臺(tái)可能會(huì)很困難,因?yàn)樾枰貙懨總€(gè)平臺(tái)的推斷部分(很有可能是一種設(shè)備類型重寫一次推斷邏輯)。

還有另一個(gè)潛在問(wèn)題同樣需要注意:其他開(kāi)發(fā)人員可以在您的應(yīng)用程序包挖掘信息。復(fù)制參數(shù)是很容易的 事情。如果使用了TensorFlow圖形定義或caffemodel文件,居心不測(cè)的人剽竊整個(gè)模型也很容易做到。如果這個(gè)模型讓您擁有了競(jìng)爭(zhēng)優(yōu)勢(shì),為了保持優(yōu)勢(shì),或許您該模糊處理這些數(shù)據(jù)。

結(jié)論

正如您所知道,選擇有很多!毫無(wú)疑問(wèn)地,未來(lái)幾個(gè)月或幾年內(nèi),市面上將會(huì)冒出越來(lái)越多的機(jī)器學(xué)習(xí)服務(wù)。什么服務(wù)最適合您的app、業(yè)務(wù)還有用戶——真的取決于您正在做的機(jī)器學(xué)習(xí)的類型。所以服務(wù)商在不知道確切的細(xì)節(jié)情況下提供合適的建議,是不可能的。但至少我希望這篇博文給了您一個(gè)確切可行的想法!

鏈接已復(fù)制,快去分享吧

企業(yè)網(wǎng)版權(quán)所有?2010-2024 京ICP備09108050號(hào)-6京公網(wǎng)安備 11010502049343號(hào)