PyTorch跨GPU迁移张量时出现静默数据损坏问题求助
PyTorch跨GPU张量迁移静默数据损坏问题排查
在配备4张A6000 GPU的工作站上,使用PyTorch将张量从一个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)
GPU拓扑信息
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
CUDA编译器版本
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驱动与CUDA版本
NVIDIA-SMI 510.47.03 Driver Version: 510.47.03 CUDA Version: 11.6
补充说明
该问题具有状态性,重启Python运行环境后,能正常交互的GPU组合会发生变化:
可能原因分析
- NVLink移除后的拓扑适配异常:手动移除NVLink后,系统未正确更新GPU间的通信链路配置。当前拓扑显示所有GPU间通过SYS(系统内存)中转通信,但驱动可能残留旧的NVLink通信逻辑,导致部分GPU间的数据传输路径出错,引发静默损坏。
- 进程级GPU通信初始化问题:重启Python环境后正常组合变化,说明问题和PyTorch启动时的GPU拓扑探测相关。若探测阶段硬件状态不稳定(如NVLink移除后的链路残留状态),会导致初始化的通信规则错误,进而引发传输数据异常。
- 硬件连接或供电隐患:手动操作NVLink可能导致GPU插槽接触不良,或电源负载分配失衡,部分GPU在数据传输时出现隐性故障,导致数据丢失或篡改。
- CUDA驱动适配bug:虽然CUDA 11.6与驱动510.47.03属于官方兼容组合,但在硬件拓扑变更的场景下,可能存在未被发现的适配bug,导致驱动层面的数据传输逻辑出错。
内容的提问来源于stack exchange,提问作者alili2050
相关产品推荐
相关产品推荐

