服务器上onnxruntime |
您所在的位置:网站首页 › 显存怎么清空所有数据 › 服务器上onnxruntime |
在使用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 |