使用OpenVINO™和Kubernetes部署AI推理

目录

介绍

通过操作员中心安装

在Kubernetes中提供单个OpenVINO模型

向服务发送推理请求

为多模型管道提供服务

结论

资源

通知和免责声明


介绍

模型服务器在将AI模型从开发引入生产方面发挥着至关重要的作用。模型通过网络终结点提供,这些终结点公开API以运行预测。这些微服务抽象推理执行,同时提供可扩展性和高效的资源利用率。

在这篇博客中,您将学习如何使用OpenVINO™ Operator for Kubernetes 的关键功能。我们将演示如何在两种情况下部署和使用OpenVINO模型服务器:

  1. 提供单个模型
  2. 为多个模型的管道提供服务

Kubernetes为部署模型服务器提供了最佳环境,但在大规模部署中管理这些资源可能具有挑战性。使用我们的Kubernetes运算符使这变得更容易。

通过操作员中心安装

OpenVINO Operator可以从OperatorHub 安装在Kubernetes集群中。只需搜索OpenVINO,然后单击安装按钮。

Kubernetes中提供单个OpenVINO模型

通过使用提供的CRD定义名为模型服务器的自定义资源,创建OpenVINO模型服务器的新实例。此处解释了所有参数。

在下面的示例中,部署了一个功能齐全的模型服务器以及从Google Cloud存储中提取的ResNet-50图像分类模型。

kubectl apply -f https://raw.githubusercontent.com/openvinotoolkit/operator/main/config/samples/intel_v1alpha1_ovms.yaml

成功的部署将创建一个名为ovms-sample 的服务。

kubectl get service

NAME         TYPE       CLUSTER-IP    EXTERNAL-IP  PORT(S)
AGE
ovms-sample  ClusterIP  10.98.164.11  <none>       8080/TCP,8081/TCP
5m30s

现在模型已经部署并准备好接受请求,我们可以将ovms-sample服务与我们的Python客户端(称为ovmsclient)一起使用。

向服务发送推理请求

下面的示例显示了如何在运行它的同一个Kubernetes集群中使用ovms-sample服务。要创建客户端容器,请启动与安装了Python的容器的交互式会话:

kubectl create deployment client-test --image=python:3.8.13 -- sleep infinitykubectl exec -it $(kubectl get pod -o jsonpath="{.items[0].metadata.name}" -l app=client-test) -- bash

在客户端容器内部,我们将连接到模型服务器API终结点。一个简单的curl命令列出了服务的模型及其版本和状态:

curl http://ovms-sample:8081/v1/config

