服务器上onnxruntime

您所在的位置:网站首页 显存怎么清空所有数据 服务器上onnxruntime

服务器上onnxruntime

2024-07-12 14:45| 来源: 网络整理| 查看: 265

在使用ONNX模型时,可以通过在每次模型推理完成后显式调用onnxruntime.InferenceSession对象的run_with_iobinding()方法,并传递一个device参数来实现显存的释放。

具体地,可以将以下代码片段嵌入到你的代码中:

python import onnxruntime as rt import numpy as np

sess = rt.InferenceSession("your_onnx_model_path") input_name = sess.get_inputs()[0].name # 获取输入节点名称 output_name = sess.get_outputs()[0].name # 获取输出节点名称

构造输入数据

input_data = np.random.rand(batch_size, input_dim).astype(np.float32)

构造IO绑定字典

io_binding = sess.io_binding() io_binding.bind_cpu_input(input_name, input_data.shape) io_binding.bind_output(output_name, device_type='cuda', device_id=0) io_binding.bind_input(input_name, rt._get_device_mem_bufer(input_data)) # 绑定输入数据 sess.run_with_iobinding(io_binding) # 执行预测 del input_data # 删除不再需要的变量 在调用完sess.run_with_iobinding(io_binding)方法后,可以删除不再需要的变量以释放显存。

需要注意的是,这种方法仅对GPU进行了显存的释放,CPU端的内存并不会被回收。因此,如果需要释放CPU内存,可以考虑在模型执行前加上以下代码:

python from onnxruntime import get_all_providers

ort_session = rt.InferenceSession("your_onnx_model_path", providers=get_all_providers()) ort_session.disable_fallback() 这样可以禁用ONNXRuntime的回退机制,从而确保使用最新的GPU内存。另外,如果使用的是CUDA 11.x版本,还需要在代码中添加以下配置:

python import onnxruntime.capi.onnxruntime_pybind11_state as rtps rtps.CudaDevice.SetCurrentGpuDevice(0) 这个配置可以让ONNXRuntime正确地使用CUDA 11.x的API来管理GPU显存。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3