CUDA Quantum多GPU构建后仅识别单GPU的问题排查求助
问题描述
在HPC系统上通过Nvidia enroot使用CUDA Quantum官方容器,目标是构建支持多GPU的量子模拟代码:
- 按GTC演讲《Inside CUDA Quantum》的命令编译:
编译无报错,但运行时通过以下代码获取QPU数量:nvq++ cuquantum_backends.cpp -o cuquantum_backends.x --qpu cuquantum --platform mqpu
输出auto &platform = cudaq::get_platform(); printf("Num QPU %zu\n", platform.num_qpus());Num QPU 1,但容器内nvidia-smi可识别2个GPU。 - 尝试官方文档提到的多GPU编译标识
--qpu cuquantum_mgmn,但nvq++提示该标识未被识别。
排查与解决建议
1. 确认enroot容器的GPU映射配置
enroot默认可能只映射单个GPU,需确保启动容器时显式指定所有可用GPU:
- 启动容器时添加
--nv参数并指定GPU范围,例如:
也可直接指定具体GPU:enroot create --name cuda-quantum nvidia+cuda-quantum:latest enroot start --nv --env NVIDIA_VISIBLE_DEVICES=all cuda-quantumNVIDIA_VISIBLE_DEVICES=0,1 - 进入容器后验证配置:
确保两个环境变量都包含所有目标GPU。nvidia-smi echo $NVIDIA_VISIBLE_DEVICES echo $CUDA_VISIBLE_DEVICES
2. 修正多GPU编译与运行参数
cuquantum_mgmn并非有效的--qpu参数,正确的多GPU配置需结合编译参数与环境变量:
- 编译时仍使用
--platform mqpu:nvq++ cuquantum_backends.cpp -o cuquantum_backends.x --qpu cuquantum --platform mqpu - 运行前设置环境变量指定GPU数量:
该变量会强制export CUDAQ_MQPU_NUM_DEVICES=2 ./cuquantum_backends.xmqpu平台使用指定数量的GPU设备。
3. 验证版本兼容性
确保容器内CUDA Quantum与cuQuantum库版本匹配:
- 查看版本信息:
若版本不匹配,建议拉取最新官方容器镜像,或手动升级cuQuantum库。nvq++ --version cuquantum-manager --version
4. 排查设备枚举逻辑
在代码中添加CUDA原生设备检测,定位问题环节:
#include <cuda_runtime.h> int main() { int deviceCount; cudaGetDeviceCount(&deviceCount); printf("CUDA Device Count: %d\n", deviceCount); auto &platform = cudaq::get_platform(); printf("Num QPU %zu\n", platform.num_qpus()); return 0; }
如果cudaGetDeviceCount返回2但platform.num_qpus()仍返回1:
- 运行前设置
CUDAQ_VERBOSE=1,查看平台初始化日志,确认是否有设备被过滤。 - 检查容器内用户权限,部分HPC系统会通过cgroups限制GPU访问权限。
内容的提问来源于stack exchange,提问作者mdepa
相关产品推荐
相关产品推荐

