启动训练时反复出现 pin_memory argument is set as true but no accelerator is found,日志被刷屏,数据加载也没有加速。

一开始怀疑是「设备是 MPS 或 CPU,参数无意义」,查了一圈,方向不对。

真正麻烦的地方在于,几个原因的现象几乎一样。在没有可用 GPU 的环境里开了锁页内存。也可能是多进程 worker 下锁页内存反而增加拷贝开销。

另外,配置里写死了 pin_memory=True,没按环境判断。

动手时先按设备可用性动态设置该参数

pin = torch.cuda.is_available()

接着把参数传给 DataLoader

loader = DataLoader(ds, batch_size=16, num_workers=4, pin_memory=pin)

随后确认当前环境是否真的没有显卡

python -c "import torch;print(torch.cuda.is_available())"

数据加载成为瓶颈时再考虑常驻显存

python -c "print('move preprocessing to GPU')")

这类问题以前遇到过,但这次的触发条件和上次不一样。

别只看报错消失,验证要多做一步。警告不再出现,数据加载耗时下降,GPU 等待数据的空转时间明显缩短。

这里还有个坑。锁页内存会占用不可换出的物理内存,开得过多在内存紧张的机器上会直接触发 OOM,不是所有场景都该打开。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。

作者 9823189