我在2020年作為資料科學家學習的8種新工具 - kdnuggets

banq發表於2021-01-17

儘管2020年是充滿挑戰的一年,但我能夠使用到遠端工作的過渡來探索新工具來擴充套件我的資料科學技能。這一年,我從資料科學家過渡到應用科學家,不僅負責資料產品的原型製作,還將這些系統投入生產並監控系統的執行狀況。
我曾經使用過Docker等工具來對應用程式進行容器化,但是我沒有將容器部署為可擴充套件的,負載平衡的應用程式的經驗。雖然我在2020年學到的許多技術通常與工程而非資料科學相關聯,但學習這些工具以學習構建端到端資料產品可能會很有用。對於在初創公司工作的資料科學家來說尤其如此。
 

MLflow
 MLflow是用於模型生命週期管理的開源框架。該專案的目標是提供支援ML模型的開發,服務和監視的模組。我將從2020年開始使用其中兩個元件:MLflow跟蹤和模型登錄檔。跟蹤模組使資料科學家能夠記錄不同模型管道的效能並視覺化結果。例如,可以嘗試使用不同的特徵縮放方法,迴歸模型和超引數組合,並檢視哪種管道配置產生了最佳結果。我在Databricks環境中使用了該環境,該環境為模型選擇提供了有用的視覺化。我還開始使用MLflow中的登錄檔模組來儲存模型,培訓筆記本在其中訓練和儲存模型,模型應用程式筆記本檢索並應用模型。模型登錄檔中的有用功能之一是部署之前的能力階段模型。登錄檔可以維護不同的模型版本,並且如果檢測到問題,則可以還原到先前的版本。我計劃在2021年探索MLFlow中的更多模組,包括模型服務。
 

Kubernetes
 Kubernetes是一個用於容器編排的開源平臺。它使資料科學家能夠將容器部署為可伸縮的Web應用程式,並提供各種配置選項以在Web上公開服務。從頭開始設定Kubernetes部署可能涉及相當多的工作,但是雲平臺提供了Kubernetes的託管版本,可以輕鬆地使用該平臺。對於想要學習Kubernetes的資料科學家,我的建議是使用Google Kubernetes Engine(GKE),因為它提供了快速的叢集啟動時間,並且擁有豐富的開發人員經驗。
Kubernetes為什麼如此有用?因為它使團隊能夠分離應用程式開發和應用程式部署方面的問題。資料科學家可以構建一個模型服務容器,然後將其交給工程團隊,以將該服務作為可擴充套件的Web應用程式公開。在GCP中,它還與系統無縫整合,以實現負載平衡和網路安全。但是,使用GKE等託管服務,使用Kubernetes的障礙就更少了,資料科學家應該在該平臺上獲得動手經驗。這樣做使資料科學家能夠構建端到端資料產品。
 

NoSQL
 雖然我在整個資料科學生涯中都使用過各種資料庫,但直到2020年我才開始探索NoSQL資料庫。NoSQL包括以低延遲操作實現鍵值儲存的資料庫。例如,Redis是一個記憶體資料庫,提供亞毫秒級的讀取。當構建實時系統時,由於Web服務接收到資料,因此您需要更新使用者配置檔案時,此效能很有用。例如,您可能需要更新描述使用者活動的特徵向量的屬性,該特徵向量作為輸入傳遞到攪動模型並在HTTP post命令的上下文中應用。為了構建實時系統,對於資料科學家來說,接觸NoSQL資料庫至關重要。要學習諸如Redis之類的技術,使用mock庫也是很有用的  庫以測試API,然後再部署到雲中。
 

OpenRTB
 OpenRTB是實時廣告拍賣和廣告投放的規範。該規範可在諸如Google Ad Exchange之類的交易所中使用,以使銷售廣告資源的釋出商與希望投放廣告的買方聯絡起來。我使用此協議為程式化使用者獲取實現了一個研究平臺。儘管此規範不能廣泛地應用於資料科學,但對於資料科學家瞭解如何構建可以實現標準化介面的系統很有用。對於OpenRTB,這涉及構建一個Web服務,該服務接收帶有JSON負載的HTTP帖子,並返回帶有定價詳細資訊的JSON響應。如果您有興趣啟動並使用OpenRTB規範,則Google提供了一個 protobuf 實現。
 

Java Web框架
我決定用Java編寫OpenRTB研究平臺,因為我對這種語言有最豐富的經驗。但是,Rust和Go都是Java用於構建OpenRTB系統的絕佳選擇。由於選擇了Java,因此我需要選擇一個Web框架來為我的應用程式實現端點。十多年前,我使用Jetty庫用Java構建簡單的Web應用程式時,我決定探索基於基準測試的新工具。我從Rapidoid 庫開始 ,它是一個輕量級且快速的框架,用於使用Java構建Web應用程式。但是,當我在響應Web請求時開始向Redis新增呼叫時,我發現我需要從非託管方法轉移到託管方法,以使用Rapidoid服務請求。然後我嘗試了 Undertow 支援阻塞IO,並在我的基準測試中發現它的效能優於Rapidoid。儘管資料科學家通常不使用Java編寫程式,但瞭解如何嘗試不同的Web框架(例如在gunicorn和uWSGI之間進行選擇以部署Python Web服務)的學習可能會很有用。
 

HTTPS
現在,實現OpenRTB協議需要透過安全的HTTP服務流量。為Web服務啟用HTTPS涉及透過DNS將Web服務設定為命名端點,並使用簽名證照來建立端點的身份。保護由GKE託管的GCP上的端點相對簡單。使用節點埠和服務入口公開服務後,您需要為服務的IP地址設定DNS條目,然後使用GCP託管證照啟用HTTPS。
由於在保護服務安全方面有些微妙之處,因此對於資料科學家學習建立HTTPS端點很有用。如果不需要端到端HTTPS(例如OpenRTB),則可以在Kubernetes叢集中的負載均衡器和Pod之間內部使用HTTP,那麼部署會更容易。如果需要端到端HTTPS,例如使用OAuth的Web服務,則Kubernetes配置會稍微複雜一點。
 

負載均衡
 為了擴充套件到OpenRTB的Web流量,我需要使用負載平衡來處理每秒超過10萬個Web請求(QPS)。Kubernetes提供了可擴充套件服務於Web請求的Pod數量的基礎架構,但是也有必要以一種在整個叢集中平均分配請求的方式配置叢集。Kubernetes有一個 未解決的問題 ,使用長期連線會導致跨Pod負載不均衡,這是OpenRTB系統的推薦配置。我用的是 原生容器 GKE中提供了負載平衡功能來緩解此問題。對於大型組織中的資料科學家而言,開始進行負載平衡並不常見,但是對於擁有擁有大量請求量的端到端資料產品的初創企業或團隊而言,這是一項有用的技能。
 

日誌
部署Web應用程式還涉及為系統設定監視,以確定是否發生任何問題。使用GCP構建應用程式時,StackDriver提供了一個受管系統,用於記錄訊息,報告自定義指標和設定警報。我能夠使用該系統監視正常執行時間,並在發生事件時向Slack和SMS傳送警報。對於資料科學家來說,接觸日誌庫非常有用,以確保部署到雲的系統按預期執行。
​​​​​​​

相關文章