用电脑跑深度学习模型或者玩大型游戏时,突然弹出“显存不足”的提示,画面卡住甚至程序直接崩溃,这种体验太熟悉了。很多人第一反应是换显卡,其实不一定非得花大钱升级硬件,先试试这些实用办法。
调低程序的显存占用
训练神经网络时,batch size 设得太大是最常见的显存爆掉原因。比如原本设成128,可以试着改成32甚至16,虽然训练慢一点,但能稳稳跑起来。代码里改个参数就行:
model.train(batch_size=16)
图像处理或视频渲染软件里也一样,降低预览分辨率、关闭实时特效,能明显减轻显卡压力。
及时释放不用的显存
写代码的时候,变量用完记得清掉。特别是 PyTorch 用户,别让中间结果一直占着显存:
del output
torch.cuda.empty_cache()
这招在循环训练多个模型时特别管用,加两行代码就能腾出几百MB空间。
检查后台有没有“吃显存”的程序
开着游戏的同时还挂着微信视频、浏览器开了二十个标签页,显卡得分身乏术。打开任务管理器,切换到“性能”标签,点开GPU那一栏,看看各个进程的显存使用情况。经常发现某些浏览器标签或者后台工具偷偷占了1GB以上。
关掉不用的程序,尤其是那些带GPU加速功能的软件,比如剪映、Chrome 浏览器、甚至某些杀毒软件。
更新驱动或降级尝试
有时候新驱动反而会出兼容问题,导致显存分配异常。如果之前好好的,更新后开始报错,不妨回退到旧版本。NVIDIA 和 AMD 官网都提供历史驱动下载。
反过来,老驱动也可能不支持新软件,该升还是得升。保持驱动在稳定版本,别盲目追新。
用混合精度训练省显存
现在很多框架支持自动混合精度(AMP),用半精度浮点数计算,显存直接省一半,速度还更快。PyTorch 里加几行就行:
from torch.cuda.amp import GradScaler, autocast
scaler = GradScaler()
with autocast():
output = model(input)
loss = criterion(output, target)
scaler.scale(loss).backward()
scaler.step(optimizer)
scaler.update()
实测很多模型在 float16 下效果一点没差,显存却从爆红变绿色。
实在不行,外接显卡或换设备
笔记本用户如果经常跑AI任务,可以考虑外接显卡坞(eGPU),插台独立显卡上去。虽然贵点,但比换整机便宜。或者把任务转移到有更好显卡的台式机、云服务器上跑。
云平台像阿里云、腾讯云都有按小时计费的GPU实例,跑几个小时模型也就几块钱,比砸几千买新卡划算多了。
显存不够不是死局,关键是搞清楚谁在占资源,然后对症下药。很多时候动动手设置,就能继续用手头的设备搞定任务。