CUDA initialization: Unexpected error from cudaGetDeviceCount解决方法

时间:2024-10-12 09:43:50

  最近训练新增A100,gpu服务器,安装完cuda后突然出现torch无法正常使用,提示CUDA initialization: Unexpected error from cudaGetDeviceCount()错误,如下图所示:

CUDA initialization: Unexpected error from cudaGetDeviceCount解决方法_驱动程序

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 ../c10/cuda/CUDAFunctions.cpp:108.)
  1. 进行分析和之前搭建的A800,GPU服务器进行对比,应该是没有安装 nvidia-fabricmanager 的问题,A100-80G需要使用nvlink & nvswitch来实现多卡互联,没有安装这个包GPU没法用如图所示:

CUDA initialization: Unexpected error from cudaGetDeviceCount解决方法_自动更新_02


A800机器:

CUDA initialization: Unexpected error from cudaGetDeviceCount解决方法_CUDA_03

A100机器:

CUDA initialization: Unexpected error from cudaGetDeviceCount解决方法_驱动程序_04

  1. 检查gpu机器版本nvidia-smi,Driver Version: 535.183.01 ,下载相对应的安装包。
1. 下载 nvidia-fabric-manager-535.183.01 RPM 包,首先,访问 NVIDIA CUDA 下载页面 或 NVIDIA驱动程序下载页面,选择对应的 Linux 版本和驱动版本,找到 nvidia-fabric-manager 相关链接。可以直接使用以下命令从已知的存储库获取该包(请确认这是正确的路径):
wget https://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/nvidia-fabric-manager-535.183.01-1.x86_64.rpm

2.下载完成后,使用 dnf 或 rpm 来安装这个包:
sudo rpm -ivh nvidia-fabric-manager-535.183.01-1.x86_64.rpm

3.启用并启动服务:
sudo systemctl enable nvidia-fabricmanager
sudo systemctl start nvidia-fabricmanager

4.确认服务已启动:
sudo systemctl status nvidia-fabricmanager
  1. 再次验证结果:

CUDA initialization: Unexpected error from cudaGetDeviceCount解决方法_自动更新_05


  1. Nvidia-fabricmanager 自动更新关闭,防止升级后无法进行使用。

 编辑 dnf 配置文件,打开 /etc/dnf/dnf.conf 文件:


sudo nano /etc/dnf/dnf.conf

添加排除规则 在文件中添加一行 exclude=nvidia-fabricmanager*,如下所示:


[main]

gpgcheck=1

installonly_limit=3

clean_requirements_on_remove=True

exclude=nvidia-fabricmanager*

保存并退出
保存文件并退出编辑器(在 nano 中,按 Ctrl+O 保存,按 Ctrl+X 退出)。

这将使 nvidia-fabricmanager 包不再被自动更新,直到你手动更新或移除该排除规则。