system76 ubuntu 20.04 tensorflow gpu cuda 版本冲突

system76 ubuntu 20.04 tensorflow gpu cuda version conflicts

从 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 使用混合版本(这当然是一个坏主意)但它不会识别它们(或者我没有正确放置它们)。

正如@talonmies 所指出的,我误解了版本控制系统。然而,因为它是一台 System76 机器,它也很混乱,因为 System76 使用他们自己的 Nvidia 驱动程序,并且安装 Cuda 11 和 Cudnn 并不简单。我发布答案以防其他人遇到 System76 问题。

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

去 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 root 和 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。

非常感谢。 我使用 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包.....