pytorch中,通常加后缀“_”来表示原地运算符,例如.add_(),或者python中的 “+=”。
这种情况通常是数据还在cpu上,又要用到gpu上计算导致的,可以尝试数据后面加上.cuda()。
cpu上的tensor和gpu上的tensor是太一样的:PyTorch中的数据类型为Tensor,Tensor与Numpy中的ndarray类似,同样可以用于标量,向量,矩阵乃至更高维度上面的计算。PyTorch中的tensor又包括CPU上的数据类型和GPU上的数据类型,一般GPU上的Tensor是CPU上的Tensor加cuda()函数得到。通过使用Type函数可以查看变量类型。系统默认的torch.Tensor是torch.FloatTensor类型。例如data = torch.Tensor(2,3)是一个2*3的张量,类型为FloatTensordata.cuda()就将其转换为GPU的张量类型,torch.cuda.FloatTensor类型。
尝试将torch.LongTensor转换为:torch.FolatTensor类型。
函数或者可调用对象使用时候没有加括号。
(1)只要是用到for循环都是在cpu上进行的,会消耗巨量的时间
(2)只要是用到生成矩阵这种 *** 作都是在cpu上进行的,会很消耗时间。
(3)数据往cuda()上搬运会比较消耗时间,也就是说 .cuda()会比较消耗时间,能去掉就去掉。
(4)在服务器上,如果可以在一块gpu上运行就不要采用net = nn.DataParallel(net),这种gpu并行方式比单个gpu要耗时。
关于断点调试: pycharm单步调试 - qq_33485434的博客 - CSDN博客
x= torch.tensor(x) ------> x= x.clone()
这个好奇怪,对于x= torch.matmul(x,one_hot_copy), 只要提前把x和one_hot_copy后面加上.float()就可以解决。
二维张量相乘: 二维矩阵相乘 A*B: A.mm(B), 多维矩阵相乘 A*B: A.matmul(B), 注意需要long()数据类型。tensor.mul(tensor)
许多同学误以为PyTorch和TensorFlow一样,运行时需要本机环境内的CUDA和CuDNN支持,但其实在一台没有安装CUDA的环境中按照官网的指南安装PyTorch也是可以正常在GPU上运行的。那么安装GPU版本的PyTorch需要什么?答案是:GPU和驱动。
我们看一下官网给出的 安装教程 :
在选择不同CUDA版本时,PyTorch版本号尾部会出现 cuxxx 的字样,也就是说,PyTorch在安装时会自动安装所需的CUDA运行库,用户只需要保持PyTorch版本(包含其内部的CUDA版本)、Nvidia驱动版本和GPU型号相匹配。
CUDA版本与驱动版本对应关系见下图:
通常情况下,只要驱动满足要求,并且PyTorch官方有预编译相应的CUDA版本,直接安装对应版本的PyTorch即可。
注意:安培(Ampere)架构GPU只支持CUDA11.0即以上版本,PyTorch官方只有1.7及以上版本才有预编译CUDA11,因此建议使用安培架构GPU的同学使用PyTorch1.7及以上版本
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)