Colab跑PyTorch训练找不到ipykernel_launcher.py仍报nonzero弃用警告致卡顿
问题根因
ipykernel_launcher.py是Colab Jupyter内核的系统级启动脚本,存放在系统Python的site-packages目录下,不属于用户工作目录,检索不到属于正常情况,无需修改该文件。- 警告堆栈显示该文件第7行触发问题,是Python警告的上下文归并机制导致的误报:实际触发源是代码(或依赖库)中调用了PyTorch无参版
nonzero()方法,该重载已在PyTorch 1.9+版本中弃用。 - 该警告本身为UserWarning,不会直接导致训练停滞;训练卡顿通常是触发该旧API的代码逻辑(如正样本匹配、NMS过滤、mAP计算)在Colab旧环境(Python3.6 + 低版本PyTorch)下存在兼容问题,包括GPU/CPU张量反复同步、内存泄漏、逻辑死循环等。
解决步骤
1. 过滤误导性警告
在所有代码最开头(导入PyTorch前)添加过滤规则,避免被错误堆栈干扰:
import warnings warnings.filterwarnings("ignore", category=UserWarning, module="torch")
2. 修复弃用API
全局检索自定义代码、工具函数(如map_eval、损失函数的正样本匹配逻辑)中的.nonzero()调用,替换为显式参数写法:
- 旧写法(触发警告):
mask.nonzero() - 新写法(兼容全版本PyTorch):
mask.nonzero(as_tuple=False)或torch.nonzero(mask, as_tuple=False)
如果是torchvision等第三方库旧版本触发,执行版本升级:
!pip install torchvision==0.13.0
3. 排查训练停滞的真实诱因
- 对触发
nonzero调用的步骤单独打印张量的设备、形状,确认不存在GPU张量强制转CPU numpy的同步阻塞问题。 - 调整数据加载器参数,减少数据加载等待时间:
# 替换原有数据加载器初始化代码 train_loader = DataLoader( train_dataset, batch_size=BATCH_SIZE, shuffle=True, num_workers=2, pin_memory=True )
4. 适配Colab运行环境
Colab默认的Python3.6已停止维护,可切换高版本环境或安装兼容的PyTorch版本:
!pip install torch==1.12.0
内容的提问来源于stack exchange,提问作者Kwaku
相关产品推荐
相关产品推荐

