system76 ubuntu 20.04 tensorflow gpu cuda 版本冲突

时间:2021-01-08 00:29:16

标签: tensorflow ubuntu cuda cudnn

从 18.04 升级到 Ubuntu 20.04 后,Tensorflow 不再能够使用我的 GPU,因为它试图混合和加载不同的版本(一些 10 和一些 11)。这是一台 System76 机器,我从 System76 安装了 cuda 10.1(所以它可以与 System76 nvidia 驱动程序一起使用)。运行tensorflow时出现以下错误:

2021-01-07 18:12:22.584886: W tensorflow/stream_executor/platform/default/dso_loader.cc:60] Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory
2021-01-07 18:12:22.584906: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.
2021-01-07 18:12:23.640665: I tensorflow/compiler/jit/xla_cpu_device.cc:41] Not creating XLA devices, tf_xla_enable_xla_devices not set
2021-01-07 18:12:23.641412: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcuda.so.1
2021-01-07 18:12:23.669966: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:941] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2021-01-07 18:12:23.670257: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1720] Found device 0 with properties: 
pciBusID: 0000:01:00.0 name: GeForce GTX 1060 computeCapability: 6.1
coreClock: 1.733GHz coreCount: 10 deviceMemorySize: 5.93GiB deviceMemoryBandwidth: 178.99GiB/s
2021-01-07 18:12:23.670328: W tensorflow/stream_executor/platform/default/dso_loader.cc:60] Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory
2021-01-07 18:12:23.670379: W tensorflow/stream_executor/platform/default/dso_loader.cc:60] Could not load dynamic library 'libcublas.so.11'; dlerror: libcublas.so.11: cannot open shared object file: No such file or directory
2021-01-07 18:12:23.670425: W tensorflow/stream_executor/platform/default/dso_loader.cc:60] Could not load dynamic library 'libcublasLt.so.11'; dlerror: libcublasLt.so.11: cannot open shared object file: No such file or directory
2021-01-07 18:12:23.671387: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcufft.so.10
2021-01-07 18:12:23.671667: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcurand.so.10
2021-01-07 18:12:23.673022: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcusolver.so.10
2021-01-07 18:12:23.673100: W tensorflow/stream_executor/platform/default/dso_loader.cc:60] Could not load dynamic library 'libcusparse.so.11'; dlerror: libcusparse.so.11: cannot open shared object file: No such file or directory
2021-01-07 18:12:23.673245: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcudnn.so.8
2021-01-07 18:12:23.673259: W tensorflow/core/common_runtime/gpu/gpu_device.cc:1757] Cannot dlopen some GPU libraries. Please make sure the missing libraries mentioned above are installed properly if you would like to use GPU.

请注意,所有警告都是针对尝试加载 Cuda 11 版的,但仅针对某些库。版本 10 加载良好。

这是 nvcc --version 的输出

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Fri_Feb__8_19:08:17_PST_2019
Cuda compilation tools, release 10.1, V10.1.105

这是nvidia-smi的输出

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 455.38       Driver Version: 455.38       CUDA Version: 11.1     |
|-------------------------------+----------------------+----------------------+
| 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 GTX 1060    Off  | 00000000:01:00.0 Off |                  N/A |
| N/A   53C    P0    26W /  N/A |    585MiB /  6069MiB |      4%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A      2999      G   /usr/lib/xorg/Xorg                101MiB |
|    0   N/A  N/A      3479      G   /usr/lib/xorg/Xorg                255MiB |
|    0   N/A  N/A      3720      G   /usr/bin/gnome-shell               88MiB |
|    0   N/A  N/A      6487      G   ...AAAAAAAA== --shared-files       45MiB |
|    0   N/A  N/A      6959      G   ...AAAAAAAA== --shared-files       40MiB |
|    0   N/A  N/A     11642      G   ...AAAAAAAA== --shared-files       21MiB |
|    0   N/A  N/A     25206      G   WickrMe                            17MiB |
+-----------------------------------------------------------------------------+

我看到 nvidia-smi 输出中的驱动程序版本是版本 11,但据我了解,这与 cuda 运行时无关。这只是驱动程序支持的版本。如果我错了,请纠正我。

我必须使用版本 10,因为这是 System76 支持的版本,并且在升级之前它运行良好。我还尝试通过 pip3 卸载并重新安装 Tensorflow,但没有成功。

有谁知道如何将所有库同步到 10.1 版?我还尝试手动将版本 11 库放置到位并让 Tensorflow 使用混合版本(这当然是个坏主意)但它无法识别它们(或者我没有正确放置它们)。

2 个答案:

答案 0 :(得分:2)

正如@talonmies 指出的那样,我误解了版本控制系统。不过因为是System76机器,所以也让人困惑,因为System76使用的是自己的Nvidia驱动,安装Cuda 11和Cudnn并不简单。我会发布答案,以防其他人遇到 System76 的问题。

首先,不要为 Cuda 和 Cudnn 使用 System76 安装。他们有自己的版本(在他们的网站上)以便与他们的 Nvidia 驱动程序兼容,但他们不会工作(他们是版本 10,而 TF 2.2+ 需要 11)。此外,大多数通用 Cuda 指南会告诉您首先卸载/安装 Nvida 驱动程序,以便进行全新安装,但如果您使用的是 System76 系统,请不要这样做。只需不要管 System76 驱动程序。此外,如果您有任何以前的 Cuda/Cudnn,请删除/卸载所有这些。

前往 Nvidia 并获取他们最新的 Cuda 和 Cudnn。我用过

wget http://developer.download.nvidia.com/compute/cuda/11.0.2/local_installers/cuda_11.0.2_450.51.05_linux.run

运行它

sudo sh cuda_11.0.2_450.51.05_linux.run

当它运行时,它会告诉您您与驱动程序包有冲突。忽略它并继续。当您进入安装菜单时,取消选中“安装驱动程序”并继续安装。完成后,添加到您的路径

/usr/local/cuda-11.0:/usr/local/cuda-11.0/bin:

您需要同时添加 cuda 根和 bin,而不仅仅是 bin(这与大多数一般指令不同)。源您的 .bashrc 或 .profile 或您放置路径添加的任何位置(或打开一个新终端)。

现在安装 Cudnn。

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/libcudnn8_8.0.5.39-1+cuda11.0_amd64.deb

用 dpkg 安装它。例如(在我的情况下)...

sudo dpkg -i libcudnn8_8.0.5.39-1+cuda11.0_amd64.deb

就是这样。一旦我完成了所有这些,一切都很好。希望能帮助一些 System76 的人更轻松地通过 Ununtu 20.04 和 Cuda 11。

答案 1 :(得分:1)

非常感谢。 我使用 POP OS 的原因之一是 Nvidia 驱动程序 + cuda/cudnn 只是与 tensorflow 一起工作,直到缺少 11.0 版的这个问题。

我需要能够使用上面的方法安装 cuda 11.0 的一件事是安装 gcc 版本 8:

sudo apt -y install gcc-8 g++-8
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 8
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 8

我真的希望 POP!_os 能直接提供 CUDA 11.0 包.....