選自maiot blog
作者:Benedikt Koller
呆板之心編譯
編輯:Panda、張倩
在呆板進(jìn)修社區(qū),越來越多的人開始接頭研究的可復(fù)現(xiàn)性,但這些接頭大部門范圍于學(xué)術(shù)情況。如何確保出產(chǎn)情況的ML可復(fù)現(xiàn)?克日,呆板進(jìn)修開拓處事提供商 maiot.io 的 CTO Benedikt Koller 宣布一篇博客文章,先容了他基于自身履歷總結(jié)的開拓可復(fù)現(xiàn)出產(chǎn)級呆板進(jìn)修所要留意的 12 個要素。
已往二十年來,我們對軟件開拓的領(lǐng)略有了大幅晉升。個中一大部門原因是 DevOps 觀念的呈現(xiàn)及其在軟件開刊行業(yè)的遍及應(yīng)用。
領(lǐng)先的軟件公司都遵循著同樣的模式:首先是在軟件開拓進(jìn)程中快速迭代,然后舉辦一連集成、一連交付、一連陳設(shè)。每個特性都要顛末測試,看其提供代價的本領(lǐng)如何,并且軟件始終要處于停當(dāng)?shù)臓顟B(tài),而且通過自動化要領(lǐng)舉辦陳設(shè)。
呆板進(jìn)修這個規(guī)模雖差異于傳統(tǒng)的軟件開拓,但我們也能從軟件開刊行業(yè)羅致許多實用的履歷教導(dǎo)。已往幾年里,我們一直在開拓出產(chǎn)型呆板進(jìn)修項目。我們的方針并不可是觀念驗證,而是與軟件開拓一樣的可復(fù)現(xiàn)本領(lǐng)(reproducibility)。因此,我們構(gòu)建了一套流程協(xié)調(diào)器、強(qiáng)大的自動化本領(lǐng)并成立了一套用于實現(xiàn)該方針的事情流程。
為什么不直接利用 Jupyter Notebook?從新開始構(gòu)建一組包括所有處理懲罰步調(diào)的條記需要多長時間?為團(tuán)隊納入新成員的難易水平如何?你此刻可以復(fù)現(xiàn)兩個月前的功效嗎?能以多快的速度復(fù)現(xiàn)?你能將本日的功效和汗青功效舉辦比擬嗎?你能在練習(xí)進(jìn)程中存眷到數(shù)據(jù)的出處嗎?假如你的模子過期了又會產(chǎn)生什么?
我們碰著過所有這些問題。此刻,我們將這些履歷舉辦了歸納總結(jié),獲得了樂成構(gòu)建出產(chǎn)型呆板進(jìn)修的 12 個要素(雷同于軟件開拓中的十二要素應(yīng)用/12 factor app)。
1. 版本節(jié)制
對軟件工程師來說,版本節(jié)制根基上是理所雖然需要做的,可是這一要領(lǐng)論還尚未被數(shù)據(jù)科學(xué)家遍及接管。讓我引述一下 Gitlab 上一些人的說法:
版本節(jié)制可促進(jìn)整個軟件開拓團(tuán)隊之間的協(xié)調(diào)、共享和協(xié)作。版本節(jié)制軟件讓團(tuán)隊可以在漫衍式和異步情況中事情、打點代碼和文件的修改和版本以及辦理歸并斗嘴和相關(guān)異常。
簡樸來說,版本節(jié)制能讓你安詳?shù)卮螯c軟件開拓中會變革的部門。
呆板進(jìn)修其實是一種非凡的軟件開拓,有著本身特定的要求。首先,呆板進(jìn)修中會變革的部門不止一種,而是兩種:代碼和數(shù)據(jù)。其次,模子練習(xí)的方法是(快速)迭代,而且代碼中的差別會很大(好比拆分、預(yù)處理懲罰、模子)。
只要數(shù)據(jù)產(chǎn)生變動,就需要生存一個版本,這樣才氣擔(dān)保能復(fù)現(xiàn)功效以及反復(fù)執(zhí)行嘗試和練習(xí)模子。簡樸粗暴的版本節(jié)制(硬拷貝)具有很大的改造空間,不外尤其是在團(tuán)隊共享的環(huán)境下,可以或許保持穩(wěn)定的版本節(jié)制是至關(guān)重要的。
代碼的版本節(jié)制還要越發(fā)重要。除了上面引述的內(nèi)容,預(yù)處理懲罰代碼不只在練習(xí)階段很重要,并且在處事階段也很重要,需要與模子有保持穩(wěn)定的相關(guān)性。為了在數(shù)據(jù)科學(xué)家的事情流程和投入出產(chǎn)的要求之間成立一種中臺,一種利便的要領(lǐng)是提供無處事器的成果。
總結(jié):你需要對代碼舉辦版本節(jié)制,也需要對數(shù)據(jù)舉辦版本節(jié)制。
2. 明晰的特征依賴干系
在抱負(fù)世界中,發(fā)生你的輸入數(shù)據(jù)的對象應(yīng)該老是會發(fā)生同樣的數(shù)據(jù),至少布局上是這樣。但這個世界并不是完美的,你從上游處事獲取的數(shù)據(jù)也是由人類構(gòu)建的,因此大概會產(chǎn)生變革。最終,特征也大概產(chǎn)生改變。最好的環(huán)境是你的模子會直接妨礙報錯,但尚有最壞的環(huán)境:你的模子暗暗繼承事情,但獲得的功效都是垃圾。
明晰界說的特征依賴干系可以或許盡快展現(xiàn)出失敗案例。假如系統(tǒng)設(shè)計得好,還能在處事時舉辦一連練習(xí),然后調(diào)解依賴干系并加以適應(yīng)。
總結(jié):明晰代碼中的特征依賴干系。
3. 描寫性的練習(xí)和預(yù)處理懲罰
優(yōu)良的軟件都有優(yōu)良的描寫和注釋——讓人無需閱讀每一行代碼就能輕松閱讀和領(lǐng)略代碼成果。
盡量呆板進(jìn)修是一類非凡的軟件開拓,但它并不勉勵實踐者背離已有的代碼書寫準(zhǔn)則。在代碼書寫尺度中,最根基的一條是能讓人在短時間內(nèi)不艱辛地閱讀。
預(yù)處理懲罰和模子的代碼都應(yīng)該遵循 PEP8 類型。代碼中該當(dāng)利用有意義的工具名并包括有助于領(lǐng)略的注釋。遵循 PEP8 類型可晉升代碼的可讀性,低落巨大度并加速調(diào)試速度。SOLID 之類的編程范式提供了顛末深思熟慮的框架,可讓代碼在將來用例中的可維護(hù)性、可領(lǐng)略性和機(jī)動性都獲得改進(jìn)。
設(shè)置應(yīng)該與代碼疏散。不要將數(shù)據(jù)分派比例硬編碼到代碼之中,而是通過設(shè)置方法提供,以便在運(yùn)行時修改。人們在超參數(shù)調(diào)理方面已經(jīng)熟知這一點了:利用疏散的設(shè)置文件可以顯著加速迭代速度,而且讓代碼庫可以反復(fù)利用。
總結(jié):晉升代碼可讀性而且將代碼和設(shè)置分隔。
4. 練習(xí)功效的可復(fù)現(xiàn)性
假如你不能復(fù)現(xiàn)練習(xí)功效,那么這個功效就是不行信的。盡量這是本文的主題,但在可復(fù)現(xiàn)性方面有一些細(xì)節(jié)需要說明。不只是你本身需要能復(fù)現(xiàn)練習(xí)功效,你的整個團(tuán)隊都要能做到這一點。不管是在 PC 照舊在 AWS 虛擬機(jī)上,恍惚處理懲罰 Jupyter Notebook 中的練習(xí)功效都與可復(fù)現(xiàn)性南轅北轍。
通過設(shè)定練習(xí)的事情流程,整個團(tuán)隊都可以透明地會見已執(zhí)行的嘗試和已運(yùn)行的練習(xí)。通過綁定可復(fù)用的代碼庫以及疏散的設(shè)置文件,每小我私家都可在任何時間樂成從頭練習(xí)。
總結(jié):利用管道式事情流程和自動化。
5. 測試
測試的形式有許多。舉兩個例子:
1)單位測試是原子層面上的測試——基于各自的尺度單獨測試每個函數(shù)和成果。
2)集成測試則相反,是將代碼庫的所有元素都放到一起舉辦測試,同時還會測試上下游處事的克隆版本或模仿版本。
這兩種范式都適應(yīng)于呆板進(jìn)修。預(yù)處理懲罰代碼是預(yù)先確定的,直到測試階段——這樣的轉(zhuǎn)換能在差異的輸入下都獲得正確功效嗎?模子是集成測試的一個絕佳案例——在出產(chǎn)情況中提供處事時,你的模子的表示是否與評估時相當(dāng)?
總結(jié):測試你的代碼,測試你的模子。
6. 偏移與一連練習(xí)
在出產(chǎn)場景中,任務(wù)產(chǎn)生偏移是公道存在的問題。只要數(shù)據(jù)存在變革的大概性,你就需要思量偏移的大概性。對付此問題的風(fēng)險,有兩種可以采納的法子:
1)監(jiān)控出產(chǎn)系統(tǒng)中的數(shù)據(jù)。成立自動化陳訴機(jī)制,在數(shù)據(jù)產(chǎn)生變革時通知團(tuán)隊,這種變革甚至大概高出明晰界說的特征依賴干系。
2)基于新輸入的數(shù)據(jù)一連練習(xí)。精采自動化的管道化流程可以基于新數(shù)據(jù)反復(fù)運(yùn)行,然后與汗青練習(xí)功效舉辦較量,展示機(jī)能變革環(huán)境以及將練習(xí)獲得的模子快速投放到出產(chǎn)中,從而讓模子表示更好。
總結(jié):假如你的數(shù)據(jù)會產(chǎn)生變革,那就回收一種一連練習(xí)的管道化流程。
7. 跟蹤功效
Excel 并非一種跟蹤嘗試功效的好要領(lǐng)。并且還不可是 Excel,任何分手的人工跟蹤要領(lǐng)獲得的信息都是不足權(quán)威的,也因此是不行信的。
正確的做法是以一種中心化的數(shù)據(jù)存儲方法自動記錄練習(xí)功效。自動化可以或許擔(dān)保靠得住地跟蹤每次練習(xí),從而利便之后較量每次練習(xí)的功效。對功效舉辦中心化存儲,能為團(tuán)隊提供透明,實現(xiàn)一連性闡明。
總結(jié):通過自動化要領(lǐng)跟蹤功效。
8. 嘗試模子與出產(chǎn)模子
我們需要盡力才氣領(lǐng)略數(shù)據(jù)集。凡是來說,我們會通過嘗試來實現(xiàn)領(lǐng)略,
ST貼片鋁電解電容,尤其是當(dāng)我們存眷的規(guī)模具備大量隱含規(guī)模常識時。建設(shè)一個 Jupyter Notebook,將部門/全部數(shù)據(jù)導(dǎo)入 Pandas Dataframe,舉辦幾個小時無序研究,練習(xí)第一個模子,評估功效——任務(wù)完成。但幸運(yùn)的是,現(xiàn)實并不如此。
在呆板進(jìn)修的生命周期中,嘗試有本身的目標(biāo)。這些目標(biāo)并不是模子,而是領(lǐng)略?;诿餍?Jupyter Notebook 的模子是為了領(lǐng)略,而不是為出產(chǎn)開拓的制品。領(lǐng)略之后,還需要進(jìn)一步開拓和適應(yīng),才氣開始打造用于出產(chǎn)的練習(xí)流程。
不外,所有與規(guī)模特定的常識無關(guān)的領(lǐng)略都可以自動化。你可以基于你利用的每個數(shù)據(jù)版本生成統(tǒng)計信息,從而可以跳過那些你在 Jupyter Notebook 中做過的一次性的姑且摸索事情,然后直達(dá)第一個管道式流程。你在流程中嘗試舉辦得越早,你就能越早地在中間功效長舉辦協(xié)作,也就能更早地實現(xiàn)可投入出產(chǎn)的模子。
總結(jié):條記不能投入出產(chǎn),因此要在流程中盡早嘗試。
9. 練習(xí)和處事之間的要領(lǐng)差別
練習(xí)和實際處事之間往往存在要領(lǐng)差別,為了正確地將所有數(shù)據(jù)預(yù)處理懲罰進(jìn)程都納入到模子處事情況中,需要淘汰這些差別。這雖然是正確的,你也需要僵持這一原則??墒?,這只是對這一問題的部門解讀。
先來簡樸看一段陳腐的 DevOps 汗青:2006 年,亞馬遜的 CTO Werner Vogels 締造了一個說法「You build it, you run it(你構(gòu)建的對象你要運(yùn)行)」。這是一個描寫性的短語,意思是開拓者的責(zé)任不可是寫措施,還需要運(yùn)行它們。
呆板進(jìn)修項目也需要雷同的機(jī)制——領(lǐng)略上游的數(shù)據(jù)生成以及下游的模子利用都在數(shù)據(jù)科學(xué)家的職責(zé)范疇內(nèi)。你練習(xí)用的數(shù)據(jù)是通過什么體系生成的?它會出問題嗎?該體系的處事級方針(SLO)是什么?這與實際處事的方針一致嗎?你的模子的處事方法是奈何的?運(yùn)行時情況是奈何的?奈何在處事時對函數(shù)舉辦預(yù)處理懲罰?這些都是數(shù)據(jù)科學(xué)家需要領(lǐng)略息爭答的問題。
總結(jié):正確地將預(yù)處理懲罰嵌入隨處事之中,確保你領(lǐng)略數(shù)據(jù)的上下游。
10. 可較量性
從為項目引入第二個練習(xí)劇本開始,可較量性就成了將來事情的重要構(gòu)成部門。假如第二個模子的功效無法與第一個模子的功效舉辦較量,則整個進(jìn)程就揮霍了,個中至少有一個是多余的,甚至大概兩個都多余。
按照界說,所有試圖辦理同一問題的模子練習(xí)都需要可以較量,不然它們就不是在辦理同一問題。盡量迭代進(jìn)程大概導(dǎo)致所要較量的對象產(chǎn)生變革,可是在技能上實現(xiàn)模子練習(xí)的可較量性需要一開始就作為首要成果內(nèi)置于練習(xí)架構(gòu)之中。
總結(jié):構(gòu)建你本身的管道式流程,以便輕松較量各個流程的練習(xí)功效。
11. 監(jiān)控
大致地說,呆板進(jìn)修的方針應(yīng)該是通過進(jìn)修數(shù)據(jù)來辦理問題。為了辦理這個問題,需要分派計較資源。首先是分派給模子的練習(xí),然后是分派給模子的處事。認(rèn)真在練習(xí)期間提供資源的不管是人照舊部分,都需要認(rèn)真將這些資源轉(zhuǎn)移給處事。模子在利用進(jìn)程中大概呈現(xiàn)許多機(jī)能下降問題。數(shù)據(jù)可以偏移,模子大概成為整體機(jī)能的瓶頸,毛病也是一個真實存在的問題。
結(jié)果:數(shù)據(jù)科學(xué)家和團(tuán)隊認(rèn)真監(jiān)控他們建設(shè)的模子。他們并不必然要認(rèn)真實施監(jiān)控,尤其是當(dāng)組織布局很大時,但他們必定需要認(rèn)真監(jiān)控數(shù)據(jù)的領(lǐng)略息爭釋。最低限度上,需要監(jiān)控的內(nèi)容包羅輸入數(shù)據(jù)、推理次數(shù)、資源利用環(huán)境(CPU、RAM)和輸出數(shù)據(jù)。
總結(jié):同樣,「You build it, you run it(你構(gòu)建的對象你要運(yùn)行)」。監(jiān)控出產(chǎn)進(jìn)程中的模子是數(shù)據(jù)科學(xué)的部門事情。
12. 模子的可陳設(shè)性
從技能層面講,每個模子練習(xí)流程都需要獲得可陳設(shè)到出產(chǎn)情況中的制品。毫無疑問,這些模子功效大概很糟糕,但它需要做成可以陳設(shè)到出產(chǎn)情況的形態(tài)。
這是軟件開拓中的常見模式,也叫做一連交付(Continuous Delivery)。團(tuán)隊需要可以或許隨時陳設(shè)他們的軟件,為了滿意這個方針,迭代周期需要足夠快。
呆板進(jìn)修也需要回收雷同的要領(lǐng)。這樣才氣迫使團(tuán)隊首先思量現(xiàn)實與期望之間的均衡。所有好處相關(guān)者都該當(dāng)清楚,在模子功效方面,哪些功效是理論上大概的。所有好處相關(guān)者都該當(dāng)在模子的陳設(shè)方法以及如何與更大的軟件架構(gòu)整合上告竣一致。可是,
東莞貼片鋁電解電容廠家,這也大概需要自動化,也需要前文提到的一些要素。
總結(jié):每個練習(xí)流程都需要獲得可陳設(shè)的制品,而不「只是」模子。
原文鏈接:https://blog.maiot.io/12-factors-of-ml-in-production/
從算法到應(yīng)用,入門聲紋技能。
10月19日,第一講:音頻基本與聲紋識別。谷歌資深軟件工程師、聲紋識別與語言識別團(tuán)隊認(rèn)真人王泉老師將先容聲紋識別技能相關(guān)基本常識,包羅成長過程、聽覺感知和音頻處理懲罰相關(guān)根基觀念與要領(lǐng)、聲紋規(guī)模最焦點的應(yīng)用聲紋識別等。
添加呆板之心小助手(syncedai5),備注「聲紋」,進(jìn)群一起看直播。
? THE END
轉(zhuǎn)載請接洽本公家號得到授權(quán)
投稿或?qū)で髨蟮溃篶ontent@jiqizhixin.com喜歡此內(nèi)容的人還喜歡
原標(biāo)題:《你的出產(chǎn)型ML復(fù)現(xiàn)不了,大概是事情流程出了問題》
Copyright 2020© 東莞市立邁電子有限公司 版權(quán)所有 粵ICP備2020136922號-1
24小時服務(wù)電話:13336555866 郵箱:jimmy@limak.cn
公司地址:廣東省東莞市塘廈鎮(zhèn)東興路162號振興大廈 網(wǎng)站地圖