使用GPU训练Spacy模型遭遇CUDA内存不足错误,求解决方案
解决Spacy GPU训练CUDA内存不足问题
为什么显示可用内存为0字节?
PyTorch会预先预留一部分GPU内存作为缓存池,报错里显示总预留了5.33GiB,实际分配的是4.99GiB。剩余GPU空间要么被系统进程、其他应用(比如开启GPU加速的浏览器)占用,要么因为内存碎片化,预留缓存里找不到连续的12MiB可用空间,所以显示0字节空闲。
释放GPU内存&完成训练的操作方法
- 清理无关GPU进程:用
nvidia-smi命令查看当前GPU占用情况,关掉其他占用GPU的程序(比如后台AI训练进程、开启硬件加速的浏览器)。Windows用任务管理器结束进程,Linux/macOS用kill命令终止对应PID的进程。 - 优化PyTorch内存分配策略:在训练命令前设置环境变量缓解内存碎片,Windows下执行:
Linux/macOS下把set PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:128 && python -m spacy train C:\Users\User\PycharmProjects\pythonProject\pythonProject3\config.cfg --output ./output --paths.train ./train_data.spacy --paths.dev ./test_data.spacy --gpu-id 0set换成export即可。 - 减小训练批次大小:打开
config.cfg,找到[training.batch_size],把默认值(比如16)改成更小的数(如8、4),降低单轮训练的内存负载。 - 手动清理GPU缓存:如果有自定义训练脚本,在启动训练前添加以下代码清空缓存;如果用Spacy官方训练命令,可以先运行一个简单的清理脚本再启动训练:
import torch torch.cuda.empty_cache() - 换用轻量预训练模型:如果配置里用的是大体积预训练模型(如
en_core_web_lg),替换成小模型(如en_core_web_sm),减少模型本身占用的内存。 - 开启梯度累积:在
config.cfg里设置[training.accumulate_gradient]为2或4,用多个小批次的梯度累积模拟大批次训练,降低单步内存占用。 - 验证阶段改用CPU:修改
config.cfg,让验证过程使用CPU,避免验证时额外占用GPU内存(代价是验证速度变慢,但能释放更多GPU资源给训练)。
内容的提问来源于stack exchange,提问作者Mervyn Lye
相关产品推荐
相关产品推荐

