华为计算微信公众号
昇腾AI开发者公众号
华为计算微博
华为计算今日头条
如题:模型推理放子进程实现,同时运行4个子进程。代码和执行效率如下:平均一帧需要0.13秒左右,是否还能提高推理效率,能在0.1秒以下吗? 是否有批量图片推理的方式? 超频成13T能提高性能吗? (CANN是8.0版本) 代码:
def model_process(device,model,model_platform,m_p_status,brun,in_mq,out_mq): # 初始化模型运行资源 context = None if model_platform == "acl": # ACL线程中初始化内容 context = ACLModeManger.pro_init_acl(device) # 初始化acl资源,并创建context # 初始化模型资源 -- 加载模型文件 ret = model.init_acl_resource() # 加载和初始化离线模型文件--om文件 if not ret: print("初始化模型资源出错,退出线程!") m_p_status.value = 2 return #执行工作 m_p_status.value = 1 use_time = 0 icount = 0 while brun.value: try: inData = in_mq.get(timeout=0.1) except: #print("in_mq_空") continue if inData: s_time = time.time() outputs = model.execute([inData.img,]) e_time = time.time() outdata = ModeloutData(inData.image,inData.scale_ratio,inData.pad_size,outputs,inData.channel_id) del inData.img #结果输出 if out_mq.full(): tmp = out_mq.get() del tmp out_mq.put(outdata) icount += 1 use_time += (e_time - s_time) if icount == 500: avg_time = use_time / 500 print(f"model_process耗时--{avg_time}秒") use_time = 0 icount = 0 #结束进程,释放资源 m_p_status.value = 0 while not in_mq.empty(): try: in_mq.get_nowait() # Get without blocking except Exception as e: break # In case of any unexpected errors # 反初始化 if model_platform == "acl": try: model.release() # 释放模型资源资源 # 删除模型对象 del model # 释放ACL资源 ACLModeManger.pro_del_acl(device,context) except Exception as e: print(e)
执行结果: 平均耗时0.13秒左右
板卡性能情况: 4个CPU70%,内存6GB,A Icroe 60-70%, Memory(%) 90 (这个是NPU的内存?)
我要发帖子
如题:模型推理放子进程实现,同时运行4个子进程。代码和执行效率如下:平均一帧需要0.13秒左右,是否还能提高推理效率,能在0.1秒以下吗? 是否有批量图片推理的方式? 超频成13T能提高性能吗? (CANN是8.0版本)
代码:
def model_process(device,model,model_platform,m_p_status,brun,in_mq,out_mq): # 初始化模型运行资源 context = None if model_platform == "acl": # ACL线程中初始化内容 context = ACLModeManger.pro_init_acl(device) # 初始化acl资源,并创建context # 初始化模型资源 -- 加载模型文件 ret = model.init_acl_resource() # 加载和初始化离线模型文件--om文件 if not ret: print("初始化模型资源出错,退出线程!") m_p_status.value = 2 return #执行工作 m_p_status.value = 1 use_time = 0 icount = 0 while brun.value: try: inData = in_mq.get(timeout=0.1) except: #print("in_mq_空") continue if inData: s_time = time.time() outputs = model.execute([inData.img,]) e_time = time.time() outdata = ModeloutData(inData.image,inData.scale_ratio,inData.pad_size,outputs,inData.channel_id) del inData.img #结果输出 if out_mq.full(): tmp = out_mq.get() del tmp out_mq.put(outdata) icount += 1 use_time += (e_time - s_time) if icount == 500: avg_time = use_time / 500 print(f"model_process耗时--{avg_time}秒") use_time = 0 icount = 0 #结束进程,释放资源 m_p_status.value = 0 while not in_mq.empty(): try: in_mq.get_nowait() # Get without blocking except Exception as e: break # In case of any unexpected errors # 反初始化 if model_platform == "acl": try: model.release() # 释放模型资源资源 # 删除模型对象 del model # 释放ACL资源 ACLModeManger.pro_del_acl(device,context) except Exception as e: print(e)执行结果: 平均耗时0.13秒左右
板卡性能情况: 4个CPU70%,内存6GB,A Icroe 60-70%, Memory(%) 90 (这个是NPU的内存?)
