首页 > 解决方案 > tensorflow/stream_executor/cuda/cuda_driver.cc:328] 调用 cuInit 失败:CUDA_ERROR_UNKNOWN:未知错误

问题描述

我正在尝试将 GPU 与 Tensorflow 一起使用。我的 Tensorflow 版本是2.4.1,我使用的是 Cuda 版本 11.2。这是 的输出nvidia-smi

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.39       Driver Version: 460.39       CUDA Version: 11.2     |
|-------------------------------+----------------------+----------------------+
| 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 MX110       Off  | 00000000:01:00.0 Off |                  N/A |
| N/A   52C    P0    N/A /  N/A |    254MiB /  2004MiB |      8%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A      1151      G   /usr/lib/xorg/Xorg                 37MiB |
|    0   N/A  N/A      1654      G   /usr/lib/xorg/Xorg                136MiB |
|    0   N/A  N/A      1830      G   /usr/bin/gnome-shell               68MiB |
|    0   N/A  N/A      5443      G   /usr/lib/firefox/firefox            0MiB |
|    0   N/A  N/A      5659      G   /usr/lib/firefox/firefox            0MiB |
+-----------------------------------------------------------------------------+

我面临一个奇怪的问题。以前,当我试图列出所有使用tf.config.list_physical_devices()它的物理设备时,只能识别一个 cpu 和一个 gpu。之后我尝试在 GPU 上进行简单的矩阵乘法。它因这个错误而失败:(failed to synchronize cuda stream CUDA_LAUNCH_ERROR错误代码是这样的,我忘了记下它)。但在那之后,当我再次从另一个终端尝试同样的事情时,它无法识别任何 GPU。这一次,列出物理设备会产生这样的结果:

>>> tf.config.list_physical_devices()
2021-04-11 18:56:47.504776: I tensorflow/compiler/jit/xla_cpu_device.cc:41] Not creating XLA devices, tf_xla_enable_xla_devices not set
2021-04-11 18:56:47.507646: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcuda.so.1
2021-04-11 18:56:47.534189: E tensorflow/stream_executor/cuda/cuda_driver.cc:328] failed call to cuInit: CUDA_ERROR_UNKNOWN: unknown error
2021-04-11 18:56:47.534233: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:169] retrieving CUDA diagnostic information for host: debadri-HP-Laptop-15g-dr0xxx
2021-04-11 18:56:47.534244: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:176] hostname: debadri-HP-Laptop-15g-dr0xxx
2021-04-11 18:56:47.534356: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:200] libcuda reported version is: 460.39.0
2021-04-11 18:56:47.534393: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:204] kernel reported version is: 460.39.0
2021-04-11 18:56:47.534404: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:310] kernel version seems to match DSO: 460.39.0
[PhysicalDevice(name='/physical_device:CPU:0', device_type='CPU')]

我的操作系统是 Ubuntu 20.04,Python 版本 3.8.5 和 Tensorflow ,如之前提到的 2.4.1 和 Cuda 版本 11.2。我按照这些说明安装了 cuda 。一项额外的信息;当我导入 tensorflow 时,它显示以下输出:

import tensorflow as tf
2021-04-11 18:56:07.716683: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcudart.so.11.0

我错过了什么?为什么即使之前识别过GPU,它也无法识别?

标签: python-3.xgputensorflow2.0nvidia

解决方案


tldr:在安装 Nvidia 驱动程序之前禁用安全启动。

我遇到了完全相同的错误,我花了很多时间试图弄清楚我是否错误地安装了 Tensorflow 相关的东西。经过数小时的问题解决后,我发现我的 NVIDIA 驱动程序出现了一些问题,因为我在设置 Ubuntu 20.4 时从未在 BIOS 中禁用安全启动。这是我的建议(我选择使用带有 Tensorflow 的 Docker,这样可以避免安装所有与 Cuda 相关的东西)——我希望它对你有用!

  1. 在 BIOS 中禁用安全启动
  2. 在 Ubuntu 20.4 上进行全新安装
  3. 根据nvidia-container-toolkit 的页面安装 Docker 。
curl https://get.docker.com | sh \
  && sudo systemctl --now enable docker
  1. nvidia-container-toolkit从同一页面安装。
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
   && curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - \
   && curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
sudo apt-get install -y nvidia-docker2
sudo systemctl restart docker
  1. 测试以确保它正在使用
sudo docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi
  1. 最后,使用带有 GPU 支持的 Docker 的 TensorFlow!
docker run --gpus all -u $(id -u):$(id -g) -it -p 8888:8888 tensorflow/tensorflow:latest-gpu-jupyter jupyter notebook --ip=0.0.0.0

推荐阅读