常规模式

常规模式 下请使用 hbm_infer.hbm_rpc_session 模块。

接口及参数

  1. HbmRpcSession成员方法:__init__

    def __init__( self, host: str, local_hbm_path: str, username: Optional[str] = "root", remote_root: Optional[str] = "/map/hbm_infer/", password: Optional[str] = "", frame_timeout: Optional[int] = 90, server_timeout: Optional[int] = 30, with_profile: Optional[bool] = False, debug: Optional[bool] = False, compress_option: Optional[str] = "NONE", ) -> None:

    初始化HbmRpcSession对象。

    • 参数
    参数说明
    host开发板ip地址。
    local_hbm_path本地HBM文件路径。
    username板端用户名,默认值为 "root"
    remote_root板端暂存文件的根目录路径,默认值为 "/map/hbm_infer/"
    password登录开发板的密码,默认为 "" ,代表无需使用密码。
    frame_timeoutgRPC 通信的单帧超时时间,以秒为单位,默认值为 90
    server_timeout服务端超时时间,以分钟为单位,默认值为 30 ,超时后服务端自动退出并清理 除日志外 的其他文件。
    with_profile是否开启推理各阶段时间统计,默认值为 False
    debug是否开启调试模式保留更多日志信息,默认值为 False
    compress_option开启 gRPC 压缩功能,可选值有 "IN""INOUT""NONE" ,分别代表请求数据帧启用压缩、请求和响应数据帧都启用压缩、不启用压缩,默认值为 "NONE"
注解

压缩功能是软件处理,因此开启后通常出现推理延时变大的情况,压缩功能优化主要体现在降低网络负载和提高吞吐,并且压缩质量依赖输入输出数据的相关性,对于浮点输入输出一般不建议开启,对于图像输入或者分割输出等可尝试开启。

  1. HbmRpcSession成员方法:get_input_info

    def get_input_info(self) -> dict:

    获取模型输入信息。

    • 返回值

    字典形式的模型输入信息描述,具体格式可参考如下示例:

    { "input_name0": { "valid_shape": [1, 3, 224, 224], "tensor_type": "DATA_TYPE_S8", "quanti_type": "QUANTI_TYPE_SCALE", "quantizeAxis": 0, "scale_data": [0.006861070170998573], "zero_point_data": [0] }, ... }
  2. HbmRpcSession成员方法:get_output_info

    def get_output_info(self) -> dict:

    获取模型输出信息。

    • 返回值

    字典形式的模型输出信息描述,格式与 get_input_info 返回值一致。

  3. HbmRpcSession成员方法:show_input_output_info

    def show_input_output_info(self) -> None:

    打印模型输入输出信息。

  4. HbmRpcSession成员方法:__call__

    def __call__(self, data) -> (dict | list):

    执行模型推理。

    • 参数
    参数说明
    data模型输入,字典类型。 key 为输入张量名称, value 为输入张量,支持 torch.Tensornumpy.ndarray 两种格式。需要注意: 输入数据需要与模型输入信息保持一致(包括名称、数量、形状以及数据元素类型等)
    • 返回值

    模型输出,字典类型。 key 为输出张量名称, value 为输出张量,其类型与模型输入保持一致。

  5. HbmRpcSession成员方法:close_server

    def close_server(self) -> None:

    关闭服务端,清理服务端资源。

  6. HbmRpcSession成员方法:get_profile

    def get_profile(self) -> dict:

    获取推理各阶段耗时统计信息,需要 with_profile 参数为 True ,否则报错。返回值为字典类型,其参考格式如下:

    { // 帧总延时(ms) "frame_duration": { "avg": 6, "min": 6, "max": 6, }, // gRPC发送输入帧到返回输出帧的总延时(ms) "sd2rv_duration": { "avg": 5, "min": 5, "max": 5, }, // 网络通信耗时(ms) "commu_duration": { "avg": 4, "min": 4, "max": 4, }, // 板端总耗时(ms) "board_duration": { "avg": 1, "min": 1, "max": 1, }, // 板端纯推理耗时(ms) "infer_duration": { "avg": 0.5, "min": 0.5, "max": 0.5, }, // 板端前处理耗时(ms) "prepr_duration": { "avg": 0.3, "min": 0.3, "max": 0.3, }, // 板端后处理耗时(ms) "pospr_duration": { "avg": 0.2, "min": 0.2, "max": 0.2, }, }
  7. HbmRpcSession成员方法:get_profile_last_frame

    def get_profile_last_frame(self) -> dict:

    获取最近一帧推理各阶段耗时统计信息,需要 with_profile 参数为 True ,否则报错。返回值为字典类型,其参考格式如下:

    { // 帧总延时(ms) "frame_duration": 12, // gRPC发送输入帧到返回输出帧的总延时(ms) "sd2rv_duration": 10, // 网络通信耗时(ms) "commu_duration": 6, // 板端总耗时(ms) "board_duration": 4, // 板端纯推理耗时(ms) "infer_duration": 2, // 板端前处理耗时(ms) "prepr_duration": 0.5, // 板端后处理耗时(ms) "pospr_duration": 0.5, }

使用示例

import time import torch from hbm_infer.hbm_rpc_session import HbmRpcSession def run_hbm_infer(run_epoch=10): # 创建session sess = HbmRpcSession( host=<available_ip>, local_hbm_path=<local_hbm_path> ) # 打印模型输入输出信息 sess.show_input_output_info() # 准备输入数据 input_data = { 'img': torch.ones((1, 3, 224, 224), dtype=torch.int8) } # 执行推理并返回结果 for i in range(run_epoch): output_data = sess(input_data) print([output_data[k].shape for k in output_data]) # 关闭server sess.close_server() if __name__ == '__main__': run_hbm_infer()