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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

使用Flask和Docker容器化一個簡單的ML模型評分服務器

倩倩 ? 來源:雷鋒網 ? 2020-04-15 16:56 ? 次閱讀

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

持續可用的云部署的配置詳細信息對于不同的目標云提供商來說是不一樣的——例如,Amazon Web 服務的部署過程和拓撲結構與微軟 Azure 不同,后者又與谷歌云平臺不同。這構成了每個云提供商需要獲取的知識。此外,在本地測試整個部署策略是困難的(有些人會說幾乎不可能),它使得網絡等問題難以調試。

Kubernetes 是一個容器編排平臺,旨在解決這些問題。簡而言之,它提供了一種機制,用于定義整個基于微服務的應用程序部署拓撲及其維護連續可用性的服務級別要求。對于目標云提供商來說,它可以在本地運行,甚至可以在你的筆記本電腦上運行,而這一切所需的只是運行 Kubernetes 的虛擬機集群,即 Kubernetes 集群。

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

我們將使用兩種不同的方法演示 ML 模型部署:使用 Docker 和 Kubernetes 的第一原則方法;然后使用 Seldon Core Kubernetes 本機框架來簡化 ML 服務的部署。前者將有助于理解后者,后者構成一個強大的框架,用于部署和監視許多復雜的 ML 模型管道的性能。

使用 Flask 和 Docker 容器化一個簡單的 ML 模型評分服務器

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

py-flask-ml-score-api/

| Dockerfile

| Pipfile

| Pipfile.lock

| api.py

在 api.py 模塊中定義 Flask Service

這是一個 Python 模塊,它使用 Flask 框架定義一個 web 服務(app),帶有一個函數(score),該函數在響應對特定 URL(或「route」)的 HTTP 請求時執行,這要歸功于 app.route 函數的封裝。相關代碼復制如下,以供參考:

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

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

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

用 Dockerfile 定義 Docker 映像

Dockerfile 本質上是 Docker 使用的配置文件,它允許你在操作時定義 Docker 容器的內容并配置其操作。此靜態數據在未作為容器執行時稱為「image」。作為參考,Dockerfile 復制如下:

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 中,我們:

首先使用一個預先配置好的 Docker 鏡像(python:3.6-slim),它已經安裝了 python 的 Alpine Linux 發行版;

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

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

然后使用 Pipenv 將 Pipfile.lock 中描述的依賴項安裝到映像上的虛擬環境中;

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

啟動 Flask RESTful web 服務——api.py。注意,這里我們依賴 Flask 的內部 WSGI 服務器,而在生產環境中,我們建議配置一個更魯棒的選項(例如 Gunicorn)。

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

為 ML Scoring Service 構建 Docker 映像

我們假設 Docker 在本地運行,客戶端登錄到 DockerHub 上的一個帳戶,并且在這個項目的根目錄中有一個打開的終端。要構建 Dockerfile 運行中描述的映像:

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

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

測試

要測試印象是否可以用于創建一個 Docker 容器,該容器的功能與我們預期的一樣,

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

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

docker ps

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

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

你應該得到的輸出是:

{“score”:[1,2]}

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

docker stop test-api

將印象推送到 DockerHub 注冊表

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

docker push alexioannides/test-ml-score-api

我們現在可以看到,我們為印象選擇的命名約定與我們的目標圖像注冊表有內在的聯系(需要時,你需要插入自己的帳戶 ID)。上傳完成后,登錄 DockerHub,通過 DockerHub 用戶界面確認上傳成功。

安裝 Kubernetes 供本機開發和測試

安裝單節點 Kubernetes 集群有兩個適合本機開發和測試的選項:通過 Docker 桌面客戶端,或者通過 Minikube。

通過 Docker 桌面安裝 Kubernetes

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

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

kubectl cluster-info

返回應該如下:

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 上,啟動和運行 Minikube 所需的步驟如下:

確保安裝了安裝包管理器

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

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

要啟動測試群集:

minikube start --memory 409

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

kubectl cluster-info

其中 kubectl 是用于與 Kubernetes API 交互的標準命令行界面(CLI)客戶機。

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

要在 Kubernetes 上啟動我們的測試模型評分服務,我們將首先在 Kubernetes Pod 中部署容器化服務,它的推出由部署管理,而部署又會創建一個 ReplicaSet,這是通過下面的代碼實現的:

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

