【问题标题】:pytorch loss.backward() keeps running for hourspytorch loss.backward() 持续运行数小时
【发布时间】:2020-02-26 22:16:35
【问题描述】:

我正在使用 pytorch 训练一些 X 射线图像,但遇到了以下问题:

loss.backward()这一行,程序一直在运行,永远不会结束,没有错误或警告。

            loss, outputs = self.forward(images, targets)  
            loss = loss / self.accumulation_steps
            print("loss calculated: " + str(loss))

            if phase == "train":
                print("running loss backwarding!") 
                loss.backward()
                print("loss is backwarded!")
                if (itr + 1 ) % self.accumulation_steps == 0:
                    self.optimizer.step()
                    self.optimizer.zero_grad()

在此之前计算的损失类似于tensor(0.8598, grad_fn=<DivBackward0>)

谁能帮我解释为什么它会一直运行或者有什么好的方法来调试backward()函数?

我正在使用 torch 1.2.0+cu92 和兼容的 cuda 10.0。

非常感谢!!

【问题讨论】:

    标签: pytorch tensor


    【解决方案1】:

    很难给出明确的答案,但我有一个猜测。

    您的代码看起来不错,但从您发布的输出 (tensor(0.8598, grad_fn=<DivBackward0>)) 我得出结论,您是在 CPU 上而不是在 GPU 上运行。

    一种可能的解释是,向后传球不会一直运行,而是需要很长时间。在 CPU 上训练大型网络比在 GPU 上慢得多。 检查您的 CPU 和内存利用率。可能是您的数据和模型太大而无法放入您的主内存,从而迫使操作系统使用您的硬盘,这会使执行速度减慢几个数量级。如果是这种情况,我一般建议:

    • 使用较小的批量大小。
    • 缩小图像(如果可能)。
    • 仅打开当前需要的图像。
    • 减小模型的大小。
    • 在开始训练之前致电model.cuda(); images = images.cuda() 使用您的 GPU(如果有)。

    如果这不能解决您的问题,您可以通过执行以下操作开始缩小问题范围:

    • 创建一个最小的工作示例来重现该问题。
    • 检查其他非常简单的模型架构是否仍然存在问题。
    • 检查不同输入数据是否仍然存在问题
    • 使用不同的 PyTorch 版本检查问题是否仍然存在

    【讨论】:

    • 谢谢。我通过将我的 pyspark 升级到最新版本找到了解决方案,然后它工作了!!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-27
    • 2021-12-31
    • 2020-07-21
    • 1970-01-01
    • 2018-07-20
    • 2016-09-22
    • 1970-01-01
    相关资源
    最近更新 更多