成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

DevOps二三事:用持續(xù)集成構建自動模型訓練系統(tǒng)的理論和實踐指南

開發(fā) 前端 機器學習
近幾年來,機器學習飛速發(fā)展,開展機器學習試驗變成小事一樁。有了scikit-learn和Keras這樣的資源庫,只需幾行代碼,就能創(chuàng)建模型。

本文轉載自公眾號“讀芯術”(ID:AI_Discovery)。

近幾年來,機器學習飛速發(fā)展,開展機器學習試驗變成小事一樁。有了scikit-learn和Keras這樣的資源庫,只需幾行代碼,就能創(chuàng)建模型。

然而,把數(shù)據(jù)科學項目轉變成有意義的應用程序(比如公告團隊決策或融入產品的模型)卻愈加困難。傳統(tǒng)的機器學習項目涉及許多不同的技能組合,想同時掌握全部技能,即便不是絕無可能也絕非易事——那些罕見的既能開發(fā)優(yōu)質軟件,又能做工程師的數(shù)據(jù)科學家即為獨角獸!

機器學習領域愈加成熟,許多工作都將融合軟件、工程和數(shù)學知識,一些工作已然如此了。

引用傳奇數(shù)據(jù)科學家、工程師、批判觀察家Vicki Boykis博客《數(shù)據(jù)科學現(xiàn)已不同》中的話:“在熱潮后期,數(shù)據(jù)科學漸漸與工程學靠攏。顯而易見的是,數(shù)據(jù)科學家所需技能的可視性將減弱、數(shù)據(jù)依賴性將降低,且會愈加偏向傳統(tǒng)計算機科學課程。”

[[336829]]

為什么數(shù)據(jù)科學家需要了解DevOps

有那么多工程和軟件技能,數(shù)據(jù)科學家應該學習什么呢?我選DevOps。

DevOps是開發(fā)和運營的合稱,它于2009年在比利時的一場會議中誕生。該會議旨在緩解技術組織中開發(fā)、運營因長期的巨大分歧而產生的緊張態(tài)勢。軟件開發(fā)人員需要快速產出、頻繁試驗,而運營團隊則優(yōu)先考慮服務的穩(wěn)定性及可用性(這群人讓服務器全天候運轉)。其目標對立,彼此之間更是競爭關系。

這不禁令人想到當下的數(shù)據(jù)科學。通過實驗,數(shù)據(jù)科學家創(chuàng)造價值:用新方式建模、組合、轉換數(shù)據(jù)。同時,聘用數(shù)據(jù)科學家的技術組織更看重穩(wěn)定性。

這種分歧波及范圍廣泛:最新的Anaconda數(shù)據(jù)科學狀況報告顯示,認為自己能詮釋數(shù)據(jù)科學對其組織影響的受訪者不足一半(48%)。據(jù)估計,數(shù)據(jù)科學家創(chuàng)建的模型大多被束之高閣。我們目前沒有十分可行的方式,能在建模團隊及部署團隊間傳遞模型。數(shù)據(jù)科學家、開發(fā)者及落實二者工作的工程師有著截然不同的工具、限制及技能。

DevOps的出現(xiàn)旨在解決開發(fā)者和運營者之間的軟件僵局,并取得了極大成功:許多團隊部署新代碼的頻率從數(shù)月一次變?yōu)橐惶鞌?shù)次。現(xiàn)在面對的是機器學習和運營的對抗,MLOps這一為數(shù)據(jù)科學服務的DevOps原則閃亮登場。

DevOps二三事:用持續(xù)集成構建自動模型訓練系統(tǒng)的理論和實踐指南

圖源:unsplash

持續(xù)集成

DevOps既是理論,又是實踐,它包括:

  • 自動化一切事物
  • 快速獲得新想法的反饋
  • 減少工作流中的手動交接

在典型的數(shù)據(jù)科學項目中,存在如下應用:

  • 自動化一切事物。重復且可預測的部分數(shù)據(jù)處理、模型訓練及模型測試皆可自動化。
  • 快速獲得新想法的反饋。當數(shù)據(jù)、代碼或軟件環(huán)境發(fā)生變化時,在類生產環(huán)境下迅速對其進行測試(即,生產中有依賴項和限制的機器)。
  • 減少工作流中的手動交接。盡可能為數(shù)據(jù)科學家找尋模型測試的機會,切勿等到開發(fā)人員在生產環(huán)境下檢測模型效果再行動。

