在一般时候,当我们谈及存储时,我们指的是CPU上面的RMA。Pytorch张量也可以存储在另一种处理器上:GPU。每个Pytorch张量都可以存储到GPU上,以快速进行大规模并行计算。接下来,所有在张量上执行的操作将使用Pytorch附带的特定于GPU的例程来执行。
Pytorch支持各种GPU:
到2019年年中,Pytorch的主要版本只在支持CUDA的GPU上提供加速功能。Pytorch可以运行在AMD的ROCm上(ROCm的源代码可以在GitHub中找到),在GitHub上Pytorch主分支已提供了对AMD的支持,但到目前为止,你需要自己编译该源代码。
一、管理张量的设备属性—–decive
除了dtype,Pytorch张量还有设备(device)的概念,即张量数据在计算机上的位置。下面我们将通过指定构造函数的相应参数在GPU上创建一个张量:
points_gpu = torch.tensor([[4.0, 1.0], [5.0, 3.0], [2.0, 1.0]], device='cuda')
我们也可以使用to()方法将在CPU上面的张量复制到GPU上:
points_gpu = points.to(device='cuda')
这样将返回一个新的张量,该张量具有相同的数字数据,但存储在GPU的RAM上,而不是常规的RAM上。现在数据被存储在本地GPU上,当我们对张量执行各种运算时将被加速。几乎在所有情况下,基于CPU和GPU的张量都公开相同的面向用户的API,这使得编写代码更加容易,开发者无需关注大量的数字运算将会在哪种设备上运行。
多GPU的情况:
当我们的机器有多个GPU的时候,我们也可以通过从0开始传递一个整数来确定存储张量的GPU,例如:
points_gpu = points.to(device='cuda:0')
在此基础上,对张量执行的任何操作,例如将所有元素乘一个常数,都将在GPU上执行:
points = 2 * points # 在CPU上运行
points_gpu = 2 * points_gpu # 在GPU上运行
注意:一旦计算结果出来,张量points_gpu不会返回到CPU。
以下是上述代码产生的操作:
● 张量points被复制到GPU
● 在GPU上分配一个新的张量,用来存储乘法运算的结果
● 返回该GPU存储的张量的句柄
二、返回CPU
为了将张量移回CPU,我们需要向to()方法提供一个cpu参数:
points_cpu = points_gpu.to(device='cpu')
我们也可以使用简写的cpu()或cuda()方法来替代to()方法实现相同的目标:
points_gpu = points.cuda()
points_gpu = points.cuda(0)
points_cpu = points_gpu.cpu()
值得一提的是,通过使用to()方法,我们可以同时通过device和dtype参数来更改位置和数据类型
今天的文章Pytorch学习笔记—5:将张量存储到GPU分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/85786.html