nn.RuntimeManager

class RuntimeManager

RuntimeManager持有运行时资源,在CPU时持有线程池,内存池等资源;在GPU时持有Kernal池等资源; 模型的执行需要使用RuntimeManager的资源,在同一个线程内RuntimeManager可以被共享使用,注意:不可跨线程使用


RuntimeManager()

创建一个空Tensor

在实际使用中创建空RuntimeManager没有意义,请使用nn.create_runtime_manager来创建RuntimeManager

参数:

  • None

返回:RuntimeManager对象

返回类型:RuntimeManager


set_cache(cache_path)

设置缓存文件路径,在GPU情况下可以把kernel和Op-info缓存到该文件中

参考:Interpreter.setCacheFile

参数:

  • cache_path:str

返回:None

返回类型:None


set_external(path)

设置额外数据文件路径,使用该文件中的数据作为权重或常量

参考:Interpreter.setExternalFile

参数:

  • path:str

返回:None

返回类型:None


update_cache()

在执行推理之后,更新GPU的kernel信息到缓存文件;应该在每次推理结束后指定该函数

参考:Interpreter.updateCacheFile

参数:

  • None

返回:None

返回类型:None


set_mode(mode)

设置会话的执行模式

参考:Interpreter.setSessionMode

参数:

  • mode:int 执行Session的模式,请参考mode

返回:None

返回类型:None


set_hint(mode, value)

设置执行时的额外信息

参考:Interpreter.setSessionMode

参数:

  • mode:int hint类型

  • value:int hint值

返回:None

返回类型:None


Example

import MNN.nn as nn
import MNN.cv as cv
import MNN.numpy as np
import MNN.expr as expr

config = {}
config['precision'] = 'low'
# 使用GPU后端
config['backend'] = 3
config['numThread'] = 4

# 创建RuntimeManager
rt = nn.create_runtime_manager((config,))
rt.set_cache(".cachefile")
# mode = auto_backend
rt.set_mode(9)
# tune_num = 20 
rt.set_hint(0, 20)
# 加载模型并使用RuntimeManager
net = nn.load_module_from_file('mobilenet_v1.mnn', ['data'], ['prob'], runtime_manager=rt)
# cv读取bgr图片
image = cv.imread('cat.jpg')
# 转换为float32, 形状为[224,224,3]        
image = cv.resize(image, (224, 224), mean=[103.94, 116.78, 123.68], norm=[0.017, 0.017, 0.017])
# 增加batch HWC to NHWC
input_var = np.expand_dims(image, 0)
# NHWC to NC4HW4
input_var = expr.convert(input_var, expr.NC4HW4)
# 执行推理
output_var = net.forward(input_var)
# NC4HW4 to NHWC 
output_var = expr.convert(output_var, expr.NHWC)
# 打印出分类结果, 282为猫
print("output belong to class: {}".format(np.argmax(output_var)))