启用 NVIDIA cuda 的 docker 容器问题 - UserWarning:CUDA 初始化:cudaGetDeviceCount() 出现意外错误

jar*_*jar 6 ubuntu docker pytorch nvidia-docker

我正在尝试使用 NVIDIA 提供的基础映像,让我们可以通过 Docker 容器使用他们的 GPU。因为我使用的是 docker,所以我的系统上不需要安装 CUDA Toolkit 或 CuDNN。我所需要的只是合适的司机——我已经拥有了。

我可以运行官方的 pytorch docker 容器,并且容器使用我的 GPU。但是,当我使用 NVIDIA 的基础映像运行任何内容时,我会收到以下警告 -

$ docker run --gpus all -it --rm -p 8000:8000 ubuntu-cuda-gpu:latest
Run Code Online (Sandbox Code Playgroud)
/usr/local/lib/python3.8/dist-packages/torch/cuda/__init__.py:52: UserWarning: CUDA initialization: Unexpected error from cudaGetDeviceCount(). Did you run some cuda functions before calling NumCudaDevices() that might have already set an error? Error 804: forward compatibility was attempted on non supported HW (Triggered internally at  /pytorch/c10/cuda/CUDAFunctions.cpp:109.)
  return torch._C._cuda_getDeviceCount() > 0
Run Code Online (Sandbox Code Playgroud)

应用程序执行时,只使用CPU。但我希望能够像使用官方 pytorch docker 镜像运行相同的代码(这是一个简单的 pytorch 示例)一样使用我的 GPU。

使用的基础图像是 -

FROM nvidia/cuda:11.3.1-cudnn8-runtime-ubuntu20.04
# Setup
RUN apt update && \
    apt install -y bash \
                   build-essential \
                   git \
                   curl \
                   ca-certificates \
                   python3 \
                   python3-pip && \
    rm -rf /var/lib/apt/lists

# Your stuff
RUN python3 -m pip install --no-cache-dir --upgrade pip && \
    python3 -m pip install --no-cache-dir \
    torch \
    transformers \
...
Run Code Online (Sandbox Code Playgroud)

如果我只是在没有任何机器学习代码的情况下运行图像并尝试执行 nvidia-smi,那么我得到的输出为 -

$ docker run --gpus all -it --rm -p 8000:8000 ubuntu-cuda-gpu:latest nvidia-smi
Run Code Online (Sandbox Code Playgroud)
Sat Jun 12 19:15:21 2021
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.80       Driver Version: 460.80       CUDA Version: 11.3     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  GeForce RTX 3060    Off  | 00000000:01:00.0 Off |                  N/A |
|  0%   31C    P8     9W / 170W |     14MiB / 12053MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
+-----------------------------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

这让我相信至少有些事情是正确的。但为什么我无法使用 GPU 以及如何确保我可以使用 GPU?

我使用的是 Ubuntu 20.04。