5.17. sail.MultiEngine

多线程的推理引擎,实现特定计算图的多线程推理。

5.17.1. MultiEngine

初始化MutiEngine。

接口形式:
def __init__(self, bmodel_path: str, device_ids: list[int], sys_out: bool=True, graph_idx: int=0)

参数说明:

  • bmodel_path: str

bmodel所在的文件路径。

  • device_ids: lists[int]

该MultiEngine可见的智能视觉深度学习处理器的ID。

  • sys_out: bool

表示是否将结果拷贝到系统内存,默认为True

  • graph_idx : int

特定的计算图的index。

示例代码:
import sophon.sail as sail

if __name__ == '__main__':
    dev_id = [0,1]
    bmodel_path = "your_bmodel.bmodel"
    engine = sail.MultiEngine(bmodel_path,dev_id)

5.17.2. set_print_flag

设置是否打印调试信息。

接口形式:
def set_print_flag(self, print_flag: bool)->None

参数说明:

  • print_flag: bool

为True时,打印调试信息,否则不打印。

示例代码:
import sophon.sail as sail

if __name__ == '__main__':
    dev_id = [0,1]
    bmodel_path = "your_bmodel.bmodel"
    engine = sail.MultiEngine(bmodel_path,dev_id)
    engine.set_print_flag(True)

5.17.3. set_print_time

设置是否打印主要处理耗时。

接口形式:
def set_print_time(self, print_flag: bool)->None

参数说明:

  • print_flag: bool

为True时,打印主要耗时,否则不打印。

示例代码:
import sophon.sail as sail

if __name__ == '__main__':
    dev_id = [0,1]
    bmodel_path = "your_bmodel.bmodel"
    engine = sail.MultiEngine(bmodel_path,dev_id)
    engine.set_print_time(True)

5.17.4. get_device_ids

获取MultiEngine中所有可用的智能视觉深度学习处理器的id。

接口形式:
def get_device_ids(self) -> list[int]

返回值说明:

  • device_ids: list[int]

返回可见的智能视觉深度学习处理器的ids

示例代码:
import sophon.sail as sail

if __name__ == '__main__':
    dev_id = [0,1]
    bmodel_path = "your_bmodel.bmodel"
    engine = sail.MultiEngine(bmodel_path,dev_id)
    ids = engine.get_device_ids()

5.17.5. get_graph_names

获取MultiEngine中所有载入的计算图的名称。

接口形式:
def get_graph_names(self)->list

返回值说明:

  • graph_names: list

MultiEngine中所有计算图的name的列表。

示例代码:
import sophon.sail as sail

if __name__ == '__main__':
    dev_id = [0,1]
    bmodel_path = "your_bmodel.bmodel"
    engine = sail.MultiEngine(bmodel_path,dev_id)
    graph_names = engine.get_graph_names()

5.17.6. get_input_names

获取选定计算图中所有输入Tensor的name

接口形式:
def get_input_names(self, graph_name: str)->list

参数说明:

  • graph_name: str

设定需要查询的计算图的name。

返回值说明:

  • input_names: list

返回选定计算图中所有输入Tensor的name的列表。

示例代码:
import sophon.sail as sail

if __name__ == '__main__':
    dev_id = [0,1]
    bmodel_path = "your_bmodel.bmodel"
    engine = sail.MultiEngine(bmodel_path,dev_id)
    graph_names = engine.get_graph_names()
    input_names = engine.get_input_names(graph_names[0])

5.17.7. get_output_names

获取选定计算图中所有输出Tensor的name。

接口形式:
def get_output_names(self, graph_name: str)->list

参数说明:

  • graph_name: str

设定需要查询的计算图的name。

返回值说明:

  • output_names: list

返回选定计算图中所有输出Tensor的name的列表。

示例代码:
import sophon.sail as sail

if __name__ == '__main__':
    dev_id = [0,1]
    bmodel_path = "your_bmodel.bmodel"
    engine = sail.MultiEngine(bmodel_path,dev_id)
    graph_names = engine.get_graph_names()
    output_names = engine.get_output_names(graph_names[0])

5.17.8. get_input_shape

查询选定计算图中特定输入Tensor的shape。

接口形式:
def get_input_shape(self, graph_name: str, tensor_name: str)->list

参数说明:

  • graph_name: str

设定需要查询的计算图的name。

  • tensor_name: str

需要查询的Tensor的name。

返回值说明:

  • tensor_shape: list

该name下的输入Tensor中的最大维度的shape。

示例代码:
import sophon.sail as sail

if __name__ == '__main__':
    dev_id = [0,1]
    bmodel_path = "your_bmodel.bmodel"
    engine = sail.MultiEngine(bmodel_path,dev_id)
    graph_names = engine.get_graph_names()
    input_names = engine.get_input_names(graph_names[0])
    input_shape = engine.get_input_shape(graph_names[0],input_names[0])

5.17.9. get_output_shape

查询选定计算图中特定输出Tensor的shape。

接口形式:
def get_output_shape(self, graph_name: str, tensor_name: str)->list

参数说明:

  • graph_name: str

设定需要查询的计算图的name。

  • tensor_name: str

需要查询的Tensor的name。

返回值说明:

  • tensor_shape: list

该name下的输出Tensor的shape。

示例代码:
import sophon.sail as sail

if __name__ == '__main__':
    dev_id = [0,1]
    bmodel_path = "your_bmodel.bmodel"
    engine = sail.MultiEngine(bmodel_path,dev_id)
    graph_names = engine.get_graph_names()
    output_names = engine.get_output_names(graph_names[0])
    output_shape = engine.get_output_shape(graph_names[0], output_names[0])

5.17.10. process

在特定的计算图上进行推理,需要提供系统内存的输入数据。

接口形式:
def process(self, input_tensors: dict {str : numpy.array})->dict {str : numpy.array}

def process(self, input_tensors: list[dict{str: sophon.sail.Tensor}] )->dict {str : Tensor}

参数说明:

  • input_tensors: dict{ str : numpy.array }

输入的Tensors。

返回值说明:

  • output_tensors: dict{str : numpy.array}

返回推理之后的结果。

示例代码:
import sophon.sail as sail
import numpy as np

if __name__ == '__main__':
    dev_id = [0,1]
    handle = sail.Handle(0)
    bmodel_path = 'your_bmodel.bmodel'
    engine = sail.MultiEngine(bmodel_path, dev_id)
    graph_name = engine.get_graph_names()[0]
    input_names = engine.get_input_names(graph_name)
    output_names = engine.get_output_names(graph_name)

    input_tensors_map = {}

    # form 1
    input_numpy_map = {}
    for input_name in input_names:
        data = np.ones(engine.get_input_shape(graph_name,input_name),dtype=np.float32)
        input_numpy_map = {input_name:data}
    output_tensors_map = engine.process(input_numpy_map)
    print(output_tensors_map)

    # form 2
    for input_name in input_names:
        data = np.ones(engine.get_input_shape(graph_name,input_name),dtype=np.float32)
        tensor = sail.Tensor(handle,data)
        input_tensors_map[input_name] = tensor
    input_tensors_vector = [input_tensors_map]
    output_tensors_map = engine.process(input_tensors_vector)
    print(output_tensors_map)