Ctrl-Z
一个多线程机器人运动控制强化学习部署框架
载入中...
搜索中...
未找到
z::AbstractNetInferenceWorker< SchedulerType, NetName, InferencePrecision > 模板类 参考abstract

AbstractNetInferenceWorker类型是一切神经网络推理工人类型的基类,该类提供一些基本推理的功能, 用户可以通过继承这个类来实现自己的推理工人类型。 更多...

#include <AbstractInferenceWorker.hpp>

类 z::AbstractNetInferenceWorker< SchedulerType, NetName, InferencePrecision > 继承关系图:
z::AbstractNetInferenceWorker< SchedulerType, NetName, InferencePrecision > 的协作图:

Public 成员函数

 AbstractNetInferenceWorker (SchedulerType::Ptr scheduler, const nlohmann::json &cfg)
 推理精度必须是一个算术类型
 
virtual ~AbstractNetInferenceWorker ()
 析构函数
 
virtual void PreProcess ()=0
 预处理方法,用户必须实现这个方法,用来实现推理前的准备工作,该方法在每次InferenceOnce()之前被调用
 
virtual void PostProcess ()=0
 后处理方法,用户必须实现这个方法,用来实现推理后的处理工作,该方法在每次InferenceOnce()之后被调用
 
virtual void InferenceOnce ()
 推理方法,用户可选重定义这个方法,用来实现推理的逻辑,默认实现是使用onnxruntime的推理方法
 
void SetEnable (bool enable, InferencePrecision future_time=0)
 设置是否启动推理。或是否在未来的某个时间点启动推理。
 
void TaskRun () override
 在每次任务队列循环中被调用,用来实现推理的逻辑,默认实现是依次调用PreProcess,InferenceOnce,PostProcess方法
 
void TaskCreate () override
 任务创建的方法,该方法中会初始化模型,预热模型,绑定输入输出节点等
 
template<int64_t ... Dims>
Ort::Value WarpOrtTensor (math::Tensor< InferencePrecision, Dims... > &Tensor)
 将z::math::Tensor类型的数据转换为Ort::Value类型的数据。
 
- Public 成员函数 继承自 z::AbstractWorker< SchedulerType >
 AbstractWorker (SchedulerType::Ptr scheduler, const nlohmann::json &cfg=nlohmann::json())
 构造一个抽象工人类型
 
void setScheduler (SchedulerType::Ptr scheduler)
 设置调度器的指针
 
virtual ~AbstractWorker ()
 析构函数,虚函数,用于释放资源
 
virtual void TaskDestroy ()
 TaskDestroy方法,在任务队列删除的时候会被调度器调用,用户可以在这个方法中释放一些资源
 
virtual void TaskCycleBegin ()
 TaskCycleBegin方法,在每次任务队列循环的开始会被调度器调用。
 
virtual void TaskCycleEnd ()
 TaskCycleEnd方法,在每次任务队列循环的结束会被调度器调用。
 
- Public 成员函数 继承自 z::ZObject
void PrintSplitLine (size_t length=60, char c='-')
 print a split line, default length is 60 and character is '-'
 

Protected 属性

bool WarmUpModel__ = false
 是否需要预热模型
 
size_t WarmUpCnt__ = 0
 预热次数
 
std::string ModelPath__
 模型路径
 
size_t IntraNumberThreads__ = 1
 推理线程数,默认为1,增大线程数可能可以提升推理速度但是会增加资源消耗
 
Ort::Session Session__
 ONNXRuntime的Session对象,用来加载模型和进行推理
 
Ort::SessionOptions SessionOptions__
 ONNXRuntime的SessionOptions对象,用来配置Session
 
Ort::AllocatorWithDefaultOptions DefaultAllocator__
 ONNXRuntime的AllocatorWithDefaultOptions对象,用来分配内存
 
Ort::MemoryInfo MemoryInfo__
 ONNXRuntime的MemoryInfo对象,用来配置内存信息
 
std::vector< std::string > InputNodeNames__
 输入节点名称列表
 
std::vector< std::string > OutputNodeNames__
 输出节点名称列表
 
std::vector< Ort::Value > InputOrtTensors__
 输入Ort::Value列表,顺序与InputNodeNames一致
 
std::vector< Ort::Value > OutputOrtTensors__
 输出Ort::Value列表,顺序与OutputNodeNames一致
 
Ort::IoBinding IoBinding__
 ONNXRuntime的IoBinding对象,用来绑定输入输出节点,绑定名称和数据
 
