色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用Flask和Docker容器化一個(gè)簡單的ML模型評分服務(wù)器

倩倩 ? 來源:雷鋒網(wǎng) ? 2020-04-15 16:56 ? 次閱讀

機(jī)器學(xué)習(xí)(ML)模型部署到生產(chǎn)環(huán)境中的一個(gè)常見模式是將這些模型作為 RESTful API 微服務(wù)公開,這些微服務(wù)從 Docker 容器中托管,例如使用 SciKit Learn 或 Keras 包訓(xùn)練的 ML 模型,這些模型可以提供對新數(shù)據(jù)的預(yù)測。然后,可以將它們部署到云環(huán)境中,以處理維護(hù)連續(xù)可用性所需的所有事情,例如容錯(cuò)、自動(dòng)縮放、負(fù)載平衡和滾動(dòng)服務(wù)更新。

持續(xù)可用的云部署的配置詳細(xì)信息對于不同的目標(biāo)云提供商來說是不一樣的——例如,Amazon Web 服務(wù)的部署過程和拓?fù)浣Y(jié)構(gòu)與微軟 Azure 不同,后者又與谷歌云平臺不同。這構(gòu)成了每個(gè)云提供商需要獲取的知識。此外,在本地測試整個(gè)部署策略是困難的(有些人會(huì)說幾乎不可能),它使得網(wǎng)絡(luò)等問題難以調(diào)試。

Kubernetes 是一個(gè)容器編排平臺,旨在解決這些問題。簡而言之,它提供了一種機(jī)制,用于定義整個(gè)基于微服務(wù)的應(yīng)用程序部署拓?fù)浼捌渚S護(hù)連續(xù)可用性的服務(wù)級別要求。對于目標(biāo)云提供商來說,它可以在本地運(yùn)行,甚至可以在你的筆記本電腦上運(yùn)行,而這一切所需的只是運(yùn)行 Kubernetes 的虛擬機(jī)集群,即 Kubernetes 集群。

這篇博客適合與GitHub 存儲(chǔ)庫中的代碼一起閱讀,其中包含 Python 模塊、Docker 配置文件和 Kubernetes 指令,用于演示如何使用 Docker 和 Kubernetes 將簡單的 Python ML 模型轉(zhuǎn)換為生產(chǎn)級 RESTful 模型評分(或預(yù)測)API 服務(wù)。這不是一個(gè)全面的指南,但它會(huì)幫助你快速啟動(dòng)和運(yùn)行,熟悉基本概念和模式。

我們將使用兩種不同的方法演示 ML 模型部署:使用 Docker 和 Kubernetes 的第一原則方法;然后使用 Seldon Core Kubernetes 本機(jī)框架來簡化 ML 服務(wù)的部署。前者將有助于理解后者,后者構(gòu)成一個(gè)強(qiáng)大的框架,用于部署和監(jiān)視許多復(fù)雜的 ML 模型管道的性能。

使用 Flask 和 Docker 容器化一個(gè)簡單的 ML 模型評分服務(wù)器

我們首先演示如何使用 api.py 模塊中包含的簡單 Python ML 模型評分 REST API 和 Dockerfile 來實(shí)現(xiàn)這一基本功能,這兩個(gè)文件都位于 py-flask-ml-score-api 目錄中,其核心內(nèi)容如下:

py-flask-ml-score-api/

| Dockerfile

| Pipfile

| Pipfile.lock

| api.py

在 api.py 模塊中定義 Flask Service

這是一個(gè) Python 模塊,它使用 Flask 框架定義一個(gè) web 服務(wù)(app),帶有一個(gè)函數(shù)(score),該函數(shù)在響應(yīng)對特定 URL(或「route」)的 HTTP 請求時(shí)執(zhí)行,這要?dú)w功于 app.route 函數(shù)的封裝。相關(guān)代碼復(fù)制如下,以供參考:

from flask import Flask, jsonify, make_response, request

app = Flask(__name__)

@app.route(‘/score’, methods=[‘POST’])

def score():features = request.json[‘X’] return make_response(jsonify({‘score’: features}))

if __name__ == ‘__main__’: app.run(host=‘0.0.0.0’, port=5000

如果在本地運(yùn)行(例如,使用 python run api.py 啟動(dòng) web 服務(wù)),我們就可以在 http://localhost:5000/score訪問我們的函數(shù)。此函數(shù)接受以 JSON 形式發(fā)送給它的數(shù)據(jù)(該數(shù)據(jù)已自動(dòng)反序列化為 Python dict,在函數(shù)定義中用作請求變量),并返回響應(yīng)(自動(dòng)序列化為 JSON)。

在我們的示例函數(shù)中,我們期望傳遞給 ML 模型一組特性 X,在我們的示例中,ML 模型將這些相同的特性返回給調(diào)用者,即我們選擇的 ML 模型是 identity 函數(shù),我們選擇它純粹是為了演示。我們可以很容易地加載一個(gè) pickled SciKit Learn 或 Keras 模型,并將數(shù)據(jù)傳遞給 approproate predict 方法,以 JSON 的形式返回特性數(shù)據(jù)的分?jǐn)?shù)。

用 Dockerfile 定義 Docker 映像

Dockerfile 本質(zhì)上是 Docker 使用的配置文件,它允許你在操作時(shí)定義 Docker 容器的內(nèi)容并配置其操作。此靜態(tài)數(shù)據(jù)在未作為容器執(zhí)行時(shí)稱為「image」。作為參考,Dockerfile 復(fù)制如下:

FROM python:3.6-slim

WORKDIR /usr/src/app

COPY 。 .

RUN pip install pipenv

RUN pipenv install

EXPOSE 5000

CMD [“pipenv”, “run”, “python”, “api.py”]

