Pytorch 0号卡占用问题

RuntimeError: cuda runtime error (2) : out of memory at /opt/conda/conda-bld/pytorch_1587428266983/work/aten/src/THC/THCCachingHostAllocator.cpp:278

如上,我们在跑程序时经常会遇到这种情况,除了常规的因为模型参数量或计算量过大导致的问题,还有一种经常的情况下是因为0号显卡显存不足,导致显存空间分配不足,从而提示报错。很多人有一个疑问就是,为什么我们明明指定的是其它张卡,可0卡经常会多多少少占用一点,如果此时刚好有人在占用0号卡把显存给挤没了,即使你指定的卡不是0号卡,也会报“out of memory”。

解决这个问题,我们首先要先了解为什么会出现此问题。在Pytorch框架中,模型初始化的时候会默认占用0号卡的显卡,此时如果0号卡的显存空间不足,则会报错,具体讨论可见此链接

因此,为了解决这个问题,最直接的方法便是将其它显卡“屏蔽”掉即可,换句话说就是使指定的卡可见,常用的代码有:

os.environ['CUDA_VISIBLE_DEVICES'] = ‘gpu_id’
device = torch.device(f'cuda:{0}' if torch.cuda.is_available() else 'cpu')

其中,gpu_id便是我们想要指定的设备号,多卡同理。或者直接在运行命令行的时候加入也可:

CUDA_VISIBLE_DEVICES=gpu_id python train.py

此外,还有一种方法是使用“with”语句指定,在涉及到调用显卡的地方指定设备号:

with torch.cuda.device(gpu_id):
	...

如果以上方法都不奏效,那么可以再试试看把模型map到cpu上运行,具体问题具体分析。

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值