偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

開(kāi)發(fā) 前端 深度學(xué)習(xí)
本文演示了如何使用 Kubermatic Kubernetes 平臺(tái)對(duì)圖像識(shí)別預(yù)測(cè)的深度學(xué)習(xí)模型進(jìn)行部署、擴(kuò)展與管理。
  • 了解如何使用 Kubermatic Kubernetes 平臺(tái)來(lái)部署、擴(kuò)展與管理圖像識(shí)別預(yù)測(cè)的深度學(xué)習(xí)模型。

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

本文演示了如何使用 Kubermatic Kubernetes 平臺(tái)對(duì)圖像識(shí)別預(yù)測(cè)的深度學(xué)習(xí)模型進(jìn)行部署、擴(kuò)展與管理。

[[421057]]

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

開(kāi)始

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

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

深度學(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ù)器來(lái)封裝它。下方的程序演示了如何接收請(qǐng)求中的一張圖片作為參數(shù),并在響應(yīng)中返回模型的預(yù)測(cè)結(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)建一個(gè)鏡像。

下載、安裝并啟動(dò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)建一個(gè)你用來(lái)管理代碼與依賴的文件夾:

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

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

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

創(chuàng)建 Dockerfile,Docker 將根據(jù)這個(gè)文件創(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"

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

構(gòu)建 Docker 容器:

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

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

使用

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

命令檢查你的容器可以在你的主機(jī)上正常運(yùn)行。

使用

  1. sudo docker ps -a 

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

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

將你的模型上傳到 Docker Hub

在向 Kubernetes 上部署模型前,你的鏡像首先需要是公開(kāi)可用的。你可以通過(guò)將你的模型上傳到 Docker Hub 來(lái)將它公開(kāi)。(如果你沒(méi)有 Docker Hub 的賬號(hào),你需要先創(chuàng)建一個(gè))

在終端中登錄 Docker Hub 賬號(hào):

  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 平臺(tái)創(chuàng)建一個(gè)項(xiàng)目, 然后根據(jù) 快速開(kāi)始 創(chuàng)建一個(gè) Kubernetes 集群。

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

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

Kubernetes 集群示例

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

查看集群信息 

為了在集群中運(yùn)行容器,你需要?jiǎng)?chuàng)建一個(gè)部署用的配置文件(deployment.yaml),再運(yùn)行 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` 

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

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

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

  1. kubectl get service 

 

獲取請(qǐng)求圖像識(shí)別 API 的 IP 地址 

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

[[421059]]

馬 

[[421060]]

測(cè)試 API 

總結(jié)

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

 

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

2021-12-02 08:00:00

Kubernetes集群容器

2024-07-22 15:49:07

KubernetesRedis

2021-12-03 23:21:45

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

2020-08-25 07:48:17

Kubernetes集群系統(tǒng)

2015-10-10 15:56:22

OpenShiftNodeJS部署PaaS

2015-10-23 17:29:24

AtomicOpenStack 應(yīng)用部署

2025-03-28 08:14:18

2017-10-13 15:59:24

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

2021-05-17 14:51:23

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

2020-12-04 18:44:29

KubernetesHTTPS Wordpress

2023-02-07 16:36:34

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

2024-08-05 14:17:59

大型語(yǔ)言模型適配器LLM

2021-07-20 08:00:00

集群Elasticsear工具

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)

2024-06-13 08:36:11

2019-11-07 14:00:36

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

2022-02-17 11:08:00

KubernetesMySQL運(yùn)維
點(diǎn)贊
收藏

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