Client 接口说明
简介
通过 Python 接口快速部署模型到板卡,获取模型的运行时间和推理结果。
环境依赖
前置条件
板卡 server 已运行(详情参考 server_api.md)
Python 环境已配置
安装依赖
1pip install websockets jsonrpcclient
Client 类 API
Client.__init__(url)
初始化 Client 类,建立与板卡的 WebSocket 连接。
参数:
参数 |
类型 |
说明 |
|---|---|---|
url |
str |
板卡 WebSocket 地址,格式: |
示例:
from client import Client
ip = "192.168.23.100"
url = f"ws://{ip}:8000/websocket"
pnna_device = Client(url)
Client.add_model(nb_file_path, method_model)
添加新模型到板卡。
参数:
参数 |
类型 |
说明 |
|---|---|---|
nb_file_path |
str |
NBG 文件的路径 |
method_model |
str |
模型注册的方法名,后续调用 |
返回:
JSON 格式,包含添加是否成功的信息
示例:
ret_add = pnna_device.add_model(nb_file_path, method_model)
Client.infer(method_model, *input_data)
执行板卡模型推理。
参数:
参数 |
类型 |
说明 |
|---|---|---|
method_model |
str |
推理模型名称(add_model 时注册) |
*input_data |
np.ndarray |
推理数据(支持多输入,用逗号分隔) |
返回:
返回值 |
类型 |
说明 |
|---|---|---|
infer_data |
list |
推理结果 |
infer_time |
str |
推理耗时 |
示例:
# 单输入推理
infer_data, infer_time = pnna_device.infer(method_model, input_data1)
# 多输入推理
infer_data, infer_time = pnna_device.infer(method_model, input_data1, input_data2)
Client.delete_model(method_model)
删除板卡已注册的模型。
参数:
参数 |
类型 |
说明 |
|---|---|---|
method_model |
str |
add_model 时注册的方法名 |
返回:
JSON 格式,包含删除是否成功的信息
示例:
ret_delete = pnna_device.delete_model(method_model)
Client.query()
查询当前系统中所有已注册的 JSON-RPC 方法。
返回:
JSON 格式,返回所有已注册方法列表
示例:
methods = pnna_device.query()
Client.close()
断开与板卡的连接,释放资源。
示例:
pnna_device.close()
完整示例:单张图片推理
以 Netrans 下的 YOLOv5s 为例,通过 Netrans 工具生成 asymu8 类型的 NBG 文件:
import cv2
import torch
from client import Client
# 配置参数
nbfile_path = '/app/netrans/examples/onnx/yolov5s/wksp/yolov5s_asymu8_nbg_unify/network_binary.nb'
method_model = 'detect'
image_path = '/app/netrans/examples/onnx/yolov5s/0.jpg'
# 数据加载与预处理
img = cv2.imread(image_path)
img_data = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 初始化 client
pnna_device = Client("ws://192.168.23.100:8000/websocket")
# 添加模型
ret_add = pnna_device.add_model(nbfile_path, method_model)
# 执行推理
infer_data, infer_time = pnna_device.infer(method_model, img_data)
# 推理结果转 tensor
preds = torch.frombuffer(infer_data[0], dtype=torch.float32).reshape(1, 25200, 85)
# 断开连接
pnna_device.close()
作者:ougaoliang