解决带有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 服务 或 驱动版本 的不匹配上。以下是解决问题的完整过程。
问题定位与解决
初步检查 NVIDIA Fabric Manager 和驱动版本
报错信息显示 CUDA 的初始化失败,进一步排查发现,可能是 Fabric Manager 和 NVIDIA 驱动 版本不匹配所导致的。
检查当前系统的驱动和 Fabric Manager 的安装状态:
系统安装的 NVIDIA 驱动是 550.54。
系统安装的 Fabric Manager 是 550.90。
由于 Fabric Manager 和驱动版本需要严格匹配,因此此不一致性可能是导致问题的原因。
重新安装匹配版本的 NVIDIA 驱动
为了匹配已安装的 Fabric Manager 550.90,需要将 NVIDIA 驱动升级到 550.90 版本。
具体操作步骤参考文档 [[Linux Ubuntu 20.04 上安装NVIDIA GPU驱动 (.run方式)]]
通过
.run
文件安装匹配版本驱动,成功安装后结果如下:
检查 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
验证 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 服务版本 的不一致。以下是解决该问题的关键步骤:
检查 NVIDIA 驱动和 Fabric Manager 的版本。
确保驱动和 Fabric Manager 的版本严格匹配(例如,550.90)。
如果 Fabric Manager 服务未启动或版本不一致,重新安装匹配的版本并启动服务。
验证 Fabric Manager 和 GPU 状态,确保错误已消除。
通过以上步骤,问题得到了解决,最终成功初始化 CUDA,并恢复 GPU 的正常使用。
评论区