本文發表於一年多前。舊文章可能包含過時內容。請檢查頁面中的資訊自發布以來是否已變得不正確。

使用 Kubernetes 和 TensorFlow Serving 擴充套件神經網路影像分類

2011 年,Google 開發了一款內部深度學習基礎設施,名為 DistBelief,它讓 Google 員工能夠構建越來越大的神經網路,並將訓練擴充套件到數千個核心。去年底,Google 推出了 TensorFlow,這是其第二代機器學習系統。TensorFlow 通用、靈活、可移植、易於使用,最重要的是,它與開源社群共同開發。

將機器學習引入您的產品的過程包括建立和訓練資料集模型,然後將模型推送到生產環境以處理請求。在本部落格文章中,我們將向您展示如何使用 KubernetesTensorFlow Serving(一個用於機器學習模型的高效能開源服務系統),以滿足您應用程式的擴充套件需求。

讓我們以影像分類為例。例如,假設您的應用程式需要能夠正確識別一組類別中的影像。例如,給定下面可愛的幼犬圖片,您的系統應將其分類為金毛獵犬。

| | | 圖片來源:維基百科 |

您可以使用在 ImageNet 資料集資料上訓練的 Inception-v3 模型來使用 TensorFlow 實現影像分類。此資料集包含影像及其標籤,這使得 TensorFlow 學習器能夠訓練一個可供您的應用程式在生產環境中使用的模型。

一旦模型經過訓練和匯出TensorFlow Serving 就會使用該模型進行推理——根據其客戶端提供的新資料進行預測。在我們的示例中,客戶端透過 gRPC 提交影像分類請求,gRPC 是 Google 開發的一個高效能開源 RPC 框架。

推理可能非常消耗資源。我們的伺服器執行以下 TensorFlow 圖來處理收到的每個分類請求。Inception-v3 模型擁有超過 2700 萬個引數,每次推理執行 57 億次浮點運算。

| | | Inception-v3 示意圖 |

幸運的是,Kubernetes 可以在這裡幫助我們。Kubernetes 使用其外部負載均衡器將推理請求處理分佈到整個叢集中。叢集中的每個Pod 都包含一個 TensorFlow Serving Docker 映象,其中包含基於 TensorFlow Serving 的 gRPC 伺服器和訓練好的 Inception-v3 模型。該模型表示為描述 TensorFlow 圖形形狀、模型權重、資產等的一組檔案。由於所有內容都整齊地打包在一起,我們可以使用 Kubernetes 複製控制器動態擴充套件複製 Pod 的數量,以跟上服務需求。

為了幫助您親自嘗試,我們編寫了一個分步教程,向您展示如何建立 TensorFlow Serving Docker 容器以提供 Inception-v3 影像分類模型,配置 Kubernetes 叢集並對其執行分類請求。我們希望這將使您更容易將機器學習整合到您自己的應用程式中,並使用 Kubernetes 進行擴充套件!要了解有關 TensorFlow Serving 的更多資訊,請訪問 tensorflow.github.io/serving