pytorch 问题汇总

1. Cublas runtime error : library not initialized

在使用 GPU 运行的时候,提示这个错误,相关问题解决方法为:
参考github issue, [pytorch forum],

sudo rm -rf ~/.nv

还是无法解决,而且删除了这个文件之后,如果运行 gpu程序还会再次生成这个缓存文件。

看到 forum 里面有一个的回答是:

I’ve faced same problem. But, on my server, this problem is caused by that there is no enough memory on GPU devices the program is using. You may specify another GPU for your program by using torch.cuda.set_device(id_of_idle_device).
Hop this can help you.

更改了batch_size,从64减小到了32,发现就可以正常运行了,是因为GPU 显存不足。

2. GPU 内存不足

自己写了个数据输入的 iterator, 然后GPU 直接不足,即使将 batch_size改为1,也还是这样。在 CPU 运行状态下查看内存的使用状况,
这里写图片描述

虚拟内存0.284t, 实际内存0.056t, GPU 肯定是装不下的。
在更改 batch_size的情况下,内存占用还是不变,应该是在给 CNN 输入数据的时候,并没有按照 batch一次次的输入,而是一次性全部放进内存了。

还是应该先使用自带的torch.nn.utils.Datasettorch.nn.utils.DataLoader来进行数据输入。

3. 多 GPU 下module模块的并行

多 GPU 下,使用

device_ids = [0,1,2,3]
model = torch.nn.DataParallel(model.cuda(device_ids[0]), device_ids = device_ids)
optim = torch.nn.optim(optimizer = torch.optim.SGD(model.module.new_cls.parameters(), lr=learning_rate,momentum=0.9))

new_cls 为 model中的一个 sequential, 由于model被包装在了DataParallel中, model.module才为实际的网络。

4. Device-side assert triggered

参考RuntimeError: cuda runtime error (59) : device-side assert triggered at XXX.

GPU tensor 下索引失败的时候引起的异常,out-of-bounds,
即在[0, x]下,索引为负,或者超过 x。

5. multi-target not supported

参考RuntimeError: multi-target not supported.
在使用 crossentropyloss的时候 target 不是 one-hot vector,
需要直接使用其类别索引即可。

你可能感兴趣的:(pytorch)