自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何在Kubernetes上部署一個深度學(xué)習(xí)模型

開發(fā) 前端 深度學(xué)習(xí)
本文演示了如何使用 Kubermatic Kubernetes 平臺對圖像識別預(yù)測的深度學(xué)習(xí)模型進行部署、擴展與管理。
  • 了解如何使用 Kubermatic Kubernetes 平臺來部署、擴展與管理圖像識別預(yù)測的深度學(xué)習(xí)模型。

隨著企業(yè)增加了對人工智能(AI)、機器學(xué)習(xí)(ML)與深度學(xué)習(xí)(DL)的使用,出現(xiàn)了一個關(guān)鍵問題:如何將機器學(xué)習(xí)的開發(fā)進行規(guī)?;c產(chǎn)業(yè)化?這些討論經(jīng)常聚焦于機器學(xué)習(xí)模型本身;然而,模型僅僅只是完整解決方案的其中一環(huán)。為了達到生產(chǎn)環(huán)境的應(yīng)用和規(guī)模,模型的開發(fā)過程必須還包括一個可以說明開發(fā)前后關(guān)鍵活動以及可公用部署的可重復(fù)過程。

本文演示了如何使用 Kubermatic Kubernetes 平臺對圖像識別預(yù)測的深度學(xué)習(xí)模型進行部署、擴展與管理。

[[421057]]

Kubermatic Kubernetes 平臺是一個生產(chǎn)級的開源 Kubernetes 集群管理工具,提供靈活性和自動化,與機器學(xué)習(xí)/深度學(xué)習(xí)工作流程整合,具有完整的集群生命周期管理。

開始

這個例子部署了一個用于圖像識別的深度學(xué)習(xí)模型。它使用了 CIFAR-10 數(shù)據(jù)集,包含了 60,000 張分屬 10 個類別的 32x32 彩色圖,同時使用了 Apache MXNet 的 Gluon 與 NVIDIA GPU 進行加速計算。如果你希望使用 CIFAR-10 數(shù)據(jù)集的預(yù)訓(xùn)練模型,可以查閱其 入門指南。

使用訓(xùn)練集中的樣本對模型訓(xùn)練 200 次,只要訓(xùn)練誤差保持緩慢減少,就可以保證模型不會過擬合。下方圖展示了訓(xùn)練的過程: 

深度學(xué)習(xí)模型訓(xùn)練 loss 圖 

訓(xùn)練結(jié)束后,必須保存模型訓(xùn)練所得到的參數(shù),以便稍后可以加載它們:

  1. file_name = "net.params" 
  2. net.save_parameters(file_name) 

