1.初始报错
CUDA out of memory. Tried to allocate 244.00 MiB (GPU 0; 2.00 GiB total capacity; 1.12 GiB already allocated; 25.96 MiB free; 1.33 GiB reserved in total by PyTorch)
需要分配244MiB,但只剩25.96MiB空闲。,1.33GiB分配给了PyTorch,不知道能不能重新非给CUDA。
(1)分配出错的代码
result, result_bb = run_meta_tracker(seq, img_list, init_bbox, gt=gt, savefig_dir='', display=args.display)
bbreg_feats = forward_samples(init_net, image1, bbreg_examples, out_layer='features')
feat = net(regions, out_layer=out_layer)
result = self.forward(*input, **kwargs)
x = self.features(x)
result = self.forward(*input, **kwargs)
input = module(input)
result = self.forward(*input, **kwargs)
x_sq = (x**2).unsqueeze(dim=1)
(2)尝试网友给出的方法
链接:https://blog.csdn.net/pursuit_zhangyu/article/details/88717635
说明:no_grad这个上下文管理器,在作用域内只做计算,不记录计算图
修改后:CUDA out of memory. Tried to allocate 256.00 MiB (GPU 0; 2.00 GiB total capacity; 1.31 GiB already allocated; 7.96 MiB free; 1.34 GiB reserved in total by PyTorch)
未(mei)能(you)解(ruan)决(yong)
(3)尝试减少输入图片的数量
换用了数据量更少的数据集,但仍然内存不足,我估计是模型本身就很大,原贴用的GTX 1070,我是960M,降维打击啊。
(4)使用CUDA_VISIBLE_DEVICES限制一下使用的GPU
链接:https://www.cnblogs.com/jisongxie/p/10276742.html
未(mei)能(you)解(ruan)决(yong)
(6)代码优化
(代码不是自己写的啊,这个可难办了)
(7)缩小图片尺寸
可以确定,跟数据集大小关系不大,就是模型太大的问题。
(8)降低计算的精度,比如float32 变为float16
这个方法肯定会有用,但我还没找到便捷的方法
(9)使用torch.cuda.empty_cache(),释放不需要的显存
有用,但节约的空间还是不够
CUDA out of memory. Tried to allocate 244.00 MiB (GPU 0; 2.00 GiB total capacity; 1.12 GiB already allocated; 191.96 MiB free; 1.16 GiB reserved in total by PyTorch)
最后!!!!
问题解决办法是换个好点的显卡,代码优化纯属杂技。