Kubernetes部署

本指南演示了如何使用BentoML将第一课中的pet分类模型作为REST API服务器部署到Kubernetes集群。

设置

在开始学习本教程之前,请确保您已经掌握了以下内容:

  • Kubernetes启用集群或机器。
    • 本指南使用了库贝内茨推荐的学习环境,minikubeminikube安装:https://kubernetes.io/docs/setup/learning-environment/minikube/
    • 了解更多kubernetes安装信息:https://kubernetes.io/docs/setup/
      • 通过云提供商管理kubernetes集群
        • AWS: https://aws.amazon.com/eks/
        • 谷歌:https://cloud.google.com/kubernetes-engine/
        • Azure: https://docs.microsoft.com/en-us/azure/aks/intro-kubernetes
    • kubectlCLI工具:https://kubernetes.io/docs/tasks/tools/install-kubectl/
  • Docker和Docker集线器已在您的本地系统上正确安装和配置
    • Docker安装说明:https://www.docker.com/get-started
    • 码头工人中心:https://hub.docker.com
  • Python(3.6或以上)和所需的软件包:bentoml,fastai,火炬,torchvision
    • pip安装bentoml fastai==1.0.57 torch==1.4.0 torchvision=0.5.0

使用BentoML构建模型API服务器

下面的代码定义了使用的模型服务器Fastai模型,要求BentoML自动计算出所需的PyPi包。它还定义了一个调用的API预测,这是访问此模型服务器的入口点。API期望FastaiImageData对象作为其输入数据。

# pet_classification.py文件bentoml进口BentoService,api,env,工件bentoml.artifact进口FastaiModelArtifactbentoml.handlers进口FastaiImageHandler@工件([FastaiModelArtifact(“pet_classifier”)))@env((auto_pip_dependencies=真正的)PetClassification(BentoService):@api(FastaiImageHandler)def预测(自我,图像):结果=自我工件pet_classifier预测(图像)返回str(结果)

运行以下代码来创建一个带有宠物分类模型的BentoService SavedBundle,该模型来自Fastai第一课笔记本。BentoService SavedBundle是准备用于生产部署的版本化文件存档。该归档文件包含上面定义的模型服务、python代码依赖关系、PyPi依赖关系和训练过的pet分类模型:

fastai.vision进口*路径=untar_data(url宠物)path_img=路径/“图片”=get_image_files(path_img)废话=64np随机种子(2)帕特=r ' / ([^ /] +) _ \ d + jpg美元”数据=ImageDataBunchfrom_name_re(path_img,,帕特,num_workers=0,ds_tfms=get_transforms(),大小=224,废话=废话)。正常化(imagenet_stats)学习=create_cnn(数据,模型resnet50,指标=error_rate)学习fit_one_cycle(8)学习解冻()学习fit_one_cycle(3.,max_lr=(1 e-6,1的军医))pet_classification进口PetClassification#创建PetClassification实例服务=PetClassification()#打包新训练的模型工件服务(“pet_classifier”,学习)#保存预测服务到磁盘用于模型服务服务保存()

保存BentoService实例后,你现在可以启动一个REST API服务器与模型训练和本地测试API服务器:

启动BentoML API服务器:bentoml PetClassification服务:最新
#发送测试请求#替换PATH_TO_TEST_IMAGE_FILE与其中一张图片{path_img}#示例路径:/Users/user_name/.fastai/data/oxford-iiit-pet/images/shiba_inu_122.jpg旋度-我\——请求帖子\——头“内容类型:多部分/格式”\- f(电子邮件保护)_TO_TEST_IMAGE_FILE”\localhost: 5000 /预测

将模型服务器部署到Kubernetes

构建模型服务器映像

BentoML提供了一种方便的方式来用Docker容器模型API服务器:

  1. 使用bentoml get命令找到SavedBundle目录

  2. 使用SavedBundle目录运行docker构建,该目录包含一个生成的Dockerfile

  3. 运行生成的docker映像来启动一个为模型服务的docker容器

#下载并安装jq, JSON处理器:https://stedolan.github.io/jq/download/saved_path=$ (bentoml PetClassifier:最新q|金桥- r“.uri.uri”)#替换{docker_username}为您的Docker集线器用户名码头工人建造- t{docker_username}/ pet-classifier码头工人推{docker_username}/ pet-classifier

使用码头工人运行命令本地测试docker镜像:

码头工人运行- p5000:5000{docker_username}/ pet-classifier

在另一个终端窗口中,使用旋度命令从上面得到预测结果。

部署到Kubernetes

下面是一个示例YAML文件,用于指定在Kubernetes集群中运行和公开BentoML模型服务器所需的资源。取代{docker_username}Docker Hub用户名,并将其保存到pet-classifier.yaml文件:

apiVersion:v1种类:服务元数据:标签:应用程序:pet-classifier的名字:pet-classifier规范:港口:-的名字:预测港口:5000发送:5000选择器:应用程序:pet-classifier类型:loadbalance---apiVersion:应用程序/ v1种类:部署元数据:标签:应用程序:pet-classifier的名字:pet-classifier规范:选择器:matchLabels:应用程序:pet-classifier模板:元数据:标签:应用程序:pet-classifier规范:容器:-图像:{docker_username}/ pet-classifier的名字:pet-classifier港口:-containerPort:5000

使用kubectl应用命令将模型服务器部署到kubernetes集群。

kubectl应用- fpet-classifier.yaml

使用以下命令检查部署状态kubectl:

kubectl获得svc宠物分类器

发送预测请求

提出预测要求旋度:

#如果你不使用minikube,替换${minikube ip}与您的Kubernetes集群的ip#替换PATH_TO_TEST_IMAGE_FILE旋度-我\——请求帖子\——头“内容类型:多部分/格式”\- f(电子邮件保护)_TO_TEST_IMAGE_FILE”\$ {minikube知识产权}: 5000 /预测

从Kubernetes集群删除部署

kubectl删除- fpet-classifier.yaml

使用Prometheus监视模型服务器指标

设置

在开始这一部分之前,确保你有以下内容:

  • 安装了Prometheus集群。
    • Kubernetes的安装:https://github.com/coreos/kube-prometheus
    • Prometheus在其他环境中的安装:https://prometheus.io/docs/introduction/first_steps/#starting-prometheus

BentoML模型服务器有内置的Prometheus metrics端点。在使用BentoML构建模型服务器时,用户还可以根据自己的需求定制指标。

要使用支持Prometheus的Kubernetes集群监视度量,请使用prometheus.io /刮:真正的prometheus.io /端口:5000

例如:

apiVersion:应用程序/ v1种类:部署元数据:标签:应用程序:pet-classifier的名字:pet-classifier规范:选择器:matchLabels:应用程序:pet-classifier模板:元数据:标签:应用程序:pet-classifier注释:prometheus.io /刮:真正的prometheus.io /端口:5000规范:容器:-图像:{docker_username}/ pet-classifier的名字:pet-classifier港口:-containerPort:5000

要在其他环境中监视指标,请更新Prometheus抓取配置。

在Prometheus配置中抓取工作的一个例子:

job_name:宠物分类器主机:MODEL_SERVER_IP:5000

额外的信息

  • BentoML文档:https://docs.bentoml.org/en/latest
  • 到其他平台或服务的部署教程:https://docs.bentoml.org/en/latest/deployment/index.html