為實現(xiàn)以上目標,DevOps采用的標準是持續(xù)集成(continuous integration, CI)。關鍵在于,改變項目源代碼時(一般是通過git commits更改),軟件被自動創(chuàng)建并測試,每個行為都會得到反饋。通常,CI與創(chuàng)建新功能Git分支的軟件開發(fā)活動模型Git-flow配合使用。功能分支通過自動測試便可候選并入主分支。

DevOps二三事:用持續(xù)集成構建自動模型訓練系統(tǒng)的理論和實踐指南

CI在軟件開發(fā)過程中的示意圖

由此即可實現(xiàn)自動化——改變代碼觸發(fā)自動構建,測試緊隨其后。由于迅速得到測試結果,便可以得到快速反饋,因此,開發(fā)者能對代碼進行反復迭代。并且,由于一切皆為自動,無需等待他人反饋,實現(xiàn)零切換。

所以,我們?yōu)槭裁床皇褂靡汛嬖谟跈C器學習中的CI呢?我將部分歸因于文化,比如數(shù)據(jù)科學與軟件工程群體的低交叉性。

另一部分就是技術原因。比如,了解模型性能,需查看準確率、特異度和敏感度等指標。要了解模型的性能,就需要查看準確率、特異度和靈感度等指標。數(shù)據(jù)可視化(如混淆矩陣或損失圖)或許會對此有所幫助。所以,測試通過/失敗并不會阻礙反饋。若要了解模型是否得到改進,我們需要了解當前問題領域的知識,所以測試結果需要以高效且可人為詮釋的方式報道。

DevOps二三事:用持續(xù)集成構建自動模型訓練系統(tǒng)的理論和實踐指南

機器學習項目中的連續(xù)集成

持續(xù)集成系統(tǒng)如何運作?

現(xiàn)在,看看典型的CI系統(tǒng)如何運作。多虧了GitHub Actions和GitLab CI這類圖像界面清晰且為新手提供詳細操作文檔的工具,學習CI系統(tǒng)的門檻降至最低。由于GitHub Actions對開源項目完全免費,我們就用它舉例:

其運作方式如下:

(1) 建立一個GitHub倉庫。創(chuàng)建名為.github/workflows的目錄,在目錄中放置一個特殊的.yaml文件,其中包含要運行的腳本,如:

  1. $ python train.py 

(2) 更改項目庫內文件,git commit更新,然后提交到GitHub庫。

  1. # Create a new git branch for experimenting$ git checkout -b "experiment" 
  2. $ edit train.py# git add, commit, and push your changes 
  3. $ git add . && commit -m "Normalized features" 
  4. $ git push origin experiment 

(3) 檢測到推送,GitHub立刻在其中一臺計算機上運行.yaml文件的函數(shù)。

(4) GitHub彈出通知,是否成功運行函數(shù)。

DevOps二三事:用持續(xù)集成構建自動模型訓練系統(tǒng)的理論和實踐指南

在GitHub倉庫的操作選項卡中找到以上內

就這么簡單!只需更新代碼,并把更新提交到數(shù)據(jù)庫,工作流就自動執(zhí)行。

回到第一步提到的特殊的.yaml文件——快速看一個。隨意命名,文件后綴是.yaml即可,并將其儲存在.github/workflows中。如:

  1. # .github/workflows/ci.yamlname: train-my-model 
  2. on: [push]jobs: 
  3.    run: 
  4.       runs-on: [ubuntu-latest] 
  5.    steps: 
  6.       - uses: actions/checkout@v2 
  7.       - name: training 
  8.       run: | 
  9.          pip install -r requirements.txt 
  10.          python train.py 

指令多如云,但大多數(shù)都是從一個Action到另一個Action——大可照搬這份GitHubActions指南,記得在“運行”段填寫工作流就好。

若文件在項目庫中,只要GitHub檢測到代碼更新(通過推送變更),GitHub Actions便會部署Ubuntu服務器,嘗試執(zhí)行安裝需求的命令并運行Python腳本。請注意,項目倉庫中必須有工作流程所需文件——在這里為requirements.txt和train.py!

