You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数据中心节点CUDA程序无法识别GPU但nvidia-smi显示正常的问题

问题描述

我是多节点数据中心的新手,遇到如下技术问题:

  • 我使用一段CUDA设备检测程序编译生成可执行文件device_info8。
  • 在登录节点运行该程序,输出正常识别1块Tesla V100 GPU:
me@login01 test]$ ./device_info8 
Number of devices: 1
Device Number: 0
  Device name: Tesla V100-PCIE-16GB
  Memory Clock Rate (MHz): 856
  Memory Bus Width (bits): 4096
  Peak Memory Bandwidth (GB/s): 898.0
  Total global memory (Gbytes) 15.8
  Shared memory per block (Kbytes) 48.0
  minor-major: 0-7
  Warp-size: 32
  Concurrent kernels: yes
  Concurrent computation/communication: yes
  • 通过以下命令登录Node-11节点:
me@login01 test]$ srun -p partition1 --nodelist Node-11 --gres=gpu:all   --pty -u bash -i  
[me@Node-11 test]$
  • 在Node-11运行device_info8时,输出显示无CUDA设备:
[me@Node-11 test]$./device_info8
Number of devices: 0
  • 但运行nvidia-smi明确显示该节点有8块Tesla V100 GPU可用:
[me@Node-11 test]$ nvidia-smi 
Tue Dec  3 18:16:04 2024       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 418.67       Driver Version: 418.67       CUDA Version: 10.1     |
|-------------------------------+----------------------+----------------------+| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC || Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. ||===============================+======================+======================||   0  Tesla V100-PCIE...  On   | 00000000:2D:00.0 Off |                    0 || N/A   28C    P0    26W / 250W |      0MiB / 32480MiB |      0%      Default |+-------------------------------+----------------------+----------------------+|   1  Tesla V100-PCIE...  On   | 00000000:31:00.0 Off |                    0 || N/A   26C    P0    25W / 250W |      0MiB / 32480MiB |      0%      Default |+-------------------------------+----------------------+----------------------+|   2  Tesla V100-PCIE...  On   | 00000000:35:00.0 Off |                    0 || N/A   26C    P0    25W / 250W |      0MiB / 32480MiB |      0%      Default |+-------------------------------+----------------------+----------------------+|   3  Tesla V100-PCIE...  On   | 00000000:39:00.0 Off |                    0 || N/A   27C    P0    24W / 250W |      0MiB / 32480MiB |      0%      Default |+-------------------------------+----------------------+----------------------+|   4  Tesla V100-PCIE...  On   | 00000000:A9:00.0 Off |                    0 || N/A   26C    P0    26W / 250W |      0MiB / 32480MiB |      0%      Default |+-------------------------------+----------------------+----------------------+|   5  Tesla V100-PCIE...  On   | 00000000:AD:00.0 Off |                    0 || N/A   29C    P0    25W / 250W |      0MiB / 32480MiB |      0%      Default |+-------------------------------+----------------------+----------------------+|   6  Tesla V100-PCIE...  On   | 00000000:B1:00.0 Off |                    0 || N/A   27C    P0    24W / 250W |      0MiB / 32480MiB |      0%      Default |+-------------------------------+----------------------+----------------------+|   7  Tesla V100-PCIE...  On   | 00000000:B5:00.0 Off |                    0 || N/A   28C    P0    27W / 250W |      0MiB / 32480MiB |      0%      Default |+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory ||  GPU       PID   Type   Process name                             Usage      ||=============================================================================||  No running processes found                                                 |+-----------------------------------------------------------------------------+

请问出现该现象的原因是什么?我忽略了哪些细节?如何让GPU对该程序可用?


问题分析与解决办法

核心原因

  1. CUDA环境版本不兼容:登录节点与Node-11的CUDA Toolkit版本不一致。你在登录节点编译的device_info8依赖的CUDA库,和Node-11上驱动支持的CUDA 10.1不匹配,导致程序无法识别GPU设备。
  2. SLURM交互式会话未正确初始化GPU环境:用srun启动交互式bash时,部分CUDA相关环境变量(如LD_LIBRARY_PATH、CUDA_VISIBLE_DEVICES)未被正确加载,程序找不到CUDA运行时库或无法访问GPU资源。
  3. 跨节点编译的兼容性问题:不同节点的硬件、库路径存在差异,在登录节点编译的程序,到其他节点运行时可能因依赖缺失或版本冲突失效。

解决步骤

1. 在Node-11上重新编译程序

登录Node-11后,加载与驱动匹配的CUDA 10.1模块,重新编译程序:

# 加载对应版本的CUDA模块(命令需根据集群实际配置调整)
module load cuda/10.1
# 重新编译检测程序
nvcc device_info8.cu -o device_info8

运行重新编译后的device_info8,即可正常识别GPU。

2. 手动配置环境变量(适用于不想重新编译的场景)

若要直接运行原程序,需手动设置Node-11上的CUDA环境变量:

# 设置CUDA库路径为Node-11上的CUDA 10.1路径(需根据实际路径调整)
export LD_LIBRARY_PATH=/usr/local/cuda-10.1/lib64:$LD_LIBRARY_PATH
# 确保CUDA_VISIBLE_DEVICES被正确设置
export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7

设置完成后重新运行device_info8。

3. 用srun直接运行程序

避免交互式会话的环境问题,直接通过srun调度运行程序:

me@login01 test]$ srun -p partition1 --nodelist Node-11 --gres=gpu:all ./device_info8

这种方式SLURM会自动初始化GPU资源和对应环境变量,程序可直接访问GPU。

4. 验证CUDA环境一致性

检查登录节点与Node-11的CUDA版本,确保编译环境与运行环境匹配:

# 登录节点执行
nvcc --version
# Node-11执行
nvcc --version

后续尽量在目标节点编译CUDA程序,避免跨节点编译的兼容性问题。


内容的提问来源于stack exchange,提问作者KansaiRobot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 21:35:56