问题如下:
1.问题如下:
RuntimeError: CUDA error: device-side assert triggered
CUDA kernel errors might be asynchronously reported at some other API call,so the stacktrace below might be incorrect.
For debugging consider passing CUDA_LAUNCH_BLOCKING=1.
2.解决方案:
(1)一开始我在网上查找解决方案,结果大部分网友的解决思路都是类似于这样:
有人说是造成这个问题的原因就是在做分类任务时,训练数据中存在超出分类数目的标签。举个例子:如果你一共设置了8个类,但是训练数据中的标签里出现了9,就会报这个错误。那么问题来了,这里有一个陷阱。训练数据中的标签含0也会报上述错误。这个就非常诡异了。一般我们都从0开始数,但是在pytorch里0以下的类别标签都是要报错的。所以如果类别标签从0开始,要给所有类别标签都加上1。
pytorch会自己扫描train_path下的每一个文件夹(每类图片都位于其类别的文件夹下),并将每一个类映射成数值,比如有4类,类别标签就是[0,1,2,3]。在进行二分类的时候的确是将标签映射成了[0,1],但是在进行4分类的时候,标签却映射成了[1,2,3,4],因此就会报错。
(2)实际上我按照这种思路去解决并没有用,依然报错同样的问题。后来我仔细查找代码,发现最后原来不是什么标签与分类的类别对不上之类的,而是最后一层网络的代码有问题,你自己要输出是几分类,就应该填写几分类。
self.outlayer = nn.Linear(256 * 1 * 1, 3) # 最后的全连接层
# 别人是3分类,而我的是5分类,改正这里就解决了
self.outlayer = nn.Linear(256 * 1 * 1, 5) # 最后是全连接层
(3)其实就是一个小问题,但是搞了老半天,在此记录一下。解决之后的实际情况:
问题如下:RuntimeError: CUDA error: device-side assert triggeredCUDA kernel errors might be asynchronously reported at some other API call,so the stacktrace below might be incorrect.For debugging consider passing CUDA_LAUNCH_BLOCKING=1.
import tornado.ioloop
import tornado.web
from tornado.httpclient import HTTPClient, AsyncHTTPClient
class MainHandler(tornado.web.RequestHandler):
def get(self):
h_c = HTTPClient()
res = h_c.fetch("http://www.baidu.com")
# print(res)
# pass
跑模型时出现
Runtime
Error
:
CUDA
out of memory.错误 查阅了许多相关内容,原因是:GPU显存内存不够
简单总结一下
解决
方法:
将batch_size改小。
取torch变量标量值时使用item()属性。
可以在测试阶段添加如下代码:
with torch.no_grad(): # 停止自动反向计算梯度
https://wisdomai.xyz/tool/pytorch/archives/2301
https://ptorch.com/news/160.html
作者:菜叶儿掉啦
参考资料:自己debug
首先,我报错的
问题
的文本是:
Runtime
Error
:
CUDA
error
:
device
-s
ide
assert
trigger
ed
以及
Assert
ion `input_val >= zero && input_val <= one` fail
ed
把这两个文本放在前面以便搜索引擎检索。下面说一下我的
解决
方案,因为
问题
解...
场景:我是使用jupyter notebook运行pytorch在
cuda
上跑的时候遇到的
问题
。
完美
解决
-
Runtime
Error
:
CUDA
error
:
device
-s
ide
assert
trigger
ed
: 这里提到说是数目类别的
问题
,比如四类分类,理论上标签one-hot最大值是3,出现了4就会报这个错误。
上面的本质说法和记录一个
error
–
CUDA
error
:
device
-s
ide
assert
trigger
ed
是一样的:就是一个检索越界的
问题
。
我的
问题
和前面的都不一样,而且c
点进来的朋友你好啊,先别说,让我猜猜,你是不是正在写一个NLP模型?它是不是有lstm,或者transformer,或者textcnn?哈哈是不是猜中啦。你现在一定很着急,看了各种博客,说是下标越界~,可是找来找去,真的找不出哪里出界了?打印出来各个都在标签限制内呢?
别着急,我相信看了我的博客有很大概率可以
解决
你的难题。
那就是————————————————————
你的emb
ed
ing中词的总数设小啦!
在函数 nn.Emb
ed
ding(vocab_size, emb
ed
ding_dim
Runtime
Error
:
CUDA
error
:
device
-s
ide
assert
trigger
ed
CUDA
kernel
error
s might be asynchronously report
ed
at some other API call,so the stacktrace below might be incorrect.
For debugging cons
ide
r passing
CUDA
_LAUNCH_BLOCKING=1.
可能的情况:有地方数组越界了(下标大于原长或下标小于0
runtime
error
:
cuda
error
:
device
-s
ide
assert
trigger
ed
是
CUDA
(Compute Unifi
ed
Device
Architecture)在执行GPU计算时发生了错误的提示。在GPU计算过程中,如果程序发现了不符合预期的操作或者输入,就会触发
assert
(断言)来中断程序的执行并输出错误提示。
常见的导致
runtime
error
:
cuda
error
:
device
-s
ide
assert
trigger
ed
的原因包括:
1. 内存
问题
- 在GPU内存中分配了太多的空间,或在GPU上执行的程序没有释放GPU内存。建议检查代码中内存分配和释放的情况。
2. 计算
问题
- 在GPU上执行的程序可能存在错误的计算,例如在浮点计算中做除以0等非法操作。建议检查代码中的计算逻辑。
3. 数据不连续或不规范的情况 -
CUDA
只支持连续的数据内存,如果数据内存不连续或不在正确的内存位置,会导致
assert
(断言)触发。
4. 版本不匹配 -
CUDA
编译器、
CUDA
驱动程序和
CUDA
运行库的版本必须匹配。如果版本不同,可能会导致运行错误。
为了
解决
这个
问题
,我们需要逐步排除上述可能导致
runtime
error
:
cuda
error
:
device
-s
ide
assert
trigger
ed
异常的原因。首先检查代码中的内存管理,确保没有内存泄漏的
问题
。然后,检查计算逻辑是否正确,并保证传入的数据是规范的。最后,确保
CUDA
开发环境的版本匹配。