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

CuPy配置无CUDA设备检测问题求助(Singularity部署HPC+GPU容器)

问题描述

构建Docker容器并通过Singularity部署在GPU HPC集群上,运行cp.show_config()时出现CUDA设备检测失败,报错:

CUDARuntimeError('cudaErrorNoDevice: no CUDA-capable device is detected')

CuPy配置信息如下:

OS: Linux-5.4.0-135-generic-x86_64-with-glibc2.31
Python Version: 3.9.12
CuPy Version: 9.6.0
CuPy Platform: NVIDIA CUDA
NumPy Version: 1.21.5
SciPy Version: 1.6.0
Cython Build Version: 0.29.24
Cython Runtime Version: 0.29.28
CUDA Root: /opt/conda/envs/rapids
nvcc PATH: None
CUDA Build Version: 11020
CUDA Driver Version: 11060
CUDA Runtime Version: CUDARuntimeError('cudaErrorNoDevice: no CUDA-capable device is detected')
cuBLAS Version: (available)
cuFFT Version: 10400
cuRAND Version: 10203
cuSOLVER Version: (11, 3, 4)
cuSPARSE Version: (available)
NVRTC Version: (11, 2)
Thrust Version: 101000
CUB Build Version: 101000
Jitify Build Version: 65946d2
cuDNN Build Version: None
cuDNN Version: None
NCCL Build Version: 21104
NCCL Runtime Version: 21210
cuTENSOR Version: None
cuSPARSELt Build Version: None

使用的Dockerfile内容:

# Pulls the basic Image from NVIDIA repository
FROM rapidsai/rapidsai:22.04-cuda11.2-runtime-ubuntu20.04-py3.9

# OS install cuda toolkit
RUN apt-get update
RUN apt-get install -y cuda-toolkit-11.2

# Pulls the basic Image from NVIDIA repository
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
    --fix-missing git python3-setuptools python3-pip build-essential libcurl4-gnutls-dev \
    zlib1g-dev rsync vim cmake tabix && \
    apt-get clean

# Conda install on base env cudnn
RUN conda install --yes -c conda-forge cudnn=8.0.5.39

# Adding env directory to path and activate rapids env
ENV PATH /opt/conda/envs/rapids/bin:$PATH
RUN /bin/bash -c "source activate rapids"

# Install libraries needed in the examples
RUN pip install \
    scanpy==1.9.1 wget pytabix dash-daq \
    dash-html-components dash-bootstrap-components dash-core-components \
    pytest utils tensorflow

RUN pip install --upgrade tensorflow-gpu

WORKDIR /workspace
ENV HOME /workspace

RUN mkdir -p /.singularity.d/env
RUN echo "#!/usr/bin/env bash" >  /.singularity.d/env/99-custom_prompt.sh
RUN echo 'PS1="[${SINGULARITY_NAME%.*}]\u@\h:\w\$ "' >>  /.singularity.d/env/99-custom_prompt.sh
RUN conda install batchspawner
排查与解决方案

1. 确保Singularity启动时正确挂载GPU

HPC环境下Singularity必须通过--nv参数启用GPU支持,否则容器无法访问宿主机GPU设备。启动命令应为:

singularity run --nv your_image.sif

同时在宿主机验证GPU可用性:运行nvidia-smi确认设备正常识别,无硬件驱动问题。

2. 修复容器内CUDA环境变量配置

从CuPy配置看nvcc PATH: None,且缺少CUDA库路径的环境变量,需在Dockerfile中添加LD_LIBRARY_PATH配置,确保CUDA和cudnn的库被正确加载:

# 添加到Dockerfile的环境变量设置部分
ENV LD_LIBRARY_PATH /opt/conda/envs/rapids/lib:/usr/local/cuda/lib64:$LD_LIBRARY_PATH

重新构建镜像并转换为Singularity格式后,验证容器内echo $LD_LIBRARY_PATH输出包含上述路径。

3. 清理CUDA环境冲突

容器内同时通过apt安装了cuda-toolkit-11.2和conda安装了cudnn,容易导致环境冲突:基础镜像rapidsai/rapidsai已包含CUDA Runtime,无需额外安装toolkit。删除Dockerfile中apt-get install -y cuda-toolkit-11.2这一步,避免路径和组件冲突。

4. 验证容器内基础CUDA可用性

进入容器后先执行nvidia-smi,如果无法输出GPU信息,说明Singularity GPU挂载失败,需联系集群管理员确认节点GPU权限、nvidia-container-runtime是否正确安装;如果nvidia-smi正常,再执行以下命令测试CuPy:

import cupy
print(cupy.cuda.is_available())
print(cupy.cuda.Device(0))

若仍报错,尝试重新安装对应CUDA版本的CuPy:

pip uninstall -y cupy
pip install cupy-cuda112==9.6.0

5. 确认CUDA_VISIBLE_DEVICES环境变量

HPC集群中可能通过CUDA_VISIBLE_DEVICES限制GPU访问,需确保该变量在容器内正确传递。启动Singularity时可手动指定:

singularity run --nv --env CUDA_VISIBLE_DEVICES=0 your_image.sif

或在容器内检查变量值:echo $CUDA_VISIBLE_DEVICES,若为空则设置为对应设备编号(如0,1表示使用前两块GPU)。


内容的提问来源于stack exchange,提问作者fabio.geraci

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 04:31:05