Kubic:弹性推理演示
openSUSE Kubic 的弹性推理演示
此演示提供了推理流水线的云原生模型。推理工作负载可以在异构硬件引擎上垂直扩展,也可以通过水平 POD 自动缩放器进行扩展。这使得可以拥有不同大小的推理模型、不同的输入源等。
此演示是在会议上吸引眼球而创建的,请勿在任何生产环境中使用。它基于 Clear Linux 的弹性推理演示。该项目的设计和架构也解释得很好。
微服务
此演示由多个微服务组成。相应的容器是
- ei-file-stream-service
- ei-inference-service
- ei-websocket-server
- ei-gateway-server
工作流程是
输入源
这可以是文件或摄像头流服务。不同的推理队列可以有多个输入源。帧队列服务位于 <k8s 集群 IP>:31003,接受来自 IP 摄像头等任何外部帧生产者。
帧队列
帧根据推理类型推送到多个帧队列中。Redis 用于此目的。
Openvino 推理引擎
ei-inference-service 主要基于 深度学习部署工具包 (dldt) 和 OpenVINO™ 工具包中的 开源计算机视觉库 (OpenCV)。它从流队列中获取单个帧,然后进行推理。
只要提供相应的模型,推理服务就可以用于任何识别或检测。
此演示中使用以下模型
- 车辆检测:person-vehicle-bike-detection-crossroad-0078
- 人脸检测:face-detection-retail-0005
- 人员/身体检测:person-detection-retail-0013
流代理
流代理与帧队列服务相同的 redis 实例,并获取推理结果以供进一步操作。
流 Websocket 服务器
此服务器订阅来自代理的所有结果流,并为每个推理结果流设置单独的 websocket 连接。
Gateway
网关为后端服务提供统一接口。
部署
所有源代码都可以在 devel:kubic:ei-demo OBS 项目中找到。
可以从下面的存储库安装 RPM:https://download.opensuse.org/repositories/devel:/kubic:/ei-demo/
对于 x86-64,可以使用以下命令添加存储库
zypper ar -f https://download.opensuse.org/repositories/devel:/kubic:/ei-demo/openSUSE_Tumbleweed/ ei-demo
接下来,我们需要安装 yaml 文件
zypper in elastic-inference-demo-k8s-yaml
或
transactional-update pkg in elastic-inference-demo-k8s-yaml
现在我们只需要使用 kubectl 将其部署到集群
kubectl apply -f /usr/share/k8s-yaml/ei-demo/base/elastic-inference.yaml
或使用 kustomize
kustomize build /usr/share/k8s-yaml/ei-demo/base | kubectl apply -f -
输入源
现在需要配置一个输入源。
视频
有不同的示例输入流可用
kubectl apply -f /usr/share/k8s-yaml/ei-demo/samples/car/sample-car.yaml kubectl apply -f /usr/share/k8s-yaml/ei-demo/samples/face/sample-face.yaml kubectl apply -f /usr/share/k8s-yaml/ei-demo/samples/people/sample-people.yaml
示例输入流也可以使用 kustomize 部署
kustomize build /usr/share/k8s-yaml/ei-demo/samples/car | kubectl apply -f - kustomize build /usr/share/k8s-yaml/ei-demo/samples/face | kubectl apply -f - kustomize build /usr/share/k8s-yaml/ei-demo/samples/people | kubectl apply -f -
或者一次性全部部署
kustomize build /usr/share/k8s-yaml/ei-demo/samples/all | kubectl apply -f -
摄像头
也可以使用摄像头作为输入源。安装脚本以运行摄像头流服务容器
zypper in elastic-inference-camera-stream
并运行它
run-ei-camera-stream-service -q <kubernetes cluster address>
run-ei-camera-stream-service 的选项
-v X: for /dev/videoX -t <type>: inference type, face, car or people -q <address>: External kubernetes cluster address -p <port>: By default, the queue service listens at port 31003
有关更多选项,请参阅 run-ei-camera-stream-service -h。
输出
默认情况下
http://<k8s cluster IP>:31002
提供对 Dashboard SPA Web 的访问权限,用于预览结果
