PyTorch训练代码在PyCharm调试模式挂起,运行正常如何调试?
解决PyCharm调试PyTorch DataLoader时挂起的问题
针对你遇到的运行模式正常但调试模式挂起、print内容无法输出的问题,可按以下步骤排查解决:
调整DataLoader多进程参数
调试模式下PyCharm对多进程的支持存在局限,尤其是Windows环境下,num_workers>0很容易导致子进程阻塞主线程。把DataLoader的num_workers改为0即可:train_loader = torch.utils.data.DataLoader( train_set, sampler=sampler_train, batch_size=32, num_workers=0 # 调试阶段临时设置为0 )调试完成后再改回原数值即可。
修改断点位置与调试器设置
- 把断点从
model.train()移到print("something")行,或者外层循环的开头,确认是否能正常触发调试。 - 关闭PyCharm自动附加子进程的功能:进入
Settings > Build, Execution, Deployment > Debugger > Python,取消勾选**"Attach to subprocess automatically"**,避免调试器错误附加到DataLoader的子进程导致挂起。
- 把断点从
排查Sampler与数据加载逻辑
- 临时替换
WeightedRandomSampler为普通的RandomSampler,验证是否是采样器逻辑导致的问题:
如果替换后调试正常,检查sampler_train = torch.utils.data.RandomSampler(train_set, replacement=True)sample_weights_train是否存在NaN、无穷大值,或者维度与数据集长度不匹配的情况。 - 在训练循环前手动遍历一次DataLoader,确认数据加载阶段是否正常:
如果这一步调试时也挂起,说明问题出在DataLoader初始化或数据集读取逻辑上。# 训练循环前添加测试代码 for data in train_loader: print("数据加载正常") break
- 临时替换
内容的提问来源于stack exchange,提问作者Gulzar
相关产品推荐
相关产品推荐

