You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何正确打印GPU变量的GPU端真实地址

现象原因

Python内置的id()函数返回的是Python对象自身在主机CPU内存中的唯一标识地址,和张量底层存储实际数据的位置没有关系。

不管张量是分配在CPU内存还是GPU显存上,你在Python代码中操作的torch.Tensor本质是一个存在于主机内存中的包装对象,内部只保存张量的形状、数据类型、步长、指向对应设备上真实数据存储的指针这类元信息。你测试代码里a = torch.tensor([1,2,3])在主机内存创建了一个Tensor包装对象,执行b = a.to('cuda:2')时会在主机内存再创建一个全新的Tensor包装对象,两个对象都在当前Python进程的主机内存堆上分配,返回的id值接近是完全正常的,这俩值从头到尾都和GPU显存地址没有关联。

正确获取GPU显存真实地址的方法

要获取张量底层存储数据的真实地址,不要用id(),直接调用PyTorch张量自带的data_ptr()方法即可:

  • 对CPU张量,该方法返回张量数据在主机内存中的起始地址
  • 对GPU张量,该方法返回张量数据在对应CUDA设备显存中的起始地址

对应测试代码如下:

import torch

a = torch.tensor([1, 2, 3])
print(f"CPU张量的Python包装对象地址(id返回值): {id(a)}")
print(f"CPU张量数据在主机内存的真实地址: {a.data_ptr()}")

b = a.to('cuda:2')
print(f"GPU张量的Python包装对象地址(id返回值): {id(b)}")
print(f"GPU张量所在设备: {b.device}")
print(f"GPU张量数据在cuda:2显存中的真实地址: {b.data_ptr()}")

注意:data_ptr()返回的地址属于对应设备的独立地址空间,CPU内存地址和GPU显存地址不处于同一个地址空间,二者的数值没有可比性,不能直接跨设备对地址做解引用操作。

内容的提问来源于stack exchange,提问作者Jacob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 14:27:18