在我們的示例 Dockerfile 中,我們:

首先使用一個(gè)預(yù)先配置好的 Docker 鏡像(python:3.6-slim),它已經(jīng)安裝了 python 的 Alpine Linux 發(fā)行版;

然后將 py-flask-ml-score-api 本地目錄的內(nèi)容復(fù)制到圖像上名為 /usr/src/app 的目錄中;

然后使用 pip 為 Python 依賴管理安裝 Pipenv 包;

然后使用 Pipenv 將 Pipfile.lock 中描述的依賴項(xiàng)安裝到映像上的虛擬環(huán)境中;

端口 5000 配置為暴露在運(yùn)行容器上的「外部世界」;

啟動(dòng) Flask RESTful web 服務(wù)——api.py。注意,這里我們依賴 Flask 的內(nèi)部 WSGI 服務(wù)器,而在生產(chǎn)環(huán)境中,我們建議配置一個(gè)更魯棒的選項(xiàng)(例如 Gunicorn)。

構(gòu)建此自定義映像并要求 Docker 進(jìn)程運(yùn)行它(請記住,正在運(yùn)行的映像是一個(gè)「容器」),將在端口 5000 上公開我們的 RESTful ML 模型評分服務(wù),就像它在專用虛擬機(jī)上運(yùn)行一樣。有關(guān)這些核心概念的更全面的討論,請參閱 Docker 官方文檔。

為 ML Scoring Service 構(gòu)建 Docker 映像

我們假設(shè) Docker 在本地運(yùn)行,客戶端登錄到 DockerHub 上的一個(gè)帳戶,并且在這個(gè)項(xiàng)目的根目錄中有一個(gè)打開的終端。要構(gòu)建 Dockerfile 運(yùn)行中描述的映像:

docker build --tag alexioannides/test-ml-score-api py-flask-ml-score-api

其中「AlxiiNANIDs」指的是 DockerHub 帳戶的名稱,我們將在對圖像進(jìn)行測試之后上傳它。

測試

要測試印象是否可以用于創(chuàng)建一個(gè) Docker 容器,該容器的功能與我們預(yù)期的一樣,

docker run --rm --name test-api -p 5000:5000 -d alexioannides/test-ml-score-ap

我們已經(jīng)從 Docker 容器(即我們的 ML 模型評分服務(wù)器正在監(jiān)聽的端口)映射到主機(jī)(localhost)上的端口 5000:

docker ps

然后檢查容器是否正在使用:

curl http://localhost:5000/score \--request POST \ --header “Content-Type: application/json” \ --data ‘{“X”: [1, 2]}

你應(yīng)該得到的輸出是:

{“score”:[1,2]}

我們的測試模型所做的只是返回輸入數(shù)據(jù),即它是 identity 函數(shù)。修改此服務(wù)以從磁盤加載 SciKit Learn 模型并將新數(shù)據(jù)傳遞給生成預(yù)測的「predict」方法只需要幾行額外的代碼。現(xiàn)在容器已經(jīng)確認(rèn)可以使用了,我們可以停止它:

docker stop test-api

將印象推送到 DockerHub 注冊表

為了讓遠(yuǎn)程 Docker 主機(jī)或 Kubernetes 群集能夠訪問我們創(chuàng)建的映像,我們需要將其發(fā)布到映像注冊表。所有能提供基于托管 Docker 服務(wù)的云計(jì)算提供商都將提供私有印象注冊,但為了方便起見,我們將使用 DockerHub 的公共印象注冊。將我們的新印象推到 DockerHub(我的帳戶 ID 是「AlxiiNANIDs」)。

docker push alexioannides/test-ml-score-api

我們現(xiàn)在可以看到,我們?yōu)橛∠筮x擇的命名約定與我們的目標(biāo)圖像注冊表有內(nèi)在的聯(lián)系(需要時(shí),你需要插入自己的帳戶 ID)。上傳完成后,登錄 DockerHub,通過 DockerHub 用戶界面確認(rèn)上傳成功。

安裝 Kubernetes 供本機(jī)開發(fā)和測試

安裝單節(jié)點(diǎn) Kubernetes 集群有兩個(gè)適合本機(jī)開發(fā)和測試的選項(xiàng):通過 Docker 桌面客戶端,或者通過 Minikube。

通過 Docker 桌面安裝 Kubernetes

如果你一直在 Mac 電腦上使用 Docker,那么你很有可能是通過 Docker 桌面應(yīng)用程序來完成的。如果沒有,則可以在此處下載 Docker 桌面。Docker 桌面現(xiàn)在與 Kubernetes 捆綁在一起,可以通過進(jìn)入 Preferences-》Kubernetes 并選擇 Enable Kubernetes 來激活它。Docker 桌面需要一段時(shí)間才能下載運(yùn)行 Kubernetes 所需的 Docker 印象,所以請耐心等待。完成后,轉(zhuǎn)到 Preferences-》Advanced,確保至少為 Docker 引擎分配了 2 個(gè) CPU 和 4 個(gè) GiB,這是部署單個(gè) Seldon ML 組件所需的最低資源。

要與 Kubernetes 集群交互,你需要 kubectl 命令行界面(CLI)工具,該工具需要單獨(dú)下載。在 Mac 上執(zhí)行此操作的最簡單方法是使用 brew install kubernetes-cli。一旦安裝了 kubectl 并啟動(dòng)并運(yùn)行了 Kubernetes 集群,就可以通過運(yùn)行它來測試是否能按預(yù)期工作。

kubectl cluster-info

返回應(yīng)該如下:

Kubernetes master is running at https://kubernetes.docker.internal:6443KubeDNS is running at https://kubernetes.docker.internal:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use ’kubectl cluster-info dump‘。

