You're reading an pre-release version of this documentation.
For the latest stable release version, please have a look at master.

Client 接口说明

简介

通过 Python 接口快速部署模型到板卡,获取模型的运行时间和推理结果。


环境依赖

前置条件

  • 板卡 server 已运行(详情参考 server_api.md

  • Python 环境已配置

安装依赖

1pip install websockets jsonrpcclient

Client 类 API

Client.__init__(url)

初始化 Client 类,建立与板卡的 WebSocket 连接。

参数:

参数

类型

说明

url

str

板卡 WebSocket 地址,格式:ws://{IP}:8000/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

模型注册的方法名,后续调用 infer 时使用

返回:

  • 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