- Protected 属性 继承自 z::AbstractWorker< SchedulerType >
SchedulerType::Ptr Scheduler = nullptr
 调度器的指针,用户可以通过这个指针来获取一些全局的数据, 比如当前任务的时间戳,前级工人的输出数据等,也可以通过这个指针来设置一些全局的数据。
 

详细描述

template<typename SchedulerType, CTString NetName, typename InferencePrecision>
class z::AbstractNetInferenceWorker< SchedulerType, NetName, InferencePrecision >

AbstractNetInferenceWorker类型是一切神经网络推理工人类型的基类,该类提供一些基本推理的功能, 用户可以通过继承这个类来实现自己的推理工人类型。

AbstractNetInferenceWorker类型是一切神经网络推理工人类型的基类,该类提供一些基本推理的功能, 用户可以通过继承这个类来实现自己的推理工人类型。该类型实现了与ONNXRuntime的交互,用户可以通过配置文件来配置模型的路径, 输入节点名称,输出节点名称,线程数等参数。用户可以通过继承这个类来实现自己的推理工人类型,用户必须实现PreProcess,PostProcess,方法 分别用来实现推理前的准备工作,推理后的处理工作,将在推理前后(InferenceOnce方法前后)依次调用这两个方法。

config.json配置文件示例:

{
"Workers": {
"NN": {
"Inference": {
"WarmUpModel": true, //是否需要预热模型
"WarmUpCount": 10, //预热次数
"IntraNumberThreads": 1 //线程数
},
"Network": {
"ModelPath": "model.onnx", //模型路径
"InputNodeNames": ["input"], //输入节点名称
"OutputNodeNames": ["output"] //输出节点名称
}
}
}
}
模板参数
SchedulerType调度器类型
NetName网络名称,用户可以通过这个参数来指定网络的名称, 这在有多个网络时可以区分数据总线上的不同网络数据
InferencePrecision推理精度,用户可以通过这个参数来指定推理的精度,比如可以指定为float或者double

构造及析构函数说明

◆ AbstractNetInferenceWorker()

template<typename SchedulerType, CTString NetName, typename InferencePrecision>
z::AbstractNetInferenceWorker< SchedulerType, NetName, InferencePrecision >::AbstractNetInferenceWorker ( SchedulerType::Ptr scheduler,
const nlohmann::json & cfg )
inline

推理精度必须是一个算术类型

构造一个AbstractNetInferenceWorker类型

参数
scheduler调度器的指针
cfg配置文件

成员函数说明

◆ SetEnable()

template<typename SchedulerType, CTString NetName, typename InferencePrecision>
void z::AbstractNetInferenceWorker< SchedulerType, NetName, InferencePrecision >::SetEnable ( bool enable,
InferencePrecision future_time = 0 )
inline

设置是否启动推理。或是否在未来的某个时间点启动推理。

参数
enable是否启用推理
future_time在未来的某个时间点启用推理,单位为秒,默认值为0,表示立即启用

◆ TaskCreate()

template<typename SchedulerType, CTString NetName, typename InferencePrecision>
void z::AbstractNetInferenceWorker< SchedulerType, NetName, InferencePrecision >::TaskCreate ( )
inlineoverridevirtual

任务创建的方法,该方法中会初始化模型,预热模型,绑定输入输出节点等

重载 z::AbstractWorker< SchedulerType > .

◆ TaskRun()

template<typename SchedulerType, CTString NetName, typename InferencePrecision>
void z::AbstractNetInferenceWorker< SchedulerType, NetName, InferencePrecision >::TaskRun ( )
inlineoverridevirtual

在每次任务队列循环中被调用,用来实现推理的逻辑,默认实现是依次调用PreProcess,InferenceOnce,PostProcess方法

实现了 z::AbstractWorker< SchedulerType >.

◆ WarpOrtTensor()

template<typename SchedulerType, CTString NetName, typename InferencePrecision>
template<int64_t ... Dims>
Ort::Value z::AbstractNetInferenceWorker< SchedulerType, NetName, InferencePrecision >::WarpOrtTensor ( math::Tensor< InferencePrecision, Dims... > & Tensor)
inline

将z::math::Tensor类型的数据转换为Ort::Value类型的数据。

将z::math::Tensor类型的数据转换为Ort::Value类型的数据。 注意Ort::Value类型的数据是一个指针,因此必须保证Tensor的生命周期大于Ort::Value的生命周期, 即Tensor不能提前销毁!

模板参数
DimsTensor的维度
参数
Tensor输入的Tensor
返回
Ort::Value 返回的Ort::Value类型的数据

该类的文档由以下文件生成: