【问题标题】:Pytorch silent data corruptionPytorch 静默数据损坏
【发布时间】:2022-10-22 08:53:55
【问题描述】:

我在一个有 4 个 A6000 GPU 的工作站上。将 Torch 张量从一个 GPU 移动到另一个 GPU 会默默地破坏数据!!!

请参阅下面的简单示例。

x
>tensor([1], device='cuda:0')

x.to(1)
>tensor([1], device='cuda:1')

x.to(2)
>tensor([0], device='cuda:2')

x.to(3)
>tensor([0], device='cuda:3')

任何想法这个问题的原因是什么?

其他可能方便的信息:

(为了解决问题,我手动删除了两个 nvlink)

        GPU0    GPU1    GPU2    GPU3    CPU Affinity    NUMA Affinity
GPU0     X      SYS     SYS     SYS     0-63            N/A
GPU1    SYS      X      SYS     SYS     0-63            N/A
GPU2    SYS     SYS      X      SYS     0-63            N/A
GPU3    SYS     SYS     SYS      X      0-63            N/A
nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Tue_Mar__8_18:18:20_PST_2022
Cuda compilation tools, release 11.6, V11.6.124
Build cuda_11.6.r11.6/compiler.31057947_0
NVIDIA-SMI 510.47.03    Driver Version: 510.47.03    CUDA Version: 11.6

编辑:添加一些截图

它似乎是有状态的。在启动新的 python 运行时后更改哪些 GPU 可以正常工作。

【问题讨论】:

  • 是可重复的吗?你的张量是什么dtype?如果您使用to('cuda:1') 等而不只是数字,也会发生这种情况吗?
  • 这里的 dtype 是 int,但也坚持使用 float。是的,它是可重复的(关闭后仍然存在)。是的,即使使用 to('cuda:1'),它仍然会损坏。尝试多种其他事情也会出现更奇怪的事情(将其作为图像添加到问题中。)
  • 你可以添加一个使用更长张量的例子吗?这可能会给出某种关于到底发生了什么的信号(例如,可能 2 和 3 上的整个张量都被转换为 0)。
  • 您也可以考虑直接在Pytorch GitHub 上将此报告为错误。如果你这样做,请确保不是在 SO 上将其删除,因为它可能对未来的用户有用,特别是如果您在此处跟进解决错误的方法。
  • @Kraigolas,感谢您的建议。也在 PyTorch GitHub 上报告了这个问题。 github.com/pytorch/pytorch/issues/84803

标签: python pytorch gpu


【解决方案1】:

解决方案是禁用 IOMMU。在我们的服务器上,在 BIOS 设置中

/Advanced/AMD CBS/NBIO Common Options/IOMMU -> IOMMU - Disabled

有关更多信息,请参阅 PyTorch 问题线程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-15
    • 2015-01-30
    • 2019-11-21
    • 2014-03-17
    • 2011-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多