TQDM进度条卡在0%无变化,训练迭代无进展求助
训练进程卡住问题排查
尝试执行10轮训练,但全程无进展,当前卡在第1轮训练,终端输出如下:
Training...
0%| | 0/563 [00:00<?, ?it/s]
等待20分钟后进度条仍无任何变动,训练函数代码如下:
# 训练函数返回所有已完成迭代的训练损失值列表 # 执行训练迭代的函数 def train(train_data_loader, model): print('Training...') global train_itr global train_loss_list # 初始化tqdm进度条 prog_bar = tqdm(train_data_loader, total=len(train_data_loader)) for i, data in enumerate(prog_bar): optimizer.zero_grad() images, targets = data images = list(image.to(DEVICE) for image in images) targets = [{k: v.to(DEVICE) for k, v in t.items()} for t in targets] loss_dict = model(images, targets) losses = sum(loss for loss in loss_dict.values()) loss_value = losses.item() train_loss_list.append(loss_value) train_loss_hist.send(loss_value) losses.backward() optimizer.step() train_itr += 1 # 在进度条旁更新每轮迭代的损失值 prog_bar.set_description(desc=f"Loss: {loss_value:.4f}") return train_loss_list
排查方向
- 数据加载阻塞:单独测试
train_data_loader的遍历,检查是否存在数据集路径错误、单样本体积过大、IO性能瓶颈或预处理逻辑死循环。 - 设备迁移异常:验证
image.to(DEVICE)和目标数据的设备迁移操作,检查GPU驱动、CUDA版本与PyTorch的兼容性,排除硬件层面的阻塞。 - 模型前向传播故障:取单个batch数据单独执行模型前向传播,排查模型结构是否存在无限循环、权重文件损坏或依赖外部资源的情况。
- 全局变量干扰:
train_itr和train_loss_list为全局变量,尝试改为函数内部维护或参数传入,排除全局状态冲突导致的异常。 - tqdm显示延迟:在循环内部添加打印语句(如
print(f"完成第{i}次迭代")),确认是真卡住还是终端显示问题。 - 反向传播阶段问题:临时注释
losses.backward()和optimizer.step(),观察循环是否能推进,定位梯度计算或优化器更新环节的阻塞点。
内容的提问来源于stack exchange,提问作者Sai Eshwar
相关产品推荐
相关产品推荐

