K8s环境部署Triton实现云端模型推理

news/2024/11/25 19:00:00/

前置条件:K8集群、helm

1、以模型名作为目录名,创建目录

mkdir resnet50_pytorch

2、将模型文件、配置文件(输入、输出等)存到刚创建的目录下,resnet50_pytorch目录下文件层级结构如下

model-respository/
└── resnet50_pytorch            # 模型名字,需要和config.txt中名字一致├── 1                       # 模型版本号│   └── model.pt            # 上面保存的模型├── config.pbtxt            # 模型配置文件,必需├── labels.txt              # 可选,分类标签信息,注意格式├── resnet_client.py        # 客户端脚本,可以不放在这里└── resnet_pytorch.py       # 生成 model.pt 的脚本,可以不放在这里

3、生成模型model.pt的脚本resnet_pytorch.py如下

import torch
import torchvision.models as modelsresnet50 = models.resnet50(pretrained=True)
resnet50.eval()
image = torch.randn(1, 3, 244, 244)
resnet50_traced = torch.jit.trace(resnet50, image)
resnet50(image)
resnet50_traced.save('model.pt')

4、模型配置文件config.pbtxt示例如下,模型的输入是[ N, 3, -1, -1 ] 的图片,输出是 [ N, 1000 ] 维度的分类向量,并指定了分类的文件名,用于获取分类结果

name: "resnet50_pytorch"
platform: "pytorch_libtorch"
max_batch_size: 128
input [{name: "INPUT__0"data_type: TYPE_FP32dims: [ 3, -1, -1 ]}
]
output [{name: "OUTPUT__0"data_type: TYPE_FP32dims: [ 1000 ]label_filename: "labels.txt"}
]

5、通过http调用Triton推理服务的脚本:resnet_client.py示例

import numpy as np
import tritonclient.http as httpclient
import torch
from PIL import Imageif __name__ == '__main__':triton_client = httpclient.InferenceServerClient(url='10.114.242.30:30381')#dev环境#triton_client = httpclient.InferenceServerClient(url='20.102.236.169:8000')#生产环境image = Image.open('./cat.jpg')image = image.resize((224, 224), Image.ANTIALIAS)image = np.asarray(image)image = image / 255image = np.expand_dims(image, axis=0)image = np.transpose(image, axes=[0, 3, 1, 2])image = image.astype(np.float32)inputs = []inputs.append(httpclient.InferInput('INPUT__0', image.shape, "FP32"))inputs[0].set_data_from_numpy(image, binary_data=False)outputs = []outputs.append(httpclient.InferRequestedOutput('OUTPUT__0', binary_data=False, class_count=3)) results = triton_client.infer('resnet50_pytorch', inputs=inputs, outputs=outputs)output_data0 = results.as_numpy('OUTPUT__0')print(output_data0.shape)print(output_data0)

执行命令python3 resnet_client.py输出如下,根据传入的图片,可以识别出图片内容

参考文章:

https://github.com/zzk0/triton/tree/master/quick/resnet50_pytorch

https://www.cnblogs.com/zzk0/p/15543824.html


http://www.ppmy.cn/news/94642.html

相关文章

Android系统的JNI原理分析(7)- Android中JNI的高级用法

声明 前阶段在项目中使用了Android的JNI技术,在此文中做些技术知识总结。此篇参考一些博客和书籍,不方便逐一列出,仅供学习、知识分享,代码基于Android 7.1.1。Android JNI函数参考:‘Raw’ JNI interface to Android Dalvik (Java) VM from Mono (CS/JS)本章Demo下载:De…

开源网安亮相粤港澳大湾区CIO高峰论坛,保障企业数字化安全转型

近日,由深圳市工业化与信息化局、深圳市科学技术协会指导,深圳市CIO协会主办的“2023中国(深圳)数字化转型大会暨粤港澳大湾区CIO高峰论坛”圆满完成。开源网安作为拥有软件安全领域全链条产品的厂商,携多年来打造的国产化软件安全替代方案&a…

vivo软件开发马拉松大赛学习总结

vivo软件开发马拉松大赛学习总结 后端技术部署使用到的docker镜像MySQL部署后端项目部署jenkinsfile swagger配置跨域解决 其他 后端技术 部署 后端部分是使用docker来进行部署的,部署在服务器的/home/vivo-backend/目录下 使用到的docker镜像 MySQL:5.7基于open…

深度学习编译器

1.为什么需要深度学习编译器 深度学习编译器主要为解决不同框架下训练的模型部署到指定的某些设备上时所遇到的一系列复杂的问题,即将各种深度学习训练框架的模型部署到各种硬件所面临的问题; 首先深度学习领域,从训练框架看,当前…

从零开始:使用低代码平台开发OA系统的教程

随着中小型企业持续拥抱数字化转型,对支持业务流程的定制软件应用程序的需求增加。而办公自动化(OA)系统是一个有助于自动执行重复性任务并简化工作流程的系统。按照传统的开发模式,开发OA系统可能既耗时又昂贵,需要经验丰富的开发人员从头开…

使用python批量重命名文件夹中的文件

目录 一、前言 二、Python重命名文件的方法 三、Python重命名文件夹内的所有图片 四、Python重命名文件夹内的所有图片并按照顺序排序 五、总结 一、前言 在日常工作中,我们经常需要对文件进行重命名,比如将一些图片按照顺序重命名,方便…

window 利用Qt-windeployqt打包exe程序 一个简单的实例

用一个简单的实例展示下window 如何使用QT-windeployqt打包exe程序使得其可以在别的电脑上运行 一、release模式获得exe可执行文件 新建一个QT项目 构建选择使用CMake base class选择QMainWindow Kit Selection一定要注意,我选的是MinGW 32-bit UI设计 mainwindow.…

Qt, Text Edit 和 Plain Text Edit关于调整字体样式的问题

问题: 在编写小案例的过程中需要使用一个文本容器用于显示文本效果, 因为涉及文本字体的 加粗, 倾斜, 下划线, 以及颜色效果, 这里使用了 Text Edit 组件, 但是使用后发现容器中的文本无法实现同时设置 加粗 倾斜 下划线的情况, 且单独设置时只有 下划线 有效果, 加粗 倾斜 均无…