Assert batch not in keys and ptr not in keys报错解决方案求助
PyTorch Geometric 1.7.2 断言错误排查与修复方案
排查方向
- 检查单样本
Data对象的属性字段,确认没有手动命名为batch或ptr的自定义字段,PyG的collate_fn会自动生成这两个全局批次索引字段,重名会直接触发该断言。 - 核对DataLoader实例来源,确认使用的是
torch_geometric.loader.DataLoader而非PyTorch原生的DataLoader,原生默认的collate逻辑未适配PyG的Data结构,会触发字段校验失败。 - 验证依赖版本匹配规则,PyG 1.7.2仅适配PyTorch Lightning 1.5.x及更早版本,高版本PL内置的DataLoader封装逻辑会覆盖PyG的collate配置,触发校验错误。
- 检查Dataset的返回值一致性,确认所有返回样本都是标准PyG
Data类实例,没有混合字典、None或其他非Data类型对象,异常类型会导致collate的字段判断逻辑异常。
修复方案
- 若存在自定义字段冲突,直接将自行定义的批次类字段重命名为
batch_idx等非保留名称即可。 - 若必须使用PyTorch原生DataLoader,手动指定collate参数:
collate_fn=torch_geometric.data.collate.collate。 - 版本不兼容场景可选择两种方案:要么降级PyTorch Lightning到1.5.x版本;要么给PL的
Trainer传入参数replace_sampler_ddp=False,关闭PL对DDP采样器的自动替换,避免其修改DataLoader的默认配置。 - 若存在自定义collate逻辑,在逻辑执行完成后手动删除你代码生成的
batch/ptr字段再返回结果,避免和PyG自动生成的字段冲突。
内容的提问来源于stack exchange,提问作者Nitin Prasad
相关产品推荐
相关产品推荐