要檢查部署運行的狀態,

kubectl rollout status deployment test-ml-score-api

為了看到運行的 pod,

kubectl get pod

可以使用端口轉發來測試單個容器,而無需將其公開到公共網絡。要使用此功能,請打開一個單獨的終端并運行。例如,

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

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

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

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

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

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

minikube service list

現在我們測試我們的新服務器,例如,使用 Docker 桌面:

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

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

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

在 Google 云平臺上配置多節點集群

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

啟動并運行 Google 云平臺

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

brew cask install google-cloud-sdk

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

gcloud components install kubectl

然后我們需要初始化 SDK

gcloud init

它將打開瀏覽器并指導你完成必要的身份驗證步驟,確保選擇創建的項目以及默認區域。

初始化 Kubernetes 群集

首先,在 GCP UI 中,訪問 Kubernetes 引擎頁面以觸發Kubernetes API 啟動。然后從命令行啟動一個集群:

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

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

在 GCP 上啟動容器化 ML 模型評分服務器

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

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 上測試我們的服務器,例如:

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

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

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

然后在一個單獨的終端上:

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

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

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

在 Kubectl 上下文之間切換

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

kubectl config use-context docker-desktop

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

kubectl config get-contexts

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

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

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

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

kubectl get all --namespace test-ml-app

同樣,當使用任何 kubectl get 命令檢查測試應用程序的不同組件時,設置 --namespace 標志?;蛘?,我們可以將新的名稱空間設置為默認上下文:

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

然后運行:

kubectl get all

在這里,我們可以使用

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

拆掉我們可以使用的應用程序,

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

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

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

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

安裝 Helm

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

brew install kubernetes-helm

Helm 依賴于一個專用的部署服務器,稱為「Tiller」,它運行在我們希望部署應用程序的 Kubernetes 集群中。在部署 Tiller 之前,我們需要創建一個在集群范圍內的超級用戶角色來分配給它,以便它可以在任何命名空間中創建和修改 Kubernetes 資源。為了實現這一點,我們首先創建一個服務帳戶,通過此方法,pod 在與服務帳戶關聯時,可以向 Kubernetes API 進行驗證,以便能夠查看、創建和修改資源。我們在 kube 系統名稱空間中創建它,如下所示,

kubectl --namespace kube-system create serviceaccount tiller

然后在此服務帳戶和群集角色之間創建綁定,顧名思義,該綁定會授予群集范圍內的管理權限:

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

我們現在可以將 Helm Tiller 部署到 Kubernetes 集群,并使用所需的訪問權限,

helm init --service-account tiller

使用 Helm 進行部署

要創建新的 Helm 布署定義,

helm create NAME-OF-YOUR-HELM-CHART

這將創建一個新的目錄,例如 helm-ml-score-app,它包含在這個存儲庫中,具有以下高級目錄結構,

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

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

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

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

在此特定實例中 .Values.app.namespace 插入 app.namespace 變量,其默認值在 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 中的負載平衡器服務的詳細信息,

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 }}

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

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

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

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

這將自動打印發布的狀態,以及 Helm 賦予它的名稱和呈現給終端的 NOTES.txt 的內容。列出所有可用的 Helm 版本及其名稱:

helm list

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

helm status test-ml-app

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

helm delete test-ml-app

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

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

為 Seldon 構建 ML 組件

要使用 Seldon 部署 ML 組件,我們需要創建 Seldon 兼容的 Docker 映像。我們首先遵循相關指導原則來定義一個 Python 類,該類封裝了一個用于 Seldon 部署的 ML 模型。它包含在 seldon-ml-score-component 目錄中,其內容類似于 py-flask-ml-score-api 中的內容:

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

構建 Docker 印像以用于 Seldon

Seldon 要求 ML 評分服務器的 Docker 映像以特定的方式構造:

ML 模型必須封裝在一個 Python 類中,其中包含一個帶有特定簽名(或接口)的 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 入口點運行 Seldon 服務,它和上面的點都可以看到 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

有關詳細信息,請參閱 Seldon 官方文件。接下來,建立這個印象:

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

在將此印像推送到注冊表之前,我們需要確保它按預期工作。在本地 Docker 守護進程上啟動映像:

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

然后向它發送一個請求:

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

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

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

