pytorch 中遇到的问题(持续更新中)

pytorch 中遇到的问题(持续更新中),第1张

        什么是inplace operation:in-place operation在pytorch中是指改变一个tensor的值的时候,不经过复制 *** 作,而是直接在原来的内存上改变它的值。可以把它成为原地 *** 作符。

        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及以上版本


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11438086.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存