如何解决如何在使用Pytorch张量和矩阵函数的同时利用GPU使Python中的自定义代码
我仅使用Pytorch张量和矩阵运算功能从头开始创建了CNN,希望利用GPU。令我惊讶的是,GPU的利用率仍为0%,而且我的训练似乎并不比在cpu上运行要快。
培训之前:
培训期间:
我已经仔细检查了CUDA是否可用,并已经安装了它。
图形卡:Nvidia GEFORCE 2070 SUPER
处理器:Intel i5 10400
编码环境:Jupyter Notebook
Cuda&Cudnn版本:11.0
Pytorch版本:1.6.0
解决方法
您必须使用来将模型和数据移至GPU
model.cuda()
# and
x = x.cuda()
y = y.cuda()
您似乎在-向前和向后的调用中执行此操作。为确保模型能够运行到GPU,请使用shell命令持续监控GPU使用情况
watch -n 5 nvidia-smi
奇怪,奇怪... 我尝试了您上面粘贴的代码。
由于我没有w1.pt,w2.pt,...文件,因此我注释掉了这些行,并取消注释了它们上方的行(将randn和0放在权重和偏差上的那些行)以便尝试它。我说得对吗?
结果是崩溃:“非法指令(核心已转储)”(在Linux上,割炬1.6.0,python3.7) 信息不多,因为在GPU上运行。设置为在cpu上运行时,它会崩溃,但错误消息现在更具信息性。在控制台输出下方:
torch.Size([500])
500
epoch: 0
Traceback (most recent call last):
File "not_on_gpu.py",line 476,in <module>
loss = model(x,y)
File "not_on_gpu.py",line 60,in __call__
x = l(x)
File "not_on_gpu.py",line 15,in __call__
self.out = self.forward(*args)
File "not_on_gpu.py",line 112,in forward
self.out = diff_dim_inp@self.w + self.b
RuntimeError: size mismatch,m1: [10 x 1024],m2: [3136 x 1024] at /pytorch/aten/src/TH/generic/THTensorMath.cpp:41
因此,我在Lin类的“正向”方法中打印了张量大小 (就在“ self.out = diff_dim_inp@self.w + self.b”语句之前)。
这就是我得到的:
它们的顺序如下:diff_dim_inp.shape |形状| self.b.shape
第一层:[10,3136] | [3136,1024] | [1024]
第二层:[10,1024] | [3136,1024] | [1024]
据我所知,该程序从未在主循环中传递“ loss = model(x,y)”语句。如果您在此行后放置一个标志(例如:print('OK'))怎么办?它是否显示在终端中?
因此,实际上,我的问题是:您确定您的程序确实有效吗? (我希望这不是一个愚蠢的问题...)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。