一旦你的模型訓(xùn)練好了,就可以用 Flask 服務(wù)器來封裝它。下方的程序演示了如何接收請求中的一張圖片作為參數(shù),并在響應(yīng)中返回模型的預(yù)測結(jié)果:

  1. from gluoncv.model_zoo import get_model 
  2. import matplotlib.pyplot as plt 
  3. from mxnet import gluon, nd, image 
  4. from mxnet.gluon.data.vision import transforms 
  5. from gluoncv import utils 
  6. from PIL import Image 
  7. import io 
  8. import flask 
  9. app = flask.Flask(__name__) 
  10. @app.route("/predict",methods=["POST"]) 
  11. def predict(): 
  12.     if flask.request.method == "POST"
  13.         if flask.request.files.get("img"): 
  14.            img = Image.open(io.BytesIO(flask.request.files["img"].read())) 
  15.             transform_fn = transforms.Compose([ 
  16.             transforms.Resize(32), 
  17.             transforms.CenterCrop(32), 
  18.             transforms.ToTensor(), 
  19.             transforms.Normalize([0.4914, 0.4822, 0.4465], [0.2023, 0.1994, 0.2010])]) 
  20.             img = transform_fn(nd.array(img)) 
  21.             net = get_model('cifar_resnet20_v1', classes=10) 
  22.             net.load_parameters('net.params'
  23.             pred = net(img.expand_dims(axis=0)) 
  24.             class_names = ['airplane''automobile''bird''cat''deer'
  25.                        'dog''frog''horse''ship''truck'
  26.             ind = nd.argmax(pred, axis=1).astype('int'
  27.             prediction = 'The input picture is classified as [%s], with probability %.3f.'
  28.                          (class_names[ind.asscalar()], nd.softmax(pred)[0][ind].asscalar()) 
  29.     return prediction 
  30. if __name__ == '__main__'
  31.    app.run(host='0.0.0.0'

容器化模型

在將模型部署到 Kubernetes 前,你需要先安裝 Docker 并使用你的模型創(chuàng)建一個鏡像。

下載、安裝并啟動 Docker:

  1. sudo yum install -y yum-utils device-mapper-persistent-data lvm2 
  2. sudo yum-config-manager --add-repo <https://download.docker.com/linux/centos/docker-ce.repo> 
  3. sudo yum install docker-ce 
  4. sudo systemctl start docker 

創(chuàng)建一個你用來管理代碼與依賴的文件夾:

  1. mkdir kubermatic-dl 
  2. cd kubermatic-dl 

創(chuàng)建 requirements.txt 文件管理代碼運行時需要的所有依賴:

  1. flask 
  2. gluoncv 
  3. matplotlib 
  4. mxnet 
  5. requests 
  6. Pillow 

創(chuàng)建 Dockerfile,Docker 將根據(jù)這個文件創(chuàng)建鏡像:

  1. FROM python:3.6 
  2. WORKDIR /app 
  3. COPY requirements.txt /app 
  4. RUN pip install -r ./requirements.txt 
  5. COPY app.py /app 
  6. CMD ["python""app.py"

這個 Dockerfile 主要可以分為三個部分。首先,Docker 會下載 Python 的基礎(chǔ)鏡像。然后,Docker 會使用 Python 的包管理工具 pip 安裝 requirements.txt 記錄的包。最后,Docker 會通過執(zhí)行 python app.py 來運行你的腳本。

構(gòu)建 Docker 容器:

  1. sudo docker build -t kubermatic-dl:latest . 

這條命令使用 kubermatic-dl 鏡像為你當(dāng)前工作目錄的代碼創(chuàng)建了一個容器。

使用

  1. sudo docker run -d -p 5000:5000 kubermatic-dl 

命令檢查你的容器可以在你的主機上正常運行。

使用

  1. sudo docker ps -a 

命令查看你本地容器的運行狀態(tài):

查看容器的運行狀態(tài) 

將你的模型上傳到 Docker Hub

在向 Kubernetes 上部署模型前,你的鏡像首先需要是公開可用的。你可以通過將你的模型上傳到 Docker Hub 來將它公開。(如果你沒有 Docker Hub 的賬號,你需要先創(chuàng)建一個)

在終端中登錄 Docker Hub 賬號:

  1. sudo docker login 

給你的鏡像打上標(biāo)簽,這樣你的模型上傳到 Docker Hub 后也能擁有版本信息:

  1. sudo docker tag <your-image-id> <your-docker-hub-name>/<your-app-name
  2. sudo docker push <your-docker-hub-name>/<your-app-name

給鏡像打上 tag 

使用

  1. sudo docker images 

命令檢查你的鏡像的 ID。

部署你的模型到 Kubernetes 集群

首先在 Kubermatic Kubernetes 平臺創(chuàng)建一個項目, 然后根據(jù) 快速開始 創(chuàng)建一個 Kubernetes 集群。

創(chuàng)建一個 Kubernetes 集群 

下載用于訪問你的集群的 kubeconfig,將它放置在下載目錄中,并記得設(shè)置合適的環(huán)境變量,使得你的環(huán)境能找到它:

Kubernetes 集群示例

使用 kubectl 命令檢查集群信息,例如,需要檢查 kube-system 是否在你的集群正常啟動了就可以使用命令 kubectl cluster-info。 

查看集群信息 

為了在集群中運行容器,你需要創(chuàng)建一個部署用的配置文件(deployment.yaml),再運行 apply 命令將其應(yīng)用于集群中:

  1. apiVersion: apps/v1 
  2. kind: Deployment 
  3. metadata: 
  4.   name: kubermatic-dl-deployment 
  5. spec: 
  6.   selector: 
  7.     matchLabels: 
  8.       app: kubermatic-dl 
  9.   replicas: 3 
  10.   template: 
  11.     metadata: 
  12.       labels: 
  13.         app: kubermatic-dl 
  14.     spec: 
  15.      containers: 
  16.      - name: kubermatic-dl 
  17.        image: kubermatic00/kubermatic-dl:latest 
  18.        imagePullPolicy: Always 
  19.        ports: 
  20.        - containerPort: 8080 
  1. kubectl apply -f deployment.yaml` 

為了將你的部署開放到公網(wǎng)環(huán)境,你需要一個能夠給你的容器創(chuàng)建外部可達 IP 地址的服務(wù):

  1. kubectl expose deployment kubermatic-dl-deployment --type=LoadBalancer --port 80 --target-port 5000` 

就快大功告成了!首先檢查你布署的服務(wù)的狀態(tài),然后通過 IP 請求的你圖像識別 API:

  1. kubectl get service 

 

獲取請求圖像識別 API 的 IP 地址 

最后根據(jù)你的外部 IP 使用以下兩張圖片對你的圖像識別服務(wù)進行測試: 

[[421059]]

馬 

[[421060]]

測試 API 

總結(jié)

在這篇教程中,你可以創(chuàng)建一個深度學(xué)習(xí)模型,并且使用 Flask 提供 REST API 服務(wù)。它介紹了如何將應(yīng)用放在 Docker 容器中,如何將這個鏡像上傳到 Docker Hub 中,以及如何使用 Kubernetes 部署你的服務(wù)。只需幾個簡單的命令,你就可以使用 Kubermatic Kubernetes 平臺部署該應(yīng)用程序,并且開放服務(wù)給別人使用。

 

責(zé)任編輯:未麗燕 來源: Linux中國
相關(guān)推薦

2021-12-02 08:00:00

Kubernetes集群容器

2024-07-22 15:49:07

KubernetesRedis

2021-12-03 23:21:45

數(shù)據(jù)庫MySQLKubernetes

2020-08-25 07:48:17

Kubernetes集群系統(tǒng)

2015-10-10 15:56:22

OpenShiftNodeJS部署PaaS

2025-03-28 08:14:18

2015-10-23 17:29:24

AtomicOpenStack 應(yīng)用部署

2017-10-13 15:59:24

iPhone機器學(xué)習(xí)iOS

2021-05-17 14:51:23

鏈碼區(qū)塊鏈網(wǎng)絡(luò)

2023-02-07 16:36:34

機器學(xué)習(xí)Docker無服務(wù)器

2020-12-04 18:44:29

KubernetesHTTPS Wordpress

2024-08-05 14:17:59

大型語言模型適配器LLM

2017-06-06 10:14:55

KerasTensorFlow深度學(xué)習(xí)

2022-05-06 12:13:55

模型AI

2020-05-21 14:05:17

TFserving深度學(xué)習(xí)架構(gòu)

2021-07-20 08:00:00

集群Elasticsear工具

2019-11-07 14:00:36

MySQL數(shù)據(jù)庫SQL

2024-06-13 08:36:11

2022-02-17 11:08:00

KubernetesMySQL運維

2019-12-16 15:28:00

算法深度學(xué)習(xí)人工智能
點贊
收藏

51CTO技術(shù)棧公眾號