报错提示翻译与解决方案
原文翻译
检测到当前运行环境为 WSL(Windows Linux 子系统),已自动将 pin_memory=False。该设置会降低数据加载性能。
原因说明
pin_memory=True 是 PyTorch DataLoader 的常用参数:
作用是把张量锁页到主机内存,加速 CPU → GPU 数据拷贝,大幅提升训练速度。
但 WSL 原生不支持页锁定内存(pin memory),强行开启会直接报错崩溃,所以程序自动关闭该功能,代价就是数据读取变慢。
三种解决办法(按需选择)
方案 1:最简单,忽略警告(推荐调试 / 小数据集)
不用修改代码,只是性能小幅下降,不影响程序正常运行,直接无视这条日志即可。
方案 2:彻底根治,改用原生 Windows 环境运行 PyTorch
不在 WSL 内跑训练,直接在 Windows 安装 CUDA + PyTorch,此时可以正常开启 pin_memory=True,无警告且速度拉满。
方案 3:WSL2 内优化,尽量缩小性能差距
- 在
DataLoader手动固定参数,屏蔽自动提示:
python
运行
from torch.utils.data import DataLoader
loader = DataLoader(
dataset,
batch_size=16,
pin_memory=False, # 手动显式关闭,消除警告
num_workers=4
)
- 优化 WSL 数据加载提速手段:
- 不要把数据集放在 Windows 盘符(
/mnt/c/),拷贝到 WSL 内部文件系统(~/目录),读写速度提升数倍; - 合理设置
num_workers,一般设为 CPU 物理核心数,不要开过多进程; - 开启
prefetch_factor预加载数据。
补充:如果强行开启 pin_memory 会怎样
WSL2 环境下设置 pin_memory=True 会抛出类似:
RuntimeError: cannot pin 'torch.cuda.FloatTensor' only dense CPU tensors can be pinned
运行直接中断,因此必须关闭。
正文完
可以使用微信扫码关注公众号(ID:xzluomor)