通過 Minikube 安裝 Kubernetes

在 Mac OS X 上,啟動(dòng)和運(yùn)行 Minikube 所需的步驟如下:

確保安裝了安裝包管理器

使用安裝 VirtualBox,使用 brew cask 安裝 VirtualBox

使用安裝 Minikube,使用 brew cask 安裝 minicube

要啟動(dòng)測試群集:

minikube start --memory 409

其中,我們指定了部署單個(gè) Seldon ML 組件所需的最小內(nèi)存量。耐心點(diǎn),Minikube 可能需要一段時(shí)間才能開始,要先測試該群集是否運(yùn)行正常。

kubectl cluster-info

其中 kubectl 是用于與 Kubernetes API 交互的標(biāo)準(zhǔn)命令行界面(CLI)客戶機(jī)。

將容器化的 ML 模型評分服務(wù)部署到 Kubernetes

要在 Kubernetes 上啟動(dòng)我們的測試模型評分服務(wù),我們將首先在 Kubernetes Pod 中部署容器化服務(wù),它的推出由部署管理,而部署又會(huì)創(chuàng)建一個(gè) ReplicaSet,這是通過下面的代碼實(shí)現(xiàn)的:

kubectl create deployment test-ml-score-api --image=alexioannides/test-ml-score-api:lates

要檢查部署運(yùn)行的狀態(tài),

kubectl rollout status deployment test-ml-score-api

為了看到運(yùn)行的 pod,

kubectl get pod

可以使用端口轉(zhuǎn)發(fā)來測試單個(gè)容器,而無需將其公開到公共網(wǎng)絡(luò)。要使用此功能,請打開一個(gè)單獨(dú)的終端并運(yùn)行。例如,

kubectl port-forward test-ml-score-api-szd4j 5000:500

其中 body-ml-score-api-szd4j 是集群上當(dāng)前活動(dòng)的 pod 的確切名稱,由 kubectl get pods 命令確定。然后從原來的終端,對運(yùn)行在 Kubernetes 上的同一個(gè)容器重復(fù)我們的測試請求,

curl http://localhost:5000/score \--request POST \ --header “Content-Type: application/json” \ --data ’{“X”: [1, 2]}

要將容器作為(負(fù)載平衡)服務(wù)公開,我們必須創(chuàng)建引用它的 Kubernetes 服務(wù)。這是通過以下命令實(shí)現(xiàn)的:

kubectl expose deployment test-ml-score-api --port 5000 --type=LoadBalancer --name test-ml-score-api-lb

如果你使用的是 Docker 桌面,那么這將自動(dòng)模擬 http://localhost:5000上的負(fù)載平衡器。查找 Minikube 在何處公開其模擬負(fù)載平衡器運(yùn)行:

minikube service list

現(xiàn)在我們測試我們的新服務(wù)器,例如,使用 Docker 桌面:

curl http://localhost:5000/score \--request POST \ --header “Content-Type: application/json” \ --data ‘{“X”: [1, 2]}

注意,Docker Desktop 和 Minikube 都沒有設(shè)置一個(gè)真實(shí)的負(fù)載平衡器(如果我們在云平臺上提出這個(gè)請求,就會(huì)發(fā)生這種情況)。要拆下負(fù)載平衡器,請依次運(yùn)行以下命令:

kubectl delete deployment test-ml-score-apikubectl delete service test-ml-score-api-l

在 Google 云平臺上配置多節(jié)點(diǎn)集群

該集群的資源遠(yuǎn)遠(yuǎn)大于筆記本電腦上 Kubernetes 管理器平臺。我們將在 Google 云平臺(GCP)上使用 Kubernetes 引擎。

啟動(dòng)并運(yùn)行 Google 云平臺

在使用 Google 云平臺之前,請注冊一個(gè)帳戶并創(chuàng)建一個(gè)專門用于此工作的項(xiàng)目。接下來,確保 GCP SDK 安裝在本地計(jì)算機(jī)上,例如:

brew cask install google-cloud-sdk

或者直接從 GCP 下載安裝映像。注意,如果你還沒有安裝 Kubectl,那么現(xiàn)在就需要安裝,這可以使用 GCP SDK 完成:

gcloud components install kubectl

然后我們需要初始化 SDK

gcloud init

它將打開瀏覽器并指導(dǎo)你完成必要的身份驗(yàn)證步驟,確保選擇創(chuàng)建的項(xiàng)目以及默認(rèn)區(qū)域。

初始化 Kubernetes 群集

首先,在 GCP UI 中,訪問 Kubernetes 引擎頁面以觸發(fā)Kubernetes API 啟動(dòng)。然后從命令行啟動(dòng)一個(gè)集群:

gcloud container clusters create k8s-test-cluster --num-nodes 3 --machine-type g1-small

然后,在等待集群創(chuàng)建的同時(shí),你可以泡杯咖啡。注意,這將自動(dòng)切換 kubectl 上下文以指向 GCP 上的集群,如果運(yùn)行 kubectl config get-contexts,你將看到這一點(diǎn)。要切換回 Docker 桌面客戶端,請使用 kubectl config use-context docker-desktop。

在 GCP 上啟動(dòng)容器化 ML 模型評分服務(wù)器

這在很大程度上與我們在本地運(yùn)行測試服務(wù)時(shí)所做的相同-依次運(yùn)行以下命令:

kubectl create deployment test-ml-score-api --image=alexioannides/test-ml-score-api:latestkubectl expose deployment test-ml-score-api --port 5000 --type=LoadBalancer --name test-ml-score-api-lb

但是,要找到我們需要使用的 GCP 集群的外部 IP 地址:

kubectl get services

然后我們可以在 GCP 上測試我們的服務(wù)器,例如:

