client 接口说明
简介
通过python接口,快速部署模型到板卡,获得模型的运行时间和结果
环境依赖
确保板卡server已经运行,详情参考server_api.md
安装好python依赖包
1 pip install websockets jsonrpcclient
Client类
创建 Client
描述: 实例化 Client 类。
代码示例:
1from client import Client 2pnna_device = Client(uri)
参数:
uri:板卡连接地址
Client.infer
描述: 板卡模型推理
代码示例:
1#单输入推理 2infer_data, infer_time = pnna_device.infer(method_model, input_data1) 3# 多输入推理,多个输入用,隔开 4infer_data, infer_time = pnna_device.infer(method_model, input_data1, input_data2)
参数:
method_model:推理模型名称
input_data1:np格式的推理数据
输出返回:
推理结果与推理耗时
Client.add_model
描述: 添加新模型到板卡
代码示例:
1ret_add = pnna_device.add_model(nb_file_path, method_model)
参数:
nb_file_path:nbg文件的路径
method_model:字符串,为该模型注册的推理方法名,后续调用
infer需使用此名称
输出返回:
json格式,添加是否成功的信息
Client.delete_model
描述: 删除板卡已注册模型
代码示例:
1ret_delete = pnna_device.delete(method_model)
参数:
method_model:字符串,add时为该模型注册的推理方法名
输出返回:
json格式,删除是否成功的信息
Client.query
描述: 查询前系统中所有已注册的JSON-RPC方法(包括系统方法与用户通过add_model注册的推理方法)。
代码示例:
1ret_delete = pnna_device.query()
输出返回:
json格式,返回查询到的所以方法
Client.close
描述: 与板卡断开连接,释放资源
代码示例:
1pnna_device.close()
板卡单张图片推理示例
以netrans下的yolov5s为例,通过netrans工具生成asymu8类型的nbg文件
1import cv2
2from client import *
3
4nbfile_path = '/app/netrans/examples/onnx/yolov5s/wksp/yolov5s_asymu8_nbg_unify/network_binary.nb'
5method_model = 'detect'
6
7# 数据加载
8img = cv2.imread('/app/netrans/examples/onnx/yolov5s/0.jpg')
9img_data = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
10
11# 初始化client
12pnna_device = Client("ws://192.168.23.100:8000/websocket")
13
14# 添加新模型到板卡
15ret_add = pnna_device.add_model(nbfile_path, method_model)
16
17# 板卡推理
18infer_data, infer_time = pnna_device.infer(method_model, img_data)
19
20# 推理结果转tensor
21preds = torch.frombuffer(infer_data[0], dtype=torch.float32).reshape(1, 25200, 85)
22
23# 断开连接
24pnna_device.close()
作者 @ogl ougaoliang@hngwg.com