使用 Seldon Core 部署 ML 組件

我們現在繼續將 Seldon 兼容的 ML 組件部署到 Kubernetes 集群,并從中創建一個容錯和可縮放的服務器。為了實現這一目標,我們將使用 Helm 表部署 Seldon Core。我們首先創建一個包含 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

接下來,我們為 Kubernetes 部署 Ambassador API 網關,它將充當 Kubernetes 集群的入口點。我們將為 Ambassador 部署創建一個專用名稱空間:

kubectl create namespace ambassador

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

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

如果我們現在運行 helm list --namespace seldon-core,我們應該看到 seldon core 已經部署好了,并且正在等待 seldon ML 組件的部署。為了部署我們的 Seldon ML 模型評分服務器,我們為它創建了一個單獨的名稱空間:

kubectl create namespace test-ml-seldon-app

然后配置并部署另一個官方 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

注意,通過重復最后兩個步驟,現在可以使用 Seldon 部署多個 ML 模型,它們都將通過同一個 Ambassador API 網關自動訪問,我們現在將使用該網關測試 Seldon ML 模型評分服務器。

通過 Ambassador 網關 API 測試 API

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

kubectl -n ambassador get service ambassador

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

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 實際上使用的是:

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

如果你的請求成功了,那么你應該會看到如下的結果:

{“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] } }}

清理

要刪除使用上述步驟部署的單個 Seldon ML 模型及其命名空間,請運行:

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

如果有一個 GCP 集群需要終止運行:

gcloud container clusters delete k8s-test-cluster

同樣,如果使用 Minikube:

minikube stopminikube delete

如果在 Docker 桌面上運行,導航到 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/

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 應用程序
    +關注

    關注

    37

    文章

    3265

    瀏覽量

    57678
  • ML
    ML
    +關注

    關注

    0

    文章

    149

    瀏覽量

    34642
  • python
    +關注

    關注

    56

    文章

    4792

    瀏覽量

    84628
