成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

容器化人工智能:使用Docker和Kubernetes部署機器學習模型的實踐指南

譯文 精選
人工智能 機器學習
容器化將應用程序打包為輕量級、可移植的單元。對于機器學習(ML)來說,這確保了環境的可重復性和易于部署。例如,容器將機器學習模型代碼與其確切的依賴項捆綁在一起,因此其結果可以在不同機器上保持一致,然后它們可以在任何Docker主機或云平臺上運行,從而提高了可移植性。

譯者 | 李睿

審校 | 重樓

通過學習這一實踐指南,用戶將了解如何使用Docker將機器學習模型實現容器化,并使用KubernetesAWS EKS上進行部署,輕松構建、提供服務并擴展其模型。

容器化將應用程序打包為輕量級、可移植的單元。對于機器學習(ML)來說,這確保了環境的可重復性和易于部署。例如,容器將機器學習模型代碼與其確切的依賴項捆綁在一起,因此其結果可以在不同機器上保持一致,然后它們可以在任何Docker主機或云平臺上運行,從而提高了可移植性。像Kubernetes這樣的編排平臺增加了可擴展性,可以根據需要自動啟動或關閉容器。容器還將機器學習環境與其他應用程序隔離開來,從而防止依賴沖突。簡而言之,將機器學習模型封裝到Docker容器中,可以使其更容易在生產環境中可靠地遷移、運行和擴展。

  • 可重復性:容器映像捆綁了模型、庫和運行時(例如Python、scikit-learn),因此機器學習服務在任何系統上的行為都保持一致。
  • 可移植性:同一個容器可以在開發人員的筆記本電腦、持續集成(CI)管道或云計算虛擬機上運行,而無需更改。
  • 可擴展性:容器平臺(Docker+Kubernetes)可以在負載下復制實例。Kubernetes可以自動擴展運行機器學習服務的Pod以滿足需求。
  • 隔離性:每個容器與其他容器和主機操作系統隔離,避免版本沖突或“在我的機器上能運行”的問題。

有了這些優勢,可以通過具體示例進行演示:使用Python訓練一個簡單模型,通過Flask API提供服務,然后將其容器化并部署到AWS EKS Kubernetes集群上。

構建和提供示例機器學習模型

首先,創建一個簡單的Scikit-Learn模型。使用Iris數據集訓練一個決策樹,然后用joblib保存模型。代碼如下:

1 # train_model.py
2 from sklearn.datasets import load_iris
3 from sklearn.tree import DecisionTreeClassifier
4 import joblib
5
6 iris = load_iris()
7 X, y = iris.data, iris.target
8 model = DecisionTreeClassifier()
9 model.fit(X, y)
10 joblib.dump(model, 'model.pkl')

這將生成model.pkl。接下來,編寫一個REST API來提供預測服務。例如,使用Flask加載模型并根據JSON輸入進行預測:

1 # app.py
2 from flask import Flask, request, jsonify
3 import joblib
4
5 app = Flask(__name__)
6 model = joblib.load('model.pkl')
7
8 @app.route('/predict', methods=['POST'])
9 def predict():
10 data = request.get_json()
11 features = data.get('features')
12 prediction = model.predict([features])
13 return jsonify({'prediction': int(prediction[0])})
14
15 if __name__ == '__main__':
16 app.run(host='0.0.0.0', port=5000)

在這里,客戶端發送類似{"features": [5.1, 3.5, 1.4, 0.2]} JSON,服務器返回預測的類。

將機器學習服務Docker

為了實現容器化,需要編寫一個DockerfileDocker使用客戶端-服務器架構Docker CLIDocker守護進程交互,以構建鏡像,從注冊表中獲取層,并運行容器。下圖說明了這種架構:

Docker使用客戶端-服務器模型,Docker CLI與管理鏡像和容器的Docker守護進程進行通信。每個Docker映像都是一個分層的文件系統,其中包括應用程序代碼和依賴項。在這里,將把Flask API和模型打包到一個映像中。

在項目目錄中創建一個Dockerfile