得到更好的反饋

自動訓練很酷,但對所有的結果來說,采用易于理解的格式也很重要。現(xiàn)在,GitHub Actions允許訪問純文本格式的服務器日志。

DevOps二三事:用持續(xù)集成構建自動模型訓練系統(tǒng)的理論和實踐指南

GitHub Actions日志的打印輸出示例

但了解模型性能是個棘手的活兒。模型和數(shù)據(jù)都是高維且非線性的——若無圖片,了解這二者太難了。

我可以展示一種將數(shù)據(jù)可視化放入CI循環(huán)的方法。近幾個月,我在Iterative.ai的團隊(做數(shù)據(jù)版本控制)一直在研究工具包,助力GitHub Actions和GitLab CI在機器學習項目中的使用,稱為持續(xù)機器學習(Continuous Machine Learning ,簡稱CML)。這是開源且免費的。

團隊的基本理念是:“用GitHub Actions訓練機器學習模型”。我們已經建立了一些函數(shù),可給出更詳細的報告而非一個成功/失敗的通知。CML有助于在報告中放置圖片和表格,如這個SciKit-learn生成的混淆矩陣:

DevOps二三事:用持續(xù)集成構建自動模型訓練系統(tǒng)的理論和實踐指南

在GitHub中點Pull Request即顯示此報告

為了制作報告,GitHub Actions執(zhí)行Python模型訓練腳本,用CML函數(shù)把模型準確率和混淆矩陣寫入markdown文件。然后CML把markdown文件傳到GitHub。

修改后的.yaml文件包含以下工作流(新添加的行以粗體突出顯示)。

  1. name: train-my-model 
  2. on: [push] 
  3. jobs:  
  4.    run:    
  5.       runs-on: [ubuntu-latest]    
  6.       container: docker://dvcorg/cml-py3:latest     
  7.       steps:      
  8.       - uses: actions/checkout@v2       
  9.       - name: training        
  10.         env:           
  11.            repo_token: ${{secrets.GITHUB_TOKEN }}    
  12.         run: |      
  13.   
  14.            # train.py outputs metrics.txtand confusion_matrix.png  
  15.            pip3 install -rrequirements.txt          
  16.            python train.py                    
  17.         
  18.            # copy the contents ofmetrics.txt to our markdown report 
  19.            cat metrics.txt >>report.md                     # addour confusion matrix to report.md 
  20.            cml-publishconfusion_matrix.png --md >> report.md            # send the report to GitHub fordisplay  
  21.            cml-send-comment report.md 

記住,.yaml現(xiàn)在包含更多詳細配置信息,例如特殊的Docker容器和環(huán)境變量,以及一些要運行的新代碼。每個CML項目中的容器及環(huán)境變量的詳細信息都是固定的,用戶無需操作,只關注代碼就行。

將這些CML函數(shù)添加到工作流中,我們便在CI系統(tǒng)中創(chuàng)建了更完整的反饋循環(huán):

  • 建立一個Git分支,在分支上更新代碼。
  • 自動訓練模型并生成度量(準確率)和可視化(混淆矩陣)。
  • 將這些結果嵌入到Pull Request中的可視報告。

當你和隊友還在考慮更新是否有助于實現(xiàn)建模目標時,各種可參照的可視化表盤就已經新鮮出爐了。另外,該報告通過Git連接到確切項目版本(數(shù)據(jù)和代碼)、訓練所用服務器及服務器的日志。無比詳細!工作空間不再總是漂浮著與代碼無關的圖表了。

這就是CI在數(shù)據(jù)科學項目中的基本概念。明確一下,這只是使用CI的最簡單的實例。實際操作中很可能遇到各種更為復雜的情況。CML也有一些特性,可幫你使用儲存在GitHub庫之外的大數(shù)據(jù)集(使用DVC)并在云端進行訓練,而非在默認的GitHub Actions服務器訓練。這意味著能使用GPU和其它專業(yè)設置。

例如,我用GitHub Actions創(chuàng)建一個項目以部署EC2 GPU,然后訓練神經風格轉換模型。這是我的CML報告:

DevOps二三事:用持續(xù)集成構建自動模型訓練系統(tǒng)的理論和實踐指南

還可使用自己的Docker容器,進一步模擬

CI對機器學習的最后思考

總結一下,DevOps不是一種特定技術。它既是理論,又是一系列原則和實踐,用于徹底重建開發(fā)軟件過程,其高效性在于解決了團隊工作及測試新代碼的系統(tǒng)性瓶頸。

未來,數(shù)據(jù)科學愈加成熟,掌握在機器學習項目中運用DevOps原則的人就更加炙手可熱——薪資可觀,組織影響力大。持續(xù)集成是DevOps的基礎,也是已知的建立具有可靠自動化、快速測試和團隊自治文化的最有效方法之一。

GitHub Actions或GitLab CI之類的系統(tǒng)可實現(xiàn)CI。可使用這些服務構建自動模型訓練系統(tǒng)。其益處頗多:

  • 代碼、數(shù)據(jù)、模型和訓練基礎(硬軟件環(huán)境)都是git版本。
  • 自動化工作、進行高頻測試并得到迅速反饋(使用CML即可拿到可視化報告)。從長期看,這無疑會加速項目發(fā)展。
  • CI系統(tǒng)讓每個團隊成員都能看到工作進展。大家無需絞盡腦汁搜集最佳運行的代碼、數(shù)據(jù)及模型。

[[336832]]

圖源:unsplash

一旦入了坑,一鍵git commit就能自動進行模型訓練、記錄并報告,絕對讓你樂翻天。行動起來,感覺棒極了!

 

責任編輯:趙寧寧 來源: 今日頭條
相關推薦

2015-09-29 10:08:26

DockerJava持續(xù)集成

2014-04-24 11:36:43

DevOps運維開發(fā)

2018-11-20 08:00:00

持續(xù)集成持續(xù)部署Git代碼倉庫

2020-06-23 10:41:08

云計算DevOps持續(xù)集成

2021-01-18 14:51:34

JenkinsNginx前端

2017-04-28 08:57:58

持續(xù)集成DevOpsC#

2017-02-27 18:35:23

集成交付部署

2023-01-16 08:00:00

2016-08-05 17:19:37

持續(xù)集成持續(xù)交付系統(tǒng)運維

2021-07-23 10:17:17

網絡攻擊存儲供應鏈

2017-10-19 09:47:55

容器化微服務集成

2023-02-20 08:02:38

智能自動化交付

2023-03-19 11:47:57

Taro小程序持續(xù)集

2017-03-02 15:40:12

iOSAndroidJenkins

2014-11-20 13:49:15

2021-10-19 15:01:26

API檢測工具網絡安全

2022-04-20 09:00:00

軟件開發(fā)自動化測試工具

2019-04-18 10:35:30

持續(xù)集成工具Buddy

2021-03-31 09:00:00

管道集成工具

2013-08-07 14:19:30

禁用
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美簧片| 精品伊人久久 | 亚洲欧美一区二区三区1000 | 超碰成人在线观看 | 91视频免费视频 | 欧美成人猛片aaaaaaa | 青青草av| 日韩欧美在线观看 | 91xxx在线观看| 国产午夜精品久久久久 | 国产精品日韩高清伦字幕搜索 | 怡红院免费的全部视频 | 国内精品久久久久久久影视简单 | 91久久电影| 亚洲一区二区在线电影 | 极品久久 | 日韩免费av网站 | 99久久99热这里只有精品 | www.久久艹 | 国产精品区二区三区日本 | 伊人网综合在线观看 | 国产亚洲精品美女久久久久久久久久 | 国产精品五月天 | 国产九一精品 | 国产yw851.c免费观看网站 | 一区在线播放 | 亚洲精品久久久一区二区三区 | 午夜看电影在线观看 | 91xxx在线观看 | 日韩高清在线观看 | 亚洲精品视频免费观看 | 91欧美精品成人综合在线观看 | 精品国产三级 | 色婷婷一区二区三区四区 | 国产激情视频 | 日韩毛片中文字幕 | 中文字幕免费中文 | 九九热这里只有精品在线观看 | 久久久久综合 | 人妖av | 成人午夜网站 |