收藏 人收藏

    評論

    相關推薦

    服務器容器的區別和聯系

    服務器采用虛擬機方式,每個虛擬機擁有獨立操作系統和資源,適用于高性能、高穩定性應用如數據庫和企業資源規劃系統。容器技術則在宿主操作系統上創建多個獨立容器,共享操作系統和資源,適合無狀態、彈性
    的頭像 發表于 12-02 11:41 ?110次閱讀

    docker-compose配置文件內容詳解以及常用命令介紹

    需要的所有服務(例如:Web服務器、數據庫、緩存等)并輕松管理它們。 Docker Compose 使用的三步驟: 使用 Dockerfile 定義應用程序的環境
    的頭像 發表于 12-02 09:29 ?230次閱讀
    <b class='flag-5'>docker</b>-compose配置文件內容詳解以及常用命令介紹

    服務器是虛擬技術嗎?簡單介紹

    服務器的定義與特性 云服務器,又稱云計算服務器或云主機,是云計算服務體系中的項關鍵服務。它利用
    的頭像 發表于 10-25 16:53 ?208次閱讀

    恒訊科技分析:機柜通??梢匀菁{多少臺服務器

    簡單有效的方法。但是機柜通??梢匀菁{多少臺服務器?其實機柜的大小各不相同,所以容納服務器
    的頭像 發表于 10-23 15:08 ?212次閱讀
    恒訊科技分析:<b class='flag-5'>一</b><b class='flag-5'>個</b>機柜通??梢匀菁{多少臺<b class='flag-5'>服務器</b>?

    Kubernetes集群搭建容器云需要幾臺服務器?

    Kubernetes集群搭建容器云需要幾臺服務器?至少需要4臺服務器。搭建容器云所需的服務器數量以及具體的搭建步驟,會根據所選用的技術棧、業
    的頭像 發表于 10-21 10:06 ?154次閱讀

    入門級攻略:如何容器部署微服務?

    步理解容器基礎,第二步創建Dockerfile,第三步構建推送鏡像,第四步部署微服務,第五步管理微服務、第六步優化更新。
    的頭像 發表于 10-09 10:08 ?149次閱讀

    容器云跟服務器有啥區別?五區別要知道

    容器云和服務器分別代表了不同的計算資源管理和部署方式,兩者在多個方面存在顯著差異,這些差異主要體現在定義、服務器、虛擬方式、資源管理、操作自由度、應用場景等方面。以下是對兩者區別的詳
    的頭像 發表于 09-18 14:03 ?221次閱讀

    常見的服務器容器和漏洞類型匯總

    常見的服務器容器包括KubeSphere、Tomcat、Nginx、Apache等,它們在提供便捷的服務部署和靈活的網絡功能的同時,也可能存在著定的安全風險。這些
    的頭像 發表于 08-29 10:39 ?214次閱讀

    ARM平臺實現Docker容器技術

    及依賴包到可移植的鏡像中,然后發布到任何流行的Linux或Windows機器上,亦可實現虛擬容器是完全使用沙箱機制,相互之間不會有任何接口。使用
    發表于 07-25 14:36

    ARM平臺實現Docker容器技術

    及依賴包到可移植的鏡像中,然后發布到任何流行的Linux或Windows機器上,亦可實現虛擬。容器是完全使用沙箱機制,相互之間不會有任何接口。使用
    發表于 07-17 11:05

    Jtti:Docker會替代調虛機嗎

    Docker是計算虛擬種方式,和使用虛擬機進行虛擬是類似的。由于近幾年Docker技術的流行和發展。所以單獨介紹
    的頭像 發表于 07-12 14:38 ?312次閱讀
    Jtti:<b class='flag-5'>Docker</b>會替代調虛機嗎

    寶塔面板Docker鍵安裝:部署GPTAcademic,開發私有GPT學術優化工具

    gptacademic,并將其部署到服務器上,從而開發出專屬于自己的GPT學術優化工具。 ? 寶塔面板Docker鍵安裝gptacademi
    的頭像 發表于 07-02 11:58 ?2563次閱讀
    寶塔面板<b class='flag-5'>Docker</b><b class='flag-5'>一</b>鍵安裝:部署GPTAcademic,開發私有GPT學術優化工具

    Docker容器實現開機自動啟動策略

    如果你的容器依賴于其他服務(例如數據庫或其他容器),你需要確保這些服務在你的容器啟動之前就已經可用。這可以通過編排工具如
    的頭像 發表于 03-11 10:33 ?2848次閱讀

    ARM平臺實現Docker容器技術

    ,亦可實現虛擬。容器是完全使用沙箱機制,相互之間不會有任何接口。使用Docker,可像管理應用程序樣管理基礎結構。通過利用Docker
    的頭像 發表于 03-07 13:48 ?798次閱讀
    ARM平臺實現<b class='flag-5'>Docker</b><b class='flag-5'>容器</b>技術

    linux服務器和windows服務器

    ,Linux服務器表現出更好的性能和穩定性,因此廣泛應用于科學計算、大數據處理和網絡服務器等領域。 另方面,Windows服務器是由微軟開發和維護的
    發表于 02-22 15:46
    主站蜘蛛池模板: 亚洲国产精品免费线观看视频| 国产在线视频在线观看| 97国产精品久久精品国产| 亚洲人成无码久久久AAA片| 我的漂亮朋友在线观看全集免费 | 中文字幕a有搜索网站| 亚洲 欧美 日本 国产 高清| 色橹橹欧美在线观看视频高| 日本xxxx19| 日本无码免费久久久精品| 青青草原网址| 让人爽到湿的小黄书| 琪琪电影午夜理论片77网| 青草国产超碰人人添人人碱| 啪啪啪社区| 色婷婷国产精品视频一区二区三区| 日本电影小姐| 十九禁啊啪射视频在线观看| 四虎影视国产精品亚洲精品| 午夜精品久久久久久久99蜜桃 | 久久综合久久鬼| 狂野猛交xxxx吃奶| 棉签和冰块怎么弄出牛奶视频 | 久久精品一本到99热| 久久视热频国产这里只有精品23| 久久久免费观看| 美女脱了内裤张开腿让男人桶到爽| 男污女XO猛烈的动态图| 欧美性爱 先锋影音| 色小姐.com| 亚洲国产AV无码综合在线| 妖精视频在线观看高清| 最近的2019中文字幕国语HD| 国产露脸A片国语露对白| 能看的黄页最新网站| 棉袜足j吐奶视频| 日本黄色官网| 无码免费视频AAAAAA片草莓| 亚洲精品高清在线观看| 中文国产在线观看| jk制服啪啪网站|