1 # Dockerfile
2 FROM python:3.9-slim
3 WORKDIR /app
4 COPY requirements.txt ./
5 RUN pip install -r requirements.txt
6 COPY model.pkl app.py ./
7 EXPOSE 5000
8 CMD ["python", "app.py"]

還包括一個requirements.txt,其中列出Python依賴項:

1 flask
2 scikit-learn
3 joblib

在本地構建Docker鏡像:(bash)。

Docker build -t my-ml-app:latest

這將創建一個包含模型服務器的映像my-ml-app:latest,可以通過運行(bash)來驗證:

curl -X POST -H "Content-Type: application/json" \ 
-d '{"features": [5.1, 3.5, 1.4, 0.2]}' \ http://localhost:5000/predict

你可以得到一個JSON響應,如下所示:

1 {"prediction":0}

這樣,機器學習模型就實現了容器化,可以在任何Docker可用的地方運行。

Kubernetes 基礎概念:Pod、DeploymentsServices

Kubernetes集群由一個控制平臺和多個工作節點組成。控制平臺(有時稱為Master)管理基本組件,例如如etcd(用于存儲狀態)、API服務器、調度程序、控制器管理器。工作節點在Pod中運行容器。其架構如下:

Kubernetes集群架構包括控制平臺和工作節點。Kubernetes集群遵循master-worker模型??刂破脚_(圖左)保存集群狀態(etcd、API服務器、調度程序、控制器管理器)。工作節點(圖右)運行kubelet和代理,并采用容器托管Pod。

關鍵概念:

  • PodPod是最小的可部署單元。一個Pod封裝一個或多個共享網絡/存儲的容器。Pod在節點上運行,并被視為單個單元。
  • DeploymentDeployment負責監督和維護一組Pod的控制器,確保所需數量的Pod正在運行和更新。聲明一個Deployment,指定需要多少個副本,Kubernetes確保有許多Pod正在運行。
  • ServiceService是一種抽象,它對一組Pod進行分組,并為訪問它們建立一致的策略,無論其各自的IP地址或生命周期如何。ServicePod提供穩定的網絡端點(ClusterIP LoadBalancer),支持負載均衡和發現。

在實踐中,將創建一個Deployment來保持模型服務器的兩個副本的運行,并創建一個Service來公開它們。

部署到AWS EKS

現在將Docker映像推送到注冊表中,并部署到AWS EKSElastic Kubernetes Service)上的Kubernetes。首先,標記和推送映像(使用Docker HubECR)。例如,使用Docker Hub:bash

docker tag my-ml-app:latest your_dockerhub_user/my-ml-app:latest docker push your_dockerhub_user/my-ml-app:latest

your_dockerhub_user替換為Docker Hub用戶名。

