要复用 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

最低0.47元/天 解锁文章
107

被折叠的 条评论
为什么被折叠?



