Categories
程式開發

不要再讓數據科學家管理Kubernetes集群了


本文內容基於我對機器學習團隊的觀察,而不是對該行業的學術調查。我是Cortex的貢獻者,這是一個用於在生產環境中部署模型的開源平台。生產級機器學習有一個組織性的問題,這是因為它相對還比較新。雖然更成熟的領域(例如Web開發)經過幾十年的發展已經有了最佳實踐,但是生產級機器學習還沒有。如果我們希望未來以ML為基礎的軟件真正普及開來,那麼消除基礎設施瓶頸就至關重要——要做到這一點,我們需要將其真正的專門化,讓數據科學家專注於數據科學。

本文最初發佈於****Towards Data Science****博客,經原作者授權由InfoQ中文站翻譯並分享。

聲明:以下內容基於我對機器學習團隊的觀察,而不是對該行業的學術調查。我的背景:我是Cortex的貢獻者,這是一個用於在生產環境中部署模型的開源平台。

生產級機器學習有一個組織性的問題,這是因為它相對還比較新。雖然更成熟的領域(例如Web開發)經過幾十年的發展已經有了最佳實踐,但是生產級機器學習還沒有。

舉個例子,假設你的任務是為你所在的初創公司組建一個產品工程組織,而這家公司是一個開發Web應用程序的公司。即使你沒有組建團隊的經驗,你也可以找到成千上萬的文章和書籍,它們會告訴你這個工程組織應該採用什麼結構以及如何發展。

現在想像一下,你在一家剛剛開始涉足機器學習的公司。你已經聘請了一名數據科學家來領導最初的工作,結果也不錯。隨著機器學習在產品中的應用越來越深入,隨著數據科學家的職責迅速增加,機器學習團隊顯然需要發展壯大。

在這種情況下,並沒有那麼多關於如何構建一個生產級機器學習團隊的文章和書籍。

這不是一個不常見的場景,經常出現的情況是,機器學習組織的新職責—特別是基礎設施—被分配給了數據科學家。

這是個錯誤。

機器學習和機器學習基礎設施的區別

在這一點上,平台和產品工程師的區別已經很好理解了。類似地,數據分析師和數據工程師顯然是不同的角色。

許多公司的機器學習仍然缺乏這種專業化。

了解機器學習和機器學習基礎設施之間的區別很重要,這有助於了解它們所需的工作和工具。

為了設計和訓練新模型,數據科學家需要:

  • 把時間花在Notebook、分析數據、做實驗上。
  • 考慮類似數據保健和為數據集選擇正確的模型架構這樣的問題。
  • 使用Python、R、Swift或Julia等編程語言。
  • 對像PyTorch或TensorFlow這樣的機器學習框架有自己的見解。

換句話說,他們的職責、技能和工具將圍繞著操縱數據開發模型,他們的最終輸出將是可以提供最準確預測的模型。

基礎設施方面則完全不同。

將模型投入生產應用的一種常見方法是將其作為微服務部署到雲中。要將模型部署為生產用API,工程師需要:

  • 在配置文件、終端和雲提供商的控制台之間分配他們的時間,設法優化穩定性、延遲和成本。
  • 考慮實例的自動擴展、在API不崩潰的情況下更新模型以及在GPU上提供推斷服務等問題。
  • 使用Docker、Kubernetes、Istio、Flask等工具,以及他們的雲提供商提供的任何服務/API。

關於機器學習和機器學習基礎設施方面的工作,下面是一個簡單的可視化:

不要再讓數據科學家管理Kubernetes集群了 1

機器學習 vs 機器學習基礎設施

直觀地說,數據科學家應該處理左邊的圓,而不是右邊的圓,這是有道理的。

讓非專業人員管理基礎設施有什麼問題嗎?

我們不妨做個假設。假設你必須指派某人來管理你的機器學習基礎設施,但是你又不想讓某人全職參與其中。你只有兩個選擇:

  • 一個是數據科學家,因為他們熟悉機器學習。
  • 一個是DevOps工程師,因為他們熟悉一般的基礎設施。

這兩種選擇都有問題。

首先,數據科學家應該盡可能多的把時間花在他們最擅長的數據科學上。當然,這並不是說學習基礎設施超出了他們的工作範圍,只是基礎設施和數據科學都是全職工作,將數據科學家的時間分配到這兩項工作中會降低產出的質量。

其次,你的組織需要專門負責機器學習基礎設施的人員。在生產環境中提供模型服務不同於託管Web應用程序。你需要一個專門的人來擔任此角色,他可以在組織中倡導機器學習基礎設施。

這種倡導是至關重要的。我了解了很多機器學習組織,你會驚訝地發現,他們的瓶頸往往不是來自技術性挑戰,而是來自組織性挑戰。

例如,我曾見過需要使用GPU進行推理的機器學習團隊——像GPT-2這樣的大型模型基本上都要求合理的延遲時間——但他們卻無法獲得GPU,因為他們的基礎設施是由更廣泛的DevOps團隊管理的,而這些團隊不想讓自己承擔成本。

有專人致力於你的機器學習基礎設施,意味著你不僅有一個不斷改進基礎設施的團隊成員,還意味著你有一個能夠滿足你的團隊需求的倡導者。

那麼誰應該管理基礎設施?

機器學習基礎設施工程師。

現在,不要對這種官方的頭銜有異議,要知道,機器學習還處於初級階段,在頭銜問題上,它還屬於“狂野的西部”。不同的公司可能會有不同的叫法:

  • 機器學習基礎設施工程師
  • 數據科學平台工程師
  • ML生產工程師

我們已經可以看到成熟的機器學習組織招聘這個職位,包括Spotify:

不要再讓數據科學家管理Kubernetes集群了 2

還有Netflix:

不要再讓數據科學家管理Kubernetes集群了 3

隨著諸如Gmail的Smart Compose、Uber的ETA預測和Netflix的內容推薦等基於ML的功能在軟件中的應用越來越普遍,機器學習基礎設施變得越來越重要。

如果我們希望未來以ML為基礎的軟件真正普及開來,那麼消除基礎設施瓶頸就至關重要——要做到這一點,我們需要將其真正的專門化,讓數據科學家專注於數據科學。

英文原文:Stop making data scientists manage Kubernetes clusters