侧边栏壁纸
博主头像
Zhou JT's Blog 博主等级

行动起来,活在当下

  • 累计撰写 10 篇文章
  • 累计创建 1 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

解决带有NVLink的GPU机器 Error 802: system not yet initialized 的问题

Administrator
2024-12-19 / 0 评论 / 0 点赞 / 13 阅读 / 0 字

解决带有NVLink的GPU机器 Error 802: system not yet initialized 的问题

在使用 PyTorch 和 CUDA 时,遇到了如下报错:

/home/aigc/anaconda3/envs/llama_factory/lib/python3.10/site-packages/torch/cuda/__init__.py:128: UserWarning: CUDA initialization: Unexpected error from cudaGetDeviceCount(). Did you run some cuda functions before calling NumCudaDevices() that might have already set an error? Error 802: system not yet initialized (Triggered internally at /opt/conda/conda-bld/pytorch_1724789122112/work/c10/cuda/CUDAFunctions.cpp:108.)
  return torch._C._cuda_getDeviceCount() > 0

并且在运行以下命令检查 GPU 状态时,仍然报错 802:

CUDA_DEVICE_ORDER="PCI_BUS_ID" PYTORCH_NVML_BASED_CUDA_CHECK=1 CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 python -c "import torch;print(torch.cuda.is_available());"

通过排查发现,问题出在 NVIDIA Fabric Manager 服务驱动版本 的不匹配上。以下是解决问题的完整过程。


问题定位与解决

  1. 初步检查 NVIDIA Fabric Manager 和驱动版本

    • 报错信息显示 CUDA 的初始化失败,进一步排查发现,可能是 Fabric ManagerNVIDIA 驱动 版本不匹配所导致的。

    • 检查当前系统的驱动和 Fabric Manager 的安装状态:

      • 系统安装的 NVIDIA 驱动是 550.54

      • 系统安装的 Fabric Manager 是 550.90

    由于 Fabric Manager 和驱动版本需要严格匹配,因此此不一致性可能是导致问题的原因。

  2. 重新安装匹配版本的 NVIDIA 驱动

    • 为了匹配已安装的 Fabric Manager 550.90,需要将 NVIDIA 驱动升级到 550.90 版本。

    • 具体操作步骤参考文档 [[Linux Ubuntu 20.04 上安装NVIDIA GPU驱动 (.run方式)]]

      • 通过 .run 文件安装匹配版本驱动,成功安装后结果如下:

  3. 检查 Fabric Manager 服务状态

    • 驱动安装完成后,确认 Fabric Manager 服务是否正常运行:

      sudo systemctl status nvidia-fabricmanager
      
    • 如果服务未运行,或者版本不匹配,则需要重新安装 Fabric Manager 550.90。 参考 [[用于Nvidia NVL(NVLink)的 Fabric Manager 服务]] 文档,重新安装正确版本后,启动服务并确保其状态正常:

      sudo apt install nvidia-fabricmanager-550
      sudo systemctl start nvidia-fabricmanager
      sudo systemctl enable nvidia-fabricmanager
      
    • 安装成功后,服务状态如下:

      ● nvidia-fabricmanager.service - NVIDIA fabric manager service
           Loaded: loaded (/lib/systemd/system/nvidia-fabricmanager.service; enabled; vendor preset: enabled)
           Active: active (running) since Wed 2024-10-16 11:38:42 CST; 4min 11s ago
          Process: 7168 ExecStart=/usr/bin/nv-fabricmanager -c /usr/share/nvidia/nvswitch/fabricmanager.cfg (code=exited, status=0/SUCCESS)
         Main PID: 7170 (nv-fabricmanage)
            Tasks: 18 (limit: 629145)
           Memory: 4.2M
           CGroup: /system.slice/nvidia-fabricmanager.service
                   └─7170 /usr/bin/nv-fabricmanager -c /usr/share/nvidia/nvswitch/fabricmanager.cfg
      
  4. 验证 Fabric Manager 和 GPU 状态

    • 确保 Fabric Manager 服务运行后,验证 GPU 注册是否成功:

      nvidia-smi -q -i 0 | grep -i -A 2 Fabric
      
    • 正常输出如下:

          Fabric
              State                             : Completed
              Status                            : Success
      

总结

在解决 Error 802: system not yet initialized 错误的过程中,发现核心问题在于 NVIDIA 驱动版本Fabric Manager 服务版本 的不一致。以下是解决该问题的关键步骤:

  1. 检查 NVIDIA 驱动和 Fabric Manager 的版本。

  2. 确保驱动和 Fabric Manager 的版本严格匹配(例如,550.90)。

  3. 如果 Fabric Manager 服务未启动或版本不一致,重新安装匹配的版本并启动服务。

  4. 验证 Fabric Manager 和 GPU 状态,确保错误已消除。

通过以上步骤,问题得到了解决,最终成功初始化 CUDA,并恢复 GPU 的正常使用。

0

评论区