每次配环境的时候都要重新搜索torch或tf的版本,要和自己电脑的CUDA、cudnn版本对应起来,但是nvidia-smi和nvcc --version查询的结果又不一致,每次到这里都需要重新查重新找,索性自己记录下来。
比如我现在使用的服务器,nvcc--version返回的结果是
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Tue_May__3_18:49:52_PDT_2022
Cuda compilation tools, release 11.7, V11.7.64
Build cuda_11.7.r11.7/compiler.31294372_0
而nvidia-smi返回的结果是
Mon Mar 25 22:02:20 2024
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 510.39.01 Driver Version: 510.39.01 CUDA Version: 11.6 |
|-------------------------------+----------------------+----------------------+
| 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 NVIDIA A100-PCI... On | 00000000:0C:00.0 Off | 0 |
| N/A 30C P0 36W / 250W | 1616MiB / 40960MiB | 0% Default |
| | | Disabled |
而我在跑一个tensorflow代码时报错提示时
2024-03-25 21:59:28.979736: E tensorflow/compiler/xla/stream_executor/cuda/cuda_dnn.cc:425]
Loaded runtime CuDNN library: 8.4.1 but source was compiled with: 8.6.0. CuDNN library
needs to have matching major version and equal or higher minor version. If using a binary
install, upgrade your CuDNN library. If building from sources, make sure the library
loaded at runtime is compatible with the version specified during compile configuration.
2024-03-25 21:59:28.986042: W tensorflow/core/framework/op_kernel.cc:1828] OP_REQUIRES
failed at conv_ops_fused_impl.h:625 : UNIMPLEMENTED: DNN library is not found.
而我用pip list|grep cuda输出的结果是
nvidia-cuda-cupti-cu11 11.7.101
nvidia-cuda-nvrtc-cu11 11.7.99
nvidia-cuda-runtime-cu11 11.7.99
用pip list|grep cudnn输出的结果是
nvidia-cudnn-cu11 8.5.0.96
我用pip list|grep tensorflow输出的结果是
tensorflow 2.13.1
tensorflow-estimator 2.13.0
tensorflow-io-gcs-filesystem 0.34.0
tensorflow-probability 0.21.0
真的超级乱,烦死了。一个一个来,首先:nvcc --version和nvidia-smi有什么区别?
这篇文章具体的讲了什么区别,这篇文章和这篇文章和这篇文章提到选择tf或torch版本时候,要看的是nvcc --version的输出,而不是nvidia-smi的输出。所以我的cuda是11.7。
而cuda和cudnn又是什么区别?
这篇文章提到,CUDNN和CUDA是两个不同的软件库。CUDA是NVIDIA开发的通用并行计算平台和编程模型,用于GPU加速的计算。CUDNN则是NVIDIA开发的基于CUDA的深度学习加速库,为深度学习框架提供高效的GPU加速。
cuda的版本查询就是使用nvcc --version可以得到,而根据,是使用下面命令行查询:
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
但是我使用的是虚拟环境,所以用pip list|grep cudnn查询的应该才是cudnn版本。
上面报错说我的cudnn版本过低,所以我或者downgrade我的tensorflow版本,或者根据我的cuda版本upgrade我的cudnn版本。