{

"resnet" :


{ 
    "model_version_status": [  

    {   
     
        "version": "1",
         
        "state": "AVAILABLE",
   
        "status": {    
  
            "error_code": "OK",    

            "error_message": "OK"   

        }

    } 

    ]

}

文档中介绍了其他REST API调用。

现在让我们使用ovmsclient Python库来处理推理请求。创建一个虚拟环境并使用pip安装客户端:

python3 -m venv /tmp/venv

source /tmp/venv/bin/activate

pip install ovmsclient

下载zebra的示例图像:

curl https://raw.githubusercontent.com/openvinotoolkit/model_server/main/demos/common/static/images/zebra.jpeg -o /tmp/zebra.jpeg

下面的Python代码使用ovmsclient库收集模型元数据:

from ovmsclient import make_grpc_client

client = make_grpc_client("ovms-sample:8080")

model_metadata = client.get_model_metadata(model_name="resnet")

print(model_metadata)

上面的代码返回以下响应:

{‘model_version’: 1, ‘inputs’: {‘map/TensorArrayStack/TensorArrayGatherV3:0’: {‘shape’: [-1, -1, -1, -1], ‘dtype’: ‘DT_FLOAT’}}, ‘outputs’: {‘softmax_tensor’: {‘shape’: [-1, 1001], ‘dtype’: ‘DT_FLOAT’}}}

现在创建一个简单的Python脚本来对斑马的JPEG图像进行分类:

cat >> /tmp/predict.py <<EOL
from ovmsclient import make_grpc_client
import numpy as np
client = make_grpc_client("ovms-sample:8080")
with open("/tmp/zebra.jpeg", "rb") as f:
    data = f.read()
inputs = {"map/TensorArrayStack/TensorArrayGatherV3:0": data}
results = client.predict(inputs=inputs, model_name="resnet")
print("Detected class:", np.argmax(results))
EOLpython /tmp/predict.py
Detected class: 341

imagenet检测到的类是341,它代表斑马

为多模型管道提供服务

在运行提供单个OpenVINO模型的简单用例后,让我们探索多模型车辆分析管道的更高级方案。此管道利用OpenVINO模型服务器中的有向无环图功能。

本演示中的其余步骤需要mc'minio客户端二进制文件并访问与S3兼容的存储桶。有关详细信息,请参阅Minio的快速入门

首先,使用下面的车辆分析管道示例准备所有依赖项:

git clone https://github.com/openvinotoolkit/model_server
cd model_server/demos/vehicle_analysis_pipeline/python
make

上面的命令下载所需的模型并生成一个自定义库来运行管道,然后将这些文件放在工作区目录中。将文件复制到集群中可访问的共享S3兼容存储。在下面的示例中,S3服务器别名为mys3

mc cp — recursive workspace/vehicle-detection-0202 mys3/models-repository/
mc cp — recursive workspace/vehicle-attributes-recognition-barrier-0042 mys3/models-repository/
mc ls -r mys3
43MiB models-repository/vehicle-attributes-recognition-barrier-0042/1/vehicle-attributes-recognition-barrier-0042.bin
118KiB models-repository/vehicle-attributes-recognition-barrier-0042/1/vehicle-attributes-recognition-barrier-0042.xml
7.1MiB models-repository/vehicle-detection-0202/1/vehicle-detection-0202.bin
331KiB models-repository/vehicle-detection-0202/1/vehicle-detection-0202.xml

要在workspace/config.json 中使用以前创建的模型服务器配置文件,我们需要调整模型和自定义节点库的路径。以下命令将模型路径更改为S3存储桶,并将自定义节点库更改为/config文件夹,该文件夹将作为Kubernetes配置映射挂载。

sed -i ‘s/\/workspace\/vehicle-detection-0202/s3:\/\/models-repository\/vehicle-detection-0202/g’ workspace/config.json
sed -i ‘s/\/workspace\/vehicle-attributes-recognition-barrier-0042/s3:\/\/models-repository\/vehicle-attributes-recognition-barrier-0042/g’ workspace/config.json
sed -i ‘s/workspace\/lib/config/g’ workspace/config.json

接下来,将配置文件和自定义名称库添加到Kubernetes配置映射中:

kubectl create configmap ovms-pipeline --from-
file=config.json=workspace/config.json 
\
--from-
file=libcustom_node_model_zoo_intel_object_detection.so=workspace/lib/libcustom_node_model_zoo_intel_object_detection.so

现在,我们已准备好使用工作流配置部署模型服务器。使用kubectl应用以下ovms-pipeline.yaml配置。

apiVersion: intel.com/v1alpha1
kind: ModelServer
metadata:
  name: ovms-pipeline
spec:
  image_name: openvino/model_server:latest
  deployment_parameters:
    replicas: 1
  models_settings:
    single_model_mode: false
    config_configmap_name: "ovms-pipeline"
  server_settings:
    file_system_poll_wait_seconds: 0
    log_level: "INFO"
  service_parameters:
    grpc_port: 8080
    rest_port: 808
    service_type: ClusterIP
  models_repository:
    storage_type: "s3"
    aws_access_key_id: minioadmin
    aws_secret_access_key: minioadmin
    aws_region: us-east-1
    s3_compat_api_endpoint: http://mys3.example.com:9000kubectl apply -f ovms-pipeline.yaml

That creates the service with the model server
kubectl get service
NAME           TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)              AGE
ovms-pipeline  ClusterIP   10.99.53.175  <none>      8080/TCP,8081/TCP    26m

为了测试管道,我们可以对单个模型使用与上一个示例相同的客户端容器。从客户端容器外壳内部下载示例映像进行分析:

curl https://raw.githubusercontent.com/openvinotoolkit/model_server/main/demos/common/static/images/cars/road1.jpg -o /tmp/road1.jpg

cat >> /tmp/pipeline.py <<EOL
from ovmsclient import make_grpc_client
import numpy as np
client = make_grpc_client("ovms-pipeline:8080")
with open("/tmp/road1.jpg", "rb") as f:
    data = f.read()
inputs = {"image": data}
results = client.predict(inputs=inputs, model_name="multiple_vehicle_recognition")
print("Returned outputs:",results.keys())
EOL

使用以下命令运行预测:

python /tmp/pipeline.py
Returned outputs: dict_keys(['colors', 'vehicle_coordinates', 'types', 'vehicle_images', 'confidence_levels'])

上面的示例代码仅返回管道输出列表,而不进行数据解释。GitHub上提供了用于车辆分析的更完整的客户端代码示例。

结论

OpenVINO模型服务器使在Kubernetes环境中部署和管理推理服务变得容易。在此博客中,我们学习了如何使用ovmsclient Python库运行预测,该库既有单个模型场景,也有使用DAG管道的多个模型。

GitHub - openvinotoolkit/operator: OpenVINO operator for OpenShift and Kubernetes 上了解有关操作员的更多信息

另请查看OpenVINO模型服务器的其他演示Demos — OpenVINO™ documentation

资源

通知和免责声明

性能因使用、配置和其他因素而异。在性能指数网站上了解更多信息。

没有任何产品或组件是绝对安全的。

英特尔不控制或审核第三方数据。您应该咨询其他来源以评估准确性。

英特尔不承担所有明示和暗示的担保,包括但不限于对适销性、特定用途适用性和不侵权的暗示担保,以及因履行过程、交易过程或贸易使用而产生的任何保证。

您的费用和结果可能会有所不同。

英特尔技术可能需要启用硬件、软件或服务激活。

©英特尔公司。英特尔、英特尔徽标和其他英特尔标志是英特尔公司或其子公司的商标。其他名称和品牌可能声称是他人的财产。

本文最初发表于https://medium.com/openvino-toolkit/deploy-ai-inference-with-openvino-and-kubernetes-a8905df45e47

https://www.codeproject.com/Articles/5337273/Deploy-AI-Inference-with-OpenVINO-and-Kubernetes

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值