def test_args_invalid_model_path(self): device_id = 0 model_path = "xxx_invalid.om" options = aclruntime.session_options() with pytest.raises(RuntimeError) as e: aclruntime.InferenceSession(model_path, device_id, options) print("when om_path invalid error msg is %s", e)
def infer_dynamicshape(): device_id = 0 options = aclruntime.session_options() session = aclruntime.InferenceSession(model_path, device_id, options) # only need call this functon compare infer_simple session.set_dynamic_shape("actual_input_1:1,3,224,224") session.set_custom_outsize([10000]) # create new numpy data according inputs info barray = bytearray(session.get_inputs()[0].realsize) ndata = np.frombuffer(barray) # convert numpy to pytensors in device tensor = aclruntime.Tensor(ndata) tensor.to_device(device_id) outnames = [session.get_outputs()[0].name] feeds = {session.get_inputs()[0].name: tensor} outputs = session.run(outnames, feeds) print("outputs:", outputs) for out in outputs: out.to_host() print(session.sumary())
def infer_step(): device_id = 0 options = aclruntime.session_options() options.log_level = 1 session = aclruntime.InferenceSession(model_path, device_id, options) # create new numpy data according inputs info barray = bytearray(session.get_inputs()[0].realsize) ndata = np.frombuffer(barray) # convert numpy to pytensors in device tensor = aclruntime.Tensor(ndata) tensor.to_device(device_id) outnames = [session.get_outputs()[0].name] feeds = {session.get_inputs()[0].name: tensor} # infer three step function session.run_setinputs(feeds) session.run_execute() outputs = session.run_getoutputs(outnames) # outputs = session.run(outnames, feeds) print("step outputs:", outputs) for out in outputs: out.to_host() # sumary inference throughput print(session.sumary())
def test_args_invalid_device_id(self): device_id = 100 model_path = self.get_resnet_static_om_path(1) options = aclruntime.session_options() with pytest.raises(RuntimeError) as e: aclruntime.InferenceSession(model_path, device_id, options) print("when device_id invalid error msg is %s", e)
def infer_run_simultaneous(): device_id = 0 # one call options = aclruntime.session_options() session = aclruntime.InferenceSession(model_path, device_id, options) # create new numpy data according inputs info barray = bytearray(session.get_inputs()[0].realsize) ndata = np.frombuffer(barray) # convert numpy to pytensors in device tensor = aclruntime.Tensor(ndata) tensor.to_device(device_id) outnames = [session.get_outputs()[0].name] feeds = {session.get_inputs()[0].name: tensor} # another call options1 = aclruntime.session_options() model_path1 = sys.argv[2] session1 = aclruntime.InferenceSession(model_path1, device_id, options1) # create new numpy data according inputs info barray1 = bytearray(session1.get_inputs()[0].realsize) ndata1 = np.frombuffer(barray1) # convert numpy to pytensors in device tensor1 = aclruntime.Tensor(ndata1) tensor1.to_device(device_id) outnames1 = [session1.get_outputs()[0].name] feeds1 = {session1.get_inputs()[0].name: tensor1} # one run outputs = session.run(outnames, feeds) print("outputs:", outputs) for out in outputs: out.to_host() # sumary inference throughput print(session.sumary()) # another run outputs1 = session1.run(outnames1, feeds1) print("outputs1:", outputs1) for out in outputs1: out.to_host() # sumary inference throughput print(session1.sumary())
def init_inference_session(args): options = aclruntime.session_options() if args.acl_json_path != None: options.acl_json_path = args.acl_json_path if args.debug == True: logger.setLevel(logging.DEBUG) options.log_level = 1 session = aclruntime.InferenceSession(args.model, args.device_id, options) set_session_options(session, args) logger.debug("session info:{}".format(session)) return session
def test_infer_invalid_device_id(self): device_id = 0 options = aclruntime.session_options() model_path = self.get_resnet_static_om_path(1) session = aclruntime.InferenceSession(model_path, device_id, options) # create new numpy data according inputs info barray = bytearray(session.get_inputs()[0].realsize) ndata = np.frombuffer(barray) # convert numpy to pytensors in device tensor = aclruntime.Tensor(ndata) with pytest.raises(RuntimeError) as e: tensor.to_device(device_id + 100)
def test_infer_invalid_input_type(self): device_id = 0 options = aclruntime.session_options() model_path = self.get_resnet_static_om_path(1) session = aclruntime.InferenceSession(model_path, device_id, options) # create new numpy data according inputs info barray = bytearray(session.get_inputs()[0].realsize) ndata = np.frombuffer(barray) outnames = [session.get_outputs()[0].name] feeds = {session.get_inputs()[0].name: ndata} with pytest.raises(TypeError) as e: outputs = session.run(outnames, feeds) print("outputs:", outputs)
def load(self, model_path, inputs=None, outputs=None, device_id=0): self.device_id = device_id self.model_path = model_path options = aclruntime.session_options() #options.log_level = 1 self.session = aclruntime.InferenceSession(model_path, device_id, options) if not inputs: self.inputs = [meta.name for meta in self.session.get_inputs()] else: self.inputs = inputs if not outputs: self.outputs = [meta.name for meta in self.session.get_outputs()] else: self.outputs = outputs warmup(self.session, self.session.get_inputs(), self.session.get_outputs(), device_id)
def test_infer_invalid_outname(self): device_id = 0 options = aclruntime.session_options() model_path = self.get_resnet_static_om_path(1) session = aclruntime.InferenceSession(model_path, device_id, options) # create new numpy data according inputs info barray = bytearray(session.get_inputs()[0].realsize) ndata = np.frombuffer(barray) # convert numpy to pytensors in device tensor = aclruntime.Tensor(ndata) tensor.to_device(device_id) outnames = [session.get_outputs()[0].name + "xxx"] feeds = {session.get_inputs()[0].name: tensor} with pytest.raises(RuntimeError) as e: outputs = session.run(outnames, feeds) print("outputs:", outputs)
def get_model_info(): device_id = 0 options = aclruntime.session_options() # 方法1设置级别为debug模式后可以打印模型信息 options.log_level = 1 session = aclruntime.InferenceSession(model_path, device_id, options) # 方法2 直接打印session 也可以获取模型信息 print(session) # 方法3 也可以直接通过get接口去获取 intensors_desc = session.get_outputs() for i, info in enumerate(intensors_desc): print("input info i:{} shape:{} type:{} val:{} realsize:{} size:{}". format(i, info.shape, info.datatype, int(info.datatype), info.realsize, info.size)) intensors_desc = session.get_outputs() for i, info in enumerate(intensors_desc): print("outputs info i:{} shape:{} type:{} val:{} realsize:{} size:{}". format(i, info.shape, info.datatype, int(info.datatype), info.realsize, info.size))
def test_infer_runcase_empty_outputname(self): device_id = 0 options = aclruntime.session_options() model_path = self.get_resnet_static_om_path(1) session = aclruntime.InferenceSession(model_path, device_id, options) # create new numpy data according inputs info barray = bytearray(session.get_inputs()[0].realsize) ndata = np.frombuffer(barray) # convert numpy to pytensors in device tensor = aclruntime.Tensor(ndata) tensor.to_device(device_id) outnames = [] feeds = [tensor] outputs = session.run(outnames, feeds) print("outputs:", outputs) for out in outputs: out.to_host() print(session.sumary())
def test_infer_no_set_dynamicshape(self): device_id = 0 options = aclruntime.session_options() input_tensor_name = self.get_input_tensor_name() model_path = self.get_resnet_dymshape_om_path() session = aclruntime.InferenceSession(model_path, device_id, options) session.set_custom_outsize([10000]) # create new numpy data according inputs info barray = bytearray(session.get_inputs()[0].realsize) ndata = np.frombuffer(barray) # convert numpy to pytensors in device tensor = aclruntime.Tensor(ndata) tensor.to_device(device_id) outnames = [ session.get_outputs()[0].name ] feeds = { session.get_inputs()[0].name : tensor} with pytest.raises(RuntimeError) as e: outputs = session.run(outnames, feeds) print("outputs:", outputs)
def test_get_input_info(self): device_id = 0 options = aclruntime.session_options() input_tensor_name = self.get_input_tensor_name() model_path = self.get_resnet_dymshape_om_path() session = aclruntime.InferenceSession(model_path, device_id, options) session.set_dynamic_shape(input_tensor_name+":1,3,112,112") session.set_custom_outsize([80000]) basesize = session.get_inputs()[0].realsize session.set_dynamic_shape(input_tensor_name+":1,3,224,224") basesize1 = session.get_inputs()[0].realsize assert basesize1 == basesize*4 session.set_dynamic_shape(input_tensor_name+":2,3,224,224") basesize2 = session.get_inputs()[0].realsize assert basesize2 == basesize1*2 session.set_dynamic_shape(input_tensor_name+":8,3,224,224") basesize3 = session.get_inputs()[0].realsize assert basesize3 == basesize2*4
def acljson_run(): device_id = 0 options = aclruntime.session_options() options.acl_json_path = "./acl.json" session = aclruntime.InferenceSession(model_path, device_id, options)