onnx推理-复用gpu内存

要复用 ortvalue_from_numpy 创建的 GPU 内存并更新其中的数据,有几种方法。关键在于避免每次创建新的 OrtValue,而是重复使用已有的内存。

方法一:使用 numpy() 方法更新(推荐)

这是最直接和常用的方法。OrtValue 对象提供了 numpy() 方法来获取一个与之共享底层数据的 NumPy 视图。

python

import numpy as np
import onnxruntime as ort

# 初始化阶段:创建可复用的 OrtValue
output_shape = (1, 1000)
dtype = np.float32

# 创建一个模板numpy数组(内容不重要,重要的是形状和类型)
template_numpy = np.zeros(output_shape, dtype=dtype)
gpu_output_ortvalue = ort.OrtValue.ortvalue_from_numpy(template_numpy, 'cuda', 0)

# 绑定输出
io_binding = session.io_binding()
io_binding.bind_ortvalue_output('output_name', gpu_output_ortvalue)

# 推理循环中:更新数据并复用
for i in range(num_inferences):
    # 获取 OrtValue 的 numpy 视图
    output_numpy_view = gpu_output_ortvalue.numpy()
    
    # 方法1: 直接赋值(如果形状完全匹配)
    # output_numpy_view[:] = new_data # 将新数据拷贝到GPU内存
    
    # 方法2: 使用 numpy 的 copyto 函数(更高效)
    new_data 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值