curl http://35.246.92.213:5000/score \--request POST \ --header “Content-Type: application/json” \ --data ’{“X”: [1, 2]}’

或者,我們可以再次使用端口來連接到單個(gè) pod,例如:

kubectl port-forward test-ml-score-api-nl4sc 5000:5000

然后在一個(gè)單獨(dú)的終端上:

curl http://localhost:5000/score \--request POST \ --header “Content-Type: application/json” \ --data ‘{“X”: [1, 2]}’

最后,我們拆除復(fù)制控制器和負(fù)載平衡器,

kubectl delete deployment test-ml-score-apikubectl delete service test-ml-score-api-lb

在 Kubectl 上下文之間切換

如果在本地運(yùn)行 Kubernetes 和 GCP 上運(yùn)行一個(gè)集群,那么可以將 Kubectl 上下文從一個(gè)集群切換到另一個(gè)集群,如下所示:

kubectl config use-context docker-desktop

其中上下文的列表可以使用,

kubectl config get-contexts

使用 YAML 文件定義和部署 ML 模型評分服務(wù)器

到目前為止,我們一直在使用 Kubectl 命令來定義和部署我們的 ML 模型評分服務(wù)器的基本版本。這對于演示來說是很好的,但是很快就受限,且無法控制。實(shí)際上,定義整個(gè) Kubernetes 部署的標(biāo)準(zhǔn)方法是使用發(fā)布到 Kubernetes API 的 YAML 文件。py-flask-ml-score-api 目錄中的 py-flask-ml-score.yaml 文件是一個(gè)示例,它說明了如何在單個(gè) yaml 文件中定義我們的 ML 模型評分服務(wù)器。現(xiàn)在可以使用一個(gè)命令部署它:

kubectl apply -f py-flask-ml-score-api/py-flask-ml-score.yaml

注意,我們在這個(gè)文件中定義了三個(gè)單獨(dú)的 Kubernetes 組件:一個(gè)名稱空間、一個(gè)部署和一個(gè)負(fù)載平衡服務(wù)器,對于所有這些組件(及其子組件),使用 --- 來限定每個(gè)單獨(dú)組件的定義。要查看部署到此命名空間中的所有組件的使用方法:

kubectl get all --namespace test-ml-app

同樣,當(dāng)使用任何 kubectl get 命令檢查測試應(yīng)用程序的不同組件時(shí),設(shè)置 --namespace 標(biāo)志。或者,我們可以將新的名稱空間設(shè)置為默認(rèn)上下文:

kubectl config set-context $(kubectl config current-context) --namespace=test-ml-app

然后運(yùn)行:

kubectl get all

在這里,我們可以使用

kubectl config set-context $(kubectl config current-context) --namespace=default

拆掉我們可以使用的應(yīng)用程序,

kubectl delete -f py-flask-ml-score-api/py-flask-ml-score.yaml

這樣我們就不必使用多個(gè)命令單獨(dú)刪除每個(gè)組件。請參閱Kubernetes API 的官方文檔,以更深入地了解此 YAML 文件的內(nèi)容。

使用 Helm 圖表定義和部署 ML 模型評分服務(wù)器

為 Kubernetes 編寫 YAML 文件可能是重復(fù)性的工作,且難以管理,特別是如果涉及到大量的「復(fù)制粘貼」,那么從一個(gè)部署到下一個(gè)部署只需要更改少數(shù)參數(shù),但有一堵「YAML 墻」需要修改。輸入 Helm——一個(gè)用于創(chuàng)建、執(zhí)行和管理 Kubernetes 部署模板的框架。下面是一個(gè)非常棒的演示,它是關(guān)于如何使用 Helm 來部署我們的 ML 模型評分服務(wù)器。要全面討論 Helm 的全部功能,請參考官方文檔。Seldon Core 也可以使用 Helm 部署,稍后我們將更詳細(xì)地介紹這一點(diǎn)。

安裝 Helm

和以前一樣,在 Mac OS X 上安裝 Helm 的最簡單方法是使用自制包管理器,

brew install kubernetes-helm

Helm 依賴于一個(gè)專用的部署服務(wù)器,稱為「Tiller」,它運(yùn)行在我們希望部署應(yīng)用程序的 Kubernetes 集群中。在部署 Tiller 之前,我們需要?jiǎng)?chuàng)建一個(gè)在集群范圍內(nèi)的超級用戶角色來分配給它,以便它可以在任何命名空間中創(chuàng)建和修改 Kubernetes 資源。為了實(shí)現(xiàn)這一點(diǎn),我們首先創(chuàng)建一個(gè)服務(wù)帳戶,通過此方法,pod 在與服務(wù)帳戶關(guān)聯(lián)時(shí),可以向 Kubernetes API 進(jìn)行驗(yàn)證,以便能夠查看、創(chuàng)建和修改資源。我們在 kube 系統(tǒng)名稱空間中創(chuàng)建它,如下所示,

kubectl --namespace kube-system create serviceaccount tiller

然后在此服務(wù)帳戶和群集角色之間創(chuàng)建綁定,顧名思義,該綁定會(huì)授予群集范圍內(nèi)的管理權(quán)限:

kubectl create clusterrolebinding tiller \--clusterrole cluster-admin \ --serviceaccount=kube-system:tiller

我們現(xiàn)在可以將 Helm Tiller 部署到 Kubernetes 集群,并使用所需的訪問權(quán)限,

helm init --service-account tiller

使用 Helm 進(jìn)行部署

要?jiǎng)?chuàng)建新的 Helm 布署定義,

helm create NAME-OF-YOUR-HELM-CHART

這將創(chuàng)建一個(gè)新的目錄,例如 helm-ml-score-app,它包含在這個(gè)存儲(chǔ)庫中,具有以下高級目錄結(jié)構(gòu),