接下來,設置一個EKS集群(需要配置eksctlAWS CLI)。如果還沒有集群,AWS提供了創建集群的指南。例如:(bash

create cluster -name ml-model-cluster -region us-west-2 -nodes

這將創建一個具有兩個工作節點的基本EKS集群。確保kubectl上下文指向新的集群(AWS文檔解釋了如何連接)。

創建一個使用容器映像的Kubernetes部署清單(deploy.yaml):

1 apiVersion: apps/v1
2 kind: Deployment
3 metadata:
4 name: ml-model-deployment
5 spec:
6 replicas: 2
7 selector:
8 matchLabels:
9 app: ml-model
10 template:
11 metadata:
12 labels:
13 app: ml-model
14 spec:
15 containers:
16 - name: ml-model
17 image: your_dockerhub_user/my-ml-app:latest
18 ports:
19 - containerPort: 9000

以及一個ServiceService.yaml,用于在外部公開它(在EKS上使用LoadBalancer類型): YAML

1 apiVersion: v1
2 kind: Service
3 metadata:
4 name: ml-model-service
5 spec:
6 type: LoadBalancer
7 selector:
8 app: ml-model
9 ports:
10 - protocol: TCP
11 port: 80
12 targetPort: 9000

將這些應用于集群:(bash

kubectl apply -f deployment.yaml
kubectl apply -f service.yaml

檢查狀態:

kubectl get deployments
kubectl get pods
kubectl get svc ml-model-service

LoadBalancer配置完成之后,其Service將獲得外部IP(或 AWS DNS)。一旦準備就緒,可以向該地址的80端口發送請求,它將轉發到端口9000上的Pod

結論

現在已經將scikit-learn模型實現容器化,使用Flask為其提供服務,并將其部署在Kubernetes上。為了生產就緒,可以考慮以下最佳實踐:

  • 擴展:使用kubectl scaleKubernetes自動擴展根據CPU/內存或請求率調整副本。
  • 監控:部署監控以跟蹤Pod運行狀況和模型性能。收集日志(例如使用Fluentd/Elasticsearch)用于故障排除。
  • CI/CD使用管道(例如GitHub Actions、JenkinsAWS CodePipeline)自動化工作流,這些管道可以重建映像并在新模型版本上更新部署(Deployment)。
  • 安全性:使用Kubernetes RBAC和網絡策略來保護訪問??紤]掃描映像以查找漏洞,并使用與IAM集成的私有注冊表(AWS ECR)。
  • 高級機器學習運維:探索KubeflowSeldon等專用模型服務工具,以及MLflow Neptune等模型跟蹤工具。如果模型需要這些工具,可以使用GPU或多架構映像。

通過將模型容器化并利用Kubernetes,可以獲得可移植性、可擴展性和一致性。現在,可以對機器學習服務進行迭代,在不同云環境中部署更新。通過進一步的自動化和監控,容器化機器學習服務將為應對生產工作負載的增長做好準備。原文標題:Containerizing AI: Hands-On Guide to Deploying ML Models With Docker and Kubernetes,作者:Bhanu Sekhar Guttikonda

責任編輯:姜華 來源: 51CTO
相關推薦

2020-09-07 11:28:09

人工智能機器學習AI

2024-10-12 08:00:00

機器學習Docker

2017-07-13 10:50:22

人工智能機器學習認知計算

2023-05-29 15:58:25

機器學習人工智能

2023-09-05 10:41:28

人工智能機器學習

2019-03-06 09:00:00

機器學習人工智能

2021-04-16 09:53:45

人工智能機器學習深度學習

2015-10-10 09:32:24

機器學習人工智能

2021-10-29 11:00:04

測試和維護人工智能機器學習

2021-12-01 22:55:45

人工智能機器學習深度學習

2021-04-08 15:42:13

人工智能機器學習

2017-03-18 16:28:40

人工智能機器學習深度學習

2021-02-26 10:02:13

人工智能深度學習機器學習

2022-06-01 14:33:59

人工智能交通運輸機器學習

2020-10-16 10:19:10

智能

2017-04-18 15:49:24

人工智能機器學習數據

2021-03-30 13:45:00

人工智能

2016-12-05 14:37:25

人工智能機器學習

2021-10-08 10:26:37

人工智能機器學習AI

2023-10-12 15:55:42

人工智能機器學習
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩中文视频 | 99久久婷婷国产综合精品电影 | 日本三级全黄三级a | 成人av网站在线观看 | 韩国精品一区 | 黄 色 毛片免费 | 日韩中文字幕在线视频 | www.久久99 | 国产一区二区三区久久 | 国产一级一片免费播放 | 天堂在线www | 日韩激情在线 | 激情网站 | 国产h视频 | 亚洲精精品| 国产高清免费 | 日韩一区二区三区在线观看视频 | 99热成人在线 | 精品国产一级片 | 日本天堂一区二区 | 91九色在线观看 | 波多野结衣中文字幕一区二区三区 | 国产一区二区三区在线视频 | 欧美精品网站 | 欧美日韩久久 | 国产一区二区三区四区三区四 | 久久久精品一区二区 | 黑人精品欧美一区二区蜜桃 | 欧美一级欧美三级在线观看 | 久久久久九九九女人毛片 | 日本一区高清 | 一区视频在线播放 | 一级毛片免费 | 欧美jizzhd精品欧美巨大免费 | 国产精品a一区二区三区网址 | 精品av天堂毛片久久久借种 | 一区二区三区四区视频 | 超黄毛片 | 亚洲电影一区二区三区 | 日韩精品成人 | 在线观看中文字幕av |