容器成運行機器學習模型的絕佳工具?

機器學習(ML)和人工智慧(AI)現在是IT行業的熱門話題,當然,容器也實屬熱門話題之一。在這篇文章中,將兩種東西融合在一起,看看是否有協同作用。

目標

雖然純粹的實驗總是很有趣,但至少有一些目標的設定可能會更有針對性。對於這次的實驗,設定了以下目標:

·了解一般ML和TensorFlow

·看看ML和容器之間是否有協同作用

·在Kontena上部署正在運行的ML解決方案

在過程中,添加了一個額外的「延伸」的目標,學習一點圍棋。設想的最終目標如下:

大的想法主要是三重的:

1.有一個簡單的使用API,用戶可以發送一個JPG圖片進行分類

2.在多個實例上運行ML模型,以便在需要時進行擴展處理

3.遵循微服務模式

所有的代碼都可以在https://github.com/jnummelin/tensorflow-inception-example上找到。

Advertisements

TensorFlow

TensorFlow是一個使用數據流圖進行數值計算的開源軟體庫。圖節點表示數學運算,而圖邊表示在它們之間流動的多維數據陣列(張量)。這種靈活的架構允許在不重寫代碼的情況下將計算部署到桌面、伺服器或移動設備上的一個或多個CPU或GPU。

非常簡單,使用TensorFlow來訓練一套訓練數據的計算機模型。一旦模型被訓練,它可以被用來分析尚未知的數據。分析可以是例如圖像分類。一般來說,模型可以預測輸入數據與訓練模型中某些「已知」模式的匹配程度。

在這篇文章中,不會深入探討如何訓練模型,因為這需要更深入地理解機器學習的概念以及對TensorFlow的深入了解。 TensorFlow人員已經準備好模型訓練的好教程,但仍需要檢查一下。一個小建議,你可以看看HBO的矽谷是如何建立起他們著名的識別熱狗的移動應用的程序。

Advertisements

一旦TensorFlow模型建立起來,它可以很容易地使用,而不需要任何沉重的後端伺服器。

TensorFlow模型和容器

實驗的目標之一是找出機器學習和容器之間是否有協同作用。從作者的角度來看事實如此。

TensorFlow允許導出預先訓練好的模型,稍後在其他地方使用。這使得甚至可以在移動設備上使用ML模型來查看圖片是否包含熱狗。這也使容器真正成為運送和運行機器學習模型的絕佳工具。

使用容器的一個看似不錯的方法是使用Docker的新的多階段構建。

第一步,命名模型構建器,下載一個預先訓練的模型檢查點。然後輸出模型供TensorFlow服務系統使用。

第二步將準備好的模型數據從第一步複製到圖中,以供其服務。所以最終的輸出是一個Docker鏡像,其中包含了預先打包好的所有東西,所以可以用一個docker run命令為我們的機器學習模型服務。從機器學習新手的角度來看,使用單個命令運行機器學習聽起來相當不錯。

可以使用現成的基礎鏡像作為起點,以節省安裝TensorFlow軟體包的一些工作。這些資源可以在https://github.com/bitnami/bitnami-docker-tensorflow-serving和https://github.com/bitnami/bitnami-docker-tensorflow-inception中找到。

API

TensorFlow Serving使用grpc API來為模型服務。由於一般機器學習的複雜性,API也有些複雜。至少它不適合任何隨機客戶端程序,以輕鬆發送jpg圖像進行分類。使用grpc API將意味著編譯protobuf IDL併發出複雜的請求。所以我認為這個解決方案確實需要一個更合適的API,可以通過網頁發布一個圖像,並獲得分類結果。

如上所述,最終還添加了一個新的目標:學習一點圍棋遊戲。 Go進入了API目標列表,這樣編寫一個接收jpg圖像的API,將其稱為grpc 並進行分類。一如既往,理論和實踐是兩回事。 API本身實際上很容易啟動和運行。只有使用生成的grpc協議緩衝區代碼才會遇到困難。看來有一些協議問題 - >對多個包進行轉換處理。最終用一個快速的搜索和替換來「修復」了一些包導入到生成的代碼中。

所以基本上API只接受一個jpg文件,將其轉換為grpc請求,用於提供TensorFlow服務,並以JSON的方式返回給定的分類結果。

運行模型和API

一旦所有東西都在容器圖像中,將它全部部署在任何容器業務流程系統上當然是相當簡單的。因此,這兒會使用Kontena作為部署目標。

解決方案中最複雜的部分是機器學習模型,但現在即使是作為獨立容器運行,事情也變得非常簡單:

在這個例子中省略了loadbalancer配置。查看GitHub存儲庫以獲取更詳細的部署。

測試

現在使用TensorFlow模型前面的簡化API,可以很容易地使用普通捲曲測試圖像分類:

分數越高越好。所以,我們的ML模型能夠弄清楚這張照片是一隻熊貓。作為參考,這是張貼的圖像:

想知道這個設置如何處理熱狗圖像嘛?

看起來相當不錯,與其他任何類別相比,識別熱狗這一組有不錯的成績。

總結

在容器中使用TensorFlow模型確實提供了一個非常好的部署方法。通過使用示例中顯示的架構模式,設置可擴展的解決方案以基本服務於TensorFlow模型非常簡單。

接下來是什麼?

在許多情況下,使用預先創建的模型當然不符合現實情況。與任何學習一樣,這是一個需要反饋的過程,它會放大學習,產生更多更準確的結果。作者考慮通過建立一個恆定的模型訓練器來擴展方法,在這個模型訓練器中可以推回結果。用戶可以選擇一些Web UI,例如哪個類是正確的,甚至發布新的類。這會將信息提供給不斷建立模型的東西。也可以定期導出模型,從而為模型容器觸發一個新的構建,這將是相當直接的。

Advertisements

你可能會喜歡