helm-ml-score-app/| -- charts/ | -- templates/ | Chart.yaml | values.yaml

簡而言之,charts 目錄包含我們的新表所依賴的其他表(我們不會(huì)使用這個(gè)),templates 目錄包含我們的 Helm 模板,Chart.yaml 包含圖表的核心信息(例如名稱和版本信息),values.yaml 包含用于呈現(xiàn)模板的默認(rèn)值的信息(如果沒有從命令行設(shè)置值)。

下一步是刪除模板目錄中的所有文件(NOTES.txt 除外),并用我們自己的文件替換它們。我們從 namespace.yaml 開始為應(yīng)用程序聲明命名空間,

apiVersion: v1kind: Namespacemetadata:name: {{ .Values.app.namespace }}

在此特定實(shí)例中 .Values.app.namespace 插入 app.namespace 變量,其默認(rèn)值在 Values.yaml 中定義。接下來,我們在 deployment.yaml 中定義 pods 的部署:

apiVersion: apps/v1kind: Deploymentmetadata:labels: app: {{ .Values.app.name }} env: {{ .Values.app.env }} name: {{ .Values.app.name }} namespace: {{ .Values.app.namespace }}spec:replicas: 1 selector: matchLabels: app: {{ .Values.app.name }} template:metadata: labels: app: {{ .Values.app.name }} env: {{ .Values.app.env }}spec: containers: - image: {{ .Values.app.image }} name: {{ .Values.app.name }} ports: - containerPort: {{ .Values.containerPort }}protocol: TCP

以及 service.yaml 中的負(fù)載平衡器服務(wù)的詳細(xì)信息,

apiVersion: v1kind: Servicemetadata:name: {{ .Values.app.name }}-lblabels: app: {{ .Values.app.name }} namespace: {{ .Values.app.namespace }}spec: type: LoadBalancer ports: - port: {{ .Values.containerPort }} targetPort: {{ .Values.targetPort }} selector:app: {{ .Values.app.name }}

實(shí)際上,我們所做的是將部署細(xì)節(jié)的每個(gè)組件從 py-flask-ml-score.yaml 拆分到自己的文件中,然后為配置的每個(gè)參數(shù)定義模板變量。要測試和檢查呈現(xiàn)的模板,請運(yùn)行:

helm install helm-ml-score-app --debug --dry-run

如果您對「dry run」的結(jié)果感到滿意,則執(zhí)行部署并使用:

helm install helm-ml-score-app --name test-ml-app

這將自動(dòng)打印發(fā)布的狀態(tài),以及 Helm 賦予它的名稱和呈現(xiàn)給終端的 NOTES.txt 的內(nèi)容。列出所有可用的 Helm 版本及其名稱:

helm list

以及其所有組成組件(如 pod、復(fù)制控制器、服務(wù)器等)的狀態(tài),例如:

helm status test-ml-app

ML 評分服務(wù)器現(xiàn)在可以用與上面完全相同的方式進(jìn)行測試。一旦你確信它按預(yù)期工作,就可以使用了:

helm delete test-ml-app

使用 Seldon 將 ML 模型評分服務(wù)器部署到 Kubernetes

Seldon 的核心任務(wù)是簡化 Kubernetes 上復(fù)雜 ML 預(yù)測管道的重復(fù)部署和管理。在本演示中,我們將重點(diǎn)介紹最簡單的示例,即我們已經(jīng)使用的簡單的 ML 模型評分 API。

為 Seldon 構(gòu)建 ML 組件

要使用 Seldon 部署 ML 組件,我們需要?jiǎng)?chuàng)建 Seldon 兼容的 Docker 映像。我們首先遵循相關(guān)指導(dǎo)原則來定義一個(gè) Python 類,該類封裝了一個(gè)用于 Seldon 部署的 ML 模型。它包含在 seldon-ml-score-component 目錄中,其內(nèi)容類似于 py-flask-ml-score-api 中的內(nèi)容:

seldon-ml-score-component/| Dockerfile | MLScore.py | Pipfile | Pipfile.lock

構(gòu)建 Docker 印像以用于 Seldon

Seldon 要求 ML 評分服務(wù)器的 Docker 映像以特定的方式構(gòu)造:

ML 模型必須封裝在一個(gè) Python 類中,其中包含一個(gè)帶有特定簽名(或接口)的 predict 方法,例如,在 MLScore.py(故意以其中包含的 Python 類命名)中:

class MLScore: “”“ Model template. You can load your model parameters in __init__ from a location accessible at runtime ”“” def __init__(self): “”“ Load models and add any initialization parameters (these will be passed at runtime from the graph definition parametersdefined in your seldondeployment kubernetes resource manifest)。 ”“”print(“Initializing”) def predict(self, X, features_names): “”“ Return a prediction. Parameters ---------- X : array-like feature_names : array of feature names (optional) ”“” print(“Predict called - will run identity function”) return X

必須安裝 seldon core Python 包

容器首先使用 seldon-core 包提供的 Seldon core microservice 入口點(diǎn)運(yùn)行 Seldon 服務(wù),它和上面的點(diǎn)都可以看到 DockerFile

FROM python:3.6-slimCOPY 。 /appWORKDIR /appRUN pip install pipenvRUN pipenv installEXPOSE 5000# Define environment variableENV MODEL_NAME MLScoreENV API_TYPE RESTENV SERVICE_TYPE MODELENV PERSISTENCE 0CMD pipenv run seldon-core-microservice $MODEL_NAME $API_TYPE --service-type $SERVICE_TYPE --persistence $PERSISTENCE

有關(guān)詳細(xì)信息,請參閱 Seldon 官方文件。接下來,建立這個(gè)印象:

docker build seldon-ml-score-component -t alexioannides/test-ml-score-seldon-api:latest

在將此印像推送到注冊表之前,我們需要確保它按預(yù)期工作。在本地 Docker 守護(hù)進(jìn)程上啟動(dòng)映像:

docker run --rm -p 5000:5000 -d alexioannides/test-ml-score-seldon-api:latest

然后向它發(fā)送一個(gè)請求:

curl -g http://localhost:5000/predict \--data-urlencode ‘json={“data”:{“names”:[“a”,“b”],“tensor”:{“shape”:[2,2],“values”:[0,0,1,1]}}}’

如果響應(yīng)與預(yù)期一致(即它包含與請求相同的負(fù)載),則推送印象:

docker push alexioannides/test-ml-score-seldon-api:latest

使用 Seldon Core 部署 ML 組件

我們現(xiàn)在繼續(xù)將 Seldon 兼容的 ML 組件部署到 Kubernetes 集群,并從中創(chuàng)建一個(gè)容錯(cuò)和可縮放的服務(wù)器。為了實(shí)現(xiàn)這一目標(biāo),我們將使用 Helm 表部署 Seldon Core。我們首先創(chuàng)建一個(gè)包含 seldon core 操作符的命名空間,這是使用 seldon 部署任何 ML 模型所需的自定義 Kubernetes 資源:

kubectl create namespace seldon-core

然后我們使用 Helm 部署 Seldon Core,并在 https://storage.googleapis.com/Seldon-charts上部署 Seldon Helm 圖表庫:

helm install seldon-core-operator \--name seldon-core \ --repo https://storage.googleapis.com/seldon-charts \ --set usageMetrics.enabled=false \ --namespace seldon-core

接下來,我們?yōu)?Kubernetes 部署 Ambassador API 網(wǎng)關(guān),它將充當(dāng) Kubernetes 集群的入口點(diǎn)。我們將為 Ambassador 部署創(chuàng)建一個(gè)專用名稱空間:

kubectl create namespace ambassador

然后使用 Helm 官方庫中最新的圖表部署 Ambassador:

helm install stable/ambassador \--name ambassador \ --set crds.keep=false \ --namespace ambassador

如果我們現(xiàn)在運(yùn)行 helm list --namespace seldon-core,我們應(yīng)該看到 seldon core 已經(jīng)部署好了,并且正在等待 seldon ML 組件的部署。為了部署我們的 Seldon ML 模型評分服務(wù)器,我們?yōu)樗鼊?chuàng)建了一個(gè)單獨(dú)的名稱空間:

kubectl create namespace test-ml-seldon-app

然后配置并部署另一個(gè)官方 Seldon Helm,如下所示:

helm install seldon-single-model \--name test-ml-seldon-app \ --repo https://storage.googleapis.com/seldon-charts \ --set model.image.name=alexioannides/test-ml-score-seldon-api:latest \ --namespace test-ml-seldon-app

注意,通過重復(fù)最后兩個(gè)步驟,現(xiàn)在可以使用 Seldon 部署多個(gè) ML 模型,它們都將通過同一個(gè) Ambassador API 網(wǎng)關(guān)自動(dòng)訪問,我們現(xiàn)在將使用該網(wǎng)關(guān)測試 Seldon ML 模型評分服務(wù)器。

通過 Ambassador 網(wǎng)關(guān) API 測試 API

為了測試基于 Seldon 的 ML 模型評分服務(wù)器,我們遵循與上面 Kubernetes 部署相同的方法,但是我們將通過 Ambassador API 網(wǎng)關(guān)路由我們的請求。要查找 Ambassador 服務(wù)運(yùn)行的 IP 地址:

kubectl -n ambassador get service ambassador

如果使用 Docker 桌面,則為 localhost:80;如果在 GCP 或 Minikube 上運(yùn)行,則為 IP 地址(如果在后一種情況下需要記住使用 minikuke 服務(wù)列表)。現(xiàn)在測試預(yù)測的終結(jié)點(diǎn),例如:

curl http://35.246.28.247:80/seldon/test-ml-seldon-app/test-ml-seldon-app/api/v0.1/predictions \--request POST \ --header “Content-Type: application/json” \ --data ‘{“data”:{“names”:[“a”,“b”],“tensor”:{“shape”:[2,2],“values”:[0,0,1,1]}}}’

如果你想了解路由背后的完整邏輯,請參閱Seldon 文檔,但 URL 實(shí)際上使用的是:

http://《ambassadorEndpoint》/seldon/《namespace》/《deploymentName》/api/v0.1/predictions

如果你的請求成功了,那么你應(yīng)該會(huì)看到如下的結(jié)果:

{“meta”: { “puid”: “hsu0j9c39a4avmeonhj2ugllh9”, “tags”: { }, “routing”: {}, “requestPath”: { “classifier”: “alexioannides/test-ml-score-seldon-api:latest” }, “metrics”: [] }, “data”: { “names”: [“t:0”, “t:1”], “tensor”: {“shape”: [2, 2], “values”: [0.0, 0.0, 1.0, 1.0] } }}

清理

要?jiǎng)h除使用上述步驟部署的單個(gè) Seldon ML 模型及其命名空間,請運(yùn)行:

helm delete test-ml-seldon-app --purge &&kubectl delete namespace test-ml-seldon-app

按照同樣的模式移除 Seldon 核心操作器和 Ambassador:

helm delete seldon-core --purge && kubectl delete namespace seldon-corehelm delete ambassador --purge && kubectl delete namespace ambassador

如果有一個(gè) GCP 集群需要終止運(yùn)行:

gcloud container clusters delete k8s-test-cluster

同樣,如果使用 Minikube:

minikube stopminikube delete

如果在 Docker 桌面上運(yùn)行,導(dǎo)航到 Preferences-》Reset 重置集群。

接下來做什么

以下資源列表將幫助你深入了解我們在上面略過的主題:

the full set of functionality provided by Seldon;

running multi-stage containerised workflows (e.g. for data engineering and model training) using Argo Workflows;

the excellent ‘Kubernetes in Action‘ by Marko Luka available from Manning Publications;

‘Docker in Action‘ by Jeff Nickoloff and Stephen Kuenzli also available from Manning Publications;

‘Flask Web Development’ by Miguel Grinberg O’Reilly.

via:https://alexioannides.com/2019/01/10/deploying-python-ml-models-with-flask-docker-and-kubernetes/

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 應(yīng)用程序
    +關(guān)注

    關(guān)注

    38

    文章

    3292

    瀏覽量

    57851
  • ML
    ML
    +關(guān)注

    關(guān)注

    0

    文章

    149

    瀏覽量

    34696
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4807

    瀏覽量

    84961
收藏 人收藏

    評論

    相關(guān)推薦

    Flexus 云服務(wù)器 X 實(shí)例安裝 Docker 管理工具 Portainer

    。在此強(qiáng)大平臺上部署如 Portainer CE 這樣的容器管理工具,不僅能夠極大地簡化 Docker 環(huán)境的管理流程,還能進(jìn)步提升運(yùn)維效率與自動(dòng)水平,讓用戶的云端體驗(yàn)更加流暢自如
    的頭像 發(fā)表于 01-13 18:46 ?177次閱讀
    Flexus 云<b class='flag-5'>服務(wù)器</b> X 實(shí)例安裝 <b class='flag-5'>Docker</b> 管理工具 Portainer

    服務(wù)器 Flexus X 實(shí)例,Docker 集成搭建搭建 Flink

    夠同時(shí)處理實(shí)時(shí)數(shù)據(jù)流和靜態(tài)數(shù)據(jù)集,使得數(shù)據(jù)處理更加靈活高效 華為云端口放行 ??服務(wù)器放行對應(yīng)端口 8082 Docker 安裝并配置鏡像加速 1、購買華為云 Flexus X 實(shí)例 Flexus云
    的頭像 發(fā)表于 01-13 18:17 ?140次閱讀
    云<b class='flag-5'>服務(wù)器</b> Flexus X 實(shí)例,<b class='flag-5'>Docker</b> 集成搭建搭建 Flink

    服務(wù)器 Flexus X 實(shí)例,Docker 集成搭建 YesPlayMusic 網(wǎng)易云音樂播放

    YesPlayMusic 是款基于 Electron 的開源網(wǎng)易云音樂桌面播放,以簡潔的界面和豐富的功能受到了許多用戶的喜愛,特別是對于希望在桌面上享受網(wǎng)易云音樂服務(wù)的用戶 Docker
    的頭像 發(fā)表于 01-13 18:17 ?165次閱讀
    云<b class='flag-5'>服務(wù)器</b> Flexus X 實(shí)例,<b class='flag-5'>Docker</b> 集成搭建 YesPlayMusic 網(wǎng)易云音樂播放<b class='flag-5'>器</b>

    服務(wù)器 Flexus X 實(shí)例,Docker 集成搭建 MinIO

    架構(gòu)來存儲(chǔ)和管理大規(guī)模的非結(jié)構(gòu)數(shù)據(jù),如圖片、視頻、日志文件等,提供高可用性、可擴(kuò)展性和數(shù)據(jù)持久性 華為云端口放行 ??服務(wù)器放行對應(yīng)端口 9000,9001 Docker 安裝并配置鏡像加速 1
    的頭像 發(fā)表于 01-13 18:16 ?124次閱讀
    云<b class='flag-5'>服務(wù)器</b> Flexus X 實(shí)例,<b class='flag-5'>Docker</b> 集成搭建 MinIO

    服務(wù)器 Flexus X 實(shí)例,Docker 集成搭建 Grafana 開源數(shù)據(jù)可視平臺

    的用戶界面,用戶可以輕松創(chuàng)建和自定義動(dòng)態(tài)儀表板,以實(shí)時(shí)展示關(guān)鍵指標(biāo)和數(shù)據(jù)趨勢 華為云端口放行 ??服務(wù)器放行對應(yīng)端口 9955 Docker 安裝并配置鏡像加速 1、購買華為云 Flexus X 實(shí)例
    的頭像 發(fā)表于 01-13 15:50 ?101次閱讀
    云<b class='flag-5'>服務(wù)器</b> Flexus X 實(shí)例,<b class='flag-5'>Docker</b> 集成搭建 Grafana 開源數(shù)據(jù)可視<b class='flag-5'>化</b>平臺

    服務(wù)器 Flexus X 實(shí)例,Docker 集成搭建 NGINX

    Docker 集成搭建 NGINX 1、購買華為云 Flexus X 實(shí)例 Flexus云服務(wù)器X實(shí)例-華為云 (huaweicloud.com) ? 2、docker 安裝 yum?install
    的頭像 發(fā)表于 01-13 11:09 ?173次閱讀
    云<b class='flag-5'>服務(wù)器</b> Flexus X 實(shí)例,<b class='flag-5'>Docker</b> 集成搭建 NGINX

    基于 Docker 與 Jenkins 實(shí)現(xiàn)自動(dòng)部署

    前言 重塑自動(dòng)部署新高度,Docker 攜手 Jenkins,在華為云 Flexus X 云服務(wù)器的加持下,引領(lǐng)持續(xù)集成與部署的新紀(jì)元。Flexus X 以其卓越的性能、靈活的資源配置和高效的成本
    的頭像 發(fā)表于 01-07 17:25 ?212次閱讀
    基于 <b class='flag-5'>Docker</b> 與 Jenkins 實(shí)現(xiàn)自動(dòng)<b class='flag-5'>化</b>部署

    在華為云 FlexusX 實(shí)例上實(shí)現(xiàn) Docker 容器的實(shí)時(shí)監(jiān)控與可視化分析

    : 華為云Flexus云服務(wù)器X實(shí)例 ? 原生命令 查看正在運(yùn)行的容器 [root@flexusx-251f?~]# docker psCONTAINER?
    的頭像 發(fā)表于 01-02 13:42 ?108次閱讀
    在華為云 FlexusX 實(shí)例上實(shí)現(xiàn) <b class='flag-5'>Docker</b> <b class='flag-5'>容器</b>的實(shí)時(shí)監(jiān)控與可視化分析

    服務(wù)器容器的區(qū)別和聯(lián)系

    服務(wù)器采用虛擬機(jī)方式,每個(gè)虛擬機(jī)擁有獨(dú)立操作系統(tǒng)和資源,適用于高性能、高穩(wěn)定性應(yīng)用如數(shù)據(jù)庫和企業(yè)資源規(guī)劃系統(tǒng)。容器技術(shù)則在宿主操作系統(tǒng)上創(chuàng)建多個(gè)獨(dú)立容器,共享操作系統(tǒng)和資源,適合無狀態(tài)、彈性
    的頭像 發(fā)表于 12-02 11:41 ?162次閱讀

    Kubernetes集群搭建容器云需要幾臺服務(wù)器

    Kubernetes集群搭建容器云需要幾臺服務(wù)器?至少需要4臺服務(wù)器。搭建容器云所需的服務(wù)器數(shù)量以及具體的搭建步驟,會(huì)根據(jù)所選用的技術(shù)棧、業(yè)
    的頭像 發(fā)表于 10-21 10:06 ?187次閱讀

    容器云跟服務(wù)器有啥區(qū)別?五個(gè)區(qū)別要知道

    容器云和服務(wù)器分別代表了不同的計(jì)算資源管理和部署方式,兩者在多個(gè)方面存在顯著差異,這些差異主要體現(xiàn)在定義、服務(wù)器、虛擬方式、資源管理、操作自由度、應(yīng)用場景等方面。以下是對兩者區(qū)別的詳
    的頭像 發(fā)表于 09-18 14:03 ?259次閱讀

    常見的服務(wù)器容器和漏洞類型匯總

    常見的服務(wù)器容器包括KubeSphere、Tomcat、Nginx、Apache等,它們在提供便捷的服務(wù)部署和靈活的網(wǎng)絡(luò)功能的同時(shí),也可能存在著定的安全風(fēng)險(xiǎn)。這些
    的頭像 發(fā)表于 08-29 10:39 ?272次閱讀

    ARM平臺實(shí)現(xiàn)Docker容器技術(shù)

    及依賴包到個(gè)可移植的鏡像中,然后發(fā)布到任何流行的Linux或Windows機(jī)器上,亦可實(shí)現(xiàn)虛擬容器是完全使用沙箱機(jī)制,相互之間不會(huì)有任何接口。使用
    發(fā)表于 07-25 14:36

    ARM平臺實(shí)現(xiàn)Docker容器技術(shù)

    及依賴包到個(gè)可移植的鏡像中,然后發(fā)布到任何流行的Linux或Windows機(jī)器上,亦可實(shí)現(xiàn)虛擬容器是完全使用沙箱機(jī)制,相互之間不會(huì)有任何接口。使用
    發(fā)表于 07-17 11:05

    ARM平臺實(shí)現(xiàn)Docker容器技術(shù)

    ,亦可實(shí)現(xiàn)虛擬容器是完全使用沙箱機(jī)制,相互之間不會(huì)有任何接口。使用Docker,可像管理應(yīng)用程序樣管理基礎(chǔ)結(jié)構(gòu)。通過利用Docker
    的頭像 發(fā)表于 03-07 13:48 ?837次閱讀
    ARM平臺實(shí)現(xiàn)<b class='flag-5'>Docker</b><b class='flag-5'>容器</b>技術(shù)
    主站蜘蛛池模板: 国产一区二区三区乱码在线观看 | 色狠狠婷婷97 | 床伴在线观看免费高清完整泰剧第四集 | 99久久婷婷国产综合精品青草 | 男女做爽爽爽视频免费软件 | 在线观看成人免费视频 | 月夜直播免费观看全集 | 亚洲国产第一区二区三区 | 一个人在线观看免费视频 | 久99久热只有精品国产99 | 久久丫线这里只精品 | 国产小伙和50岁熟女23p | 艳鉧动漫1~6全集观看在线 | 调教美丽的白丝袜麻麻视频 | 妓女嫖客叫床粗话对白 | 欧洲馒头大肥p | 人妻免费视频公开上传 | 日韩人妻无码专区一本二本 | 无码日韩人妻精品久久蜜桃入口 | 99re久久精品在线播放 | 久久人妻少妇嫩草AV蜜桃99 | 久久久久久91香蕉国产 | 久久er国产免费精品 | 伊人久久精品AV一区二区 | 久久精品亚洲牛牛影视 | 超碰免费视频在线观看 | 野花日本免费完整版高清版动漫 | 国产成人无码免费精品果冻传媒 | 野花日本手机观看大全免费3 | 99久久精品久久久 | 一攻多受h嗯啊巨肉bl巨污 | 麻豆官网md.pub | jizz破处| 久久精品一本到东京热 | 亚洲欧美精品无码大片在线观看 | 亚洲成年人在线观看 | 欧美激情社区 | 日韩亚洲中文欧美在线 | 久久91精品久久久久久水蜜桃 | 国产久青青青青在线观看 | 黄片a级毛片 |