GitHub熱門項(xiàng)目:生產(chǎn)級深度學(xué)習(xí)項(xiàng)目如何構(gòu)建?
在生產(chǎn)中部署深度學(xué)習(xí)模型可能很有挑戰(zhàn)性,因?yàn)檫@遠(yuǎn)遠(yuǎn)不僅是訓(xùn)練出具有良好性能的模型就足夠了。為了部署生產(chǎn)級深度學(xué)習(xí)系統(tǒng),還需要正確設(shè)計(jì)和開發(fā)一眾組件。本文介紹了 GitHub 上的一個工程指南,用于構(gòu)建將部署在實(shí)際應(yīng)用程序中的生產(chǎn)級深度學(xué)習(xí)系統(tǒng)。
在這篇文章中,我們將詳細(xì)介紹生產(chǎn)級深度學(xué)習(xí)系統(tǒng)的各個模塊,并推薦適合每個組件的工具集和框架,以及實(shí)踐者提供的最佳實(shí)踐。


1. 數(shù)據(jù)管理
1.1. 數(shù)據(jù)源
開源數(shù)據(jù) (好的開端,但并非優(yōu)勢)、數(shù)據(jù)增強(qiáng)以及合成數(shù)據(jù)
1.2. 標(biāo)注
標(biāo)注的勞動力來源:
- 眾包
 - 服務(wù)公司:FigureEight
 - 雇傭標(biāo)注員
 
標(biāo)注平臺:
- Prodigy:一種由主動學(xué)習(xí)(active learning)(由 Spacy 開發(fā)人員開發(fā))、文本和圖像支持的注釋工具。
 - HIVE:用于計(jì)算機(jī)視覺的人工智能即服務(wù)平臺。
 - Supervisely:完整的計(jì)算機(jī)視覺平臺。
 - Labelbox:計(jì)算機(jī)視覺。
 - Scale 人工智能數(shù)據(jù)平臺(計(jì)算機(jī)視覺和自然語言處理)。
 
1.3. 存儲
數(shù)據(jù)存儲選項(xiàng):
(1) 對象存儲:存儲二進(jìn)制數(shù)據(jù)(圖像、聲音文件、壓縮文本)
- Aamzon S3
 - Ceph 對象存儲
 
(2) 數(shù)據(jù)庫:存儲元數(shù)據(jù)(文件路徑、標(biāo)簽、用戶活動等)。
- Postgres 對于大多數(shù)應(yīng)用程序來說都是正確的選擇,它提供了同類最佳的 SQL 和對非結(jié)構(gòu)化 JSON 的強(qiáng)大支持。
 
(3) 數(shù)據(jù)湖:用于聚合無法從數(shù)據(jù)庫獲得的特征(例如日志)。
- Amazon Redshift
 
(4) 特征存儲:機(jī)器學(xué)習(xí)特征的存儲和訪問。
- FEAST(Google 云,開源)
 - Michelangelo(Uber)
 - 在訓(xùn)練期間:將數(shù)據(jù)復(fù)制到本地或集群文件系統(tǒng)中。
 
1.4. 版本控制
- DVC:用于機(jī)器學(xué)習(xí)項(xiàng)目的開源版本控制系統(tǒng)
 - Pachyderm:用于數(shù)據(jù)的版本控制
 - Dolt:用于 SQL 數(shù)據(jù)庫的版本控制
 
1.5. 處理
生產(chǎn)模型的訓(xùn)練數(shù)據(jù)可能來自不同的源,包括數(shù)據(jù)庫和對象存儲中的存儲數(shù)據(jù)、日志處理和其他分類器的輸出。
任務(wù)之間存在依賴關(guān)系,每個人物都需要在其依賴關(guān)系完成后才能啟動。例如,對新的日志數(shù)據(jù)進(jìn)行訓(xùn)練,需要在訓(xùn)練之前進(jìn)行預(yù)處理。因此,工作流在這方面變得相當(dāng)重要。
工作流:
- Airflow (最常用的)
 

2. 開發(fā)、訓(xùn)練與評估
2.1. 軟件工程
編輯器:
- Vim
 - Emacs
 - VS Code(作者推薦):內(nèi)置 Git 暫存和顯示文件差異、Lint 代碼掃描、通過 SSH 遠(yuǎn)程打開項(xiàng)目。
 - Jupyter Notebooks:作為項(xiàng)目的起點(diǎn)很好,但它難以實(shí)現(xiàn)規(guī)?;?。
 - Streamlit:具有小程序的交互式數(shù)據(jù)科學(xué)工具。
 
建議:
對于個人或初創(chuàng)企業(yè):
- 開發(fā):一臺 4 核圖靈架構(gòu)的計(jì)算機(jī)。
 - 訓(xùn)練 / 評估:使用相同的 4 核 GPU 計(jì)算機(jī)。在運(yùn)行許多實(shí)驗(yàn)時,可以購買共享服務(wù)器或使用云實(shí)例。
 
對于大型公司:
- 開發(fā):為每位機(jī)器學(xué)習(xí)科學(xué)家購買一臺 4 核圖靈架構(gòu)計(jì)算機(jī),或者讓他們使用 V100 實(shí)例。
 - 訓(xùn)練 / 評估:在正確配置和處理故障的情況下使用云實(shí)例。
 
2.2. 資源管理
為程序分配免費(fèi)資源:
資源管理選項(xiàng):
- 舊式集群作業(yè)調(diào)度程序(如,Slurm 工作負(fù)載管理器)
 - Docker + Kubernetes
 - Kubeflow
 - Polyaxon(付費(fèi)功能)
 
2.3. 深度學(xué)習(xí)框架
除非有充分的理由不這樣做,否則請使用 TensorFlow/Keras 或 PyTorch。下圖顯示了不同框架在開發(fā)和 生產(chǎn)方面的比較。

2.4. 實(shí)驗(yàn)管理
開發(fā)、訓(xùn)練和評估策略:永遠(yuǎn)從簡單開始。在小批量上訓(xùn)練一個小型模型,只有在它能起作用的情況下,才擴(kuò)展到更大的數(shù)據(jù)和模型,并進(jìn)行超參數(shù)調(diào)優(yōu)。
實(shí)驗(yàn)管理工具:
- Tensorboard:提供了機(jī)器學(xué)習(xí)實(shí)驗(yàn)所需的可視化和工具。
 - Losswise(用于機(jī)器學(xué)習(xí)的監(jiān)控)
 - Comet:讓你可以跟蹤機(jī)器學(xué)習(xí)項(xiàng)目上的代碼、實(shí)驗(yàn)和結(jié)果。
 - Weights & Biases:通過簡單的協(xié)作,記錄并可視化研究的每個細(xì)節(jié)。
 - MLFlow Tracking:用于記錄參數(shù)、代碼版本、指標(biāo)和輸出文件,以及結(jié)果的可視化。
 
2.5. 超參數(shù)調(diào)優(yōu)
Hyperas:用于 Keras 的 hyperopt 的簡單包裝器,使用簡單的模板符號定義要調(diào)優(yōu)的超參數(shù)范圍。SIGOPT:可擴(kuò)展的企業(yè)級優(yōu)化平臺。Ray-Tune:可擴(kuò)展的分布式模型選擇研究平臺(專注于深度學(xué)習(xí)和深度強(qiáng)化學(xué)習(xí))。Sweeps from Weights & Biases:參數(shù)并非由開發(fā)人員顯式指定,而是由機(jī)器學(xué)習(xí)模型來近似和學(xué)習(xí)的。
2.6. 分布式訓(xùn)練
數(shù)據(jù)并行性:當(dāng)?shù)鷷r間過長就使用它(TensorFlow 和 PyTorch 均支持)。
模型并行性:當(dāng)模型不適合單 GPU 的情況下就是用它。
其他解決方案:
- Ray
 - Horovod
 
3. 故障排除『有待完善』
4. 測試與部署
4.1. 測試與 CI/CD
與傳統(tǒng)軟件相比,機(jī)器學(xué)習(xí)生產(chǎn)軟件需要更多樣化的測試套件:

單元測試和集成測試
測試類型:
- 訓(xùn)練系統(tǒng)測試:測試訓(xùn)練管道。
 - 驗(yàn)證測試:在驗(yàn)證集上測試預(yù)測系統(tǒng)。
 - 功能測試。
 - 持續(xù)集成:在將每個新代碼更改推送到倉庫后運(yùn)行測試。
 
用于持續(xù)集成的 SaaS:
- CircleCI、Travis
 - Jenkins、Buildkite
 
4.2. 網(wǎng)絡(luò)部署
(1)由 預(yù)測系統(tǒng) 和 服務(wù)系統(tǒng) 組成
- 在考慮規(guī)模的情況下為預(yù)測服務(wù)。
 - 使用 REST API 為預(yù)測 HTTP 請求提供服務(wù)。
 - 調(diào)用預(yù)測系統(tǒng)進(jìn)行響應(yīng)
 - 預(yù)測系統(tǒng):處理輸入數(shù)據(jù),進(jìn)行預(yù)測。
 - 服務(wù)系統(tǒng)(Web 服務(wù)器):
 
(2)服務(wù)選項(xiàng):
- Docker
 - Kubernetes (現(xiàn)在最流行)
 - MESOS
 - Marathon
 - 通過 模型服務(wù) 解決方案部署。
 - 將代碼部署為“無服務(wù)器函數(shù)”。
 
(3)模型服務(wù):
- Tensorflow 服務(wù)
 - MXNet Model 服務(wù)器
 - Clipper (Berkeley)
 - SaaS 解決方案 (Seldon,算法)
 - 專門針對機(jī)器學(xué)習(xí)模型的網(wǎng)絡(luò)部署。
 - 用于 GPU 推理的批處理請求。
 - 框架:Tensorflow 服務(wù)、MXNet Model 服務(wù)器、Clipper、SaaS 解決方案 (Seldon,算法)
 
(4)決策:
- TensorFlow 服務(wù)或 Clipper
 - 自適應(yīng)批處理很有用。
 - 如果 CPU 推理滿足要求,則更可取。
 - 通過添加更多的服務(wù)器或無服務(wù)器進(jìn)行擴(kuò)展。
 - CPU 推理:
 - GPU 推理:
 
4.3 Service Mesh 和 Traffic Routing
從單片應(yīng)用程序過渡到分布式微服務(wù)體系結(jié)構(gòu)可能具有挑戰(zhàn)性。
服務(wù)網(wǎng)格(由微服務(wù)網(wǎng)絡(luò)組成)降低了此類部署的復(fù)雜性,并減輕了開發(fā)團(tuán)隊(duì)的壓力。
Istio:一種服務(wù)網(wǎng)格技術(shù),簡化已部署服務(wù)網(wǎng)絡(luò)的創(chuàng)建,而服務(wù)中的代碼更改很少或沒有。
4.4. 監(jiān)控
目的:
- 針對停機(jī)時間、錯誤和分發(fā)變化的警報。
 - 抓取服務(wù)和數(shù)據(jù)回歸。
 
此外,云提供商的解決方案也是相當(dāng)不錯。

4.5. 在嵌入式和移動設(shè)備上部署
主要挑戰(zhàn):內(nèi)存占用和計(jì)算限制
解決方案:
- DistillBERT (用于自然語言處理)
 - MobileNets
 - 量化
 - 縮小模型尺寸
 - 知識蒸餾
 
嵌入式和移動框架:
- Tensorflow Lite
 - PyTorch Mobile
 - Core ML
 - ML Kit
 - FRITZ
 - OpenVINO
 
模型轉(zhuǎn)換:
- 開放神經(jīng)網(wǎng)絡(luò)交換(Open Neural Network Exchange,ONNX):用于深度學(xué)習(xí)模型的開源格式。
 
4.6. 一體化解決方案
- Tensorflow Extended (TFX)
 - Michelangelo (Uber)
 - Google Cloud AI Platform
 - Amazon SageMaker
 - Neptune
 - FLOYD
 - Paperspace
 - Determined AI
 - Domino data lab
 

Tensorflow Extended (TFX)

Airflow and KubeFlow ML Pipelines
















 
 
 












 
 
 
 