查询驱动版本
nvidia-smi
发现我的驱动版本是430,根据NVIDIA官网的指南只能安装cuda10.1
查看架构
$ uname -a
Linux gpu011 4.2.0-42-generic #49~14.04.1-Ubuntu SMP Wed Jun 29 20:22:11 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
$ cat /proc/version
Linux version 4.2.0-42-generic (buildd@lgw01-55) (gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3) ) #49~14.04.1-Ubuntu SMP Wed Jun 29 20:22:11 UTC 2016
下载 cuda
进入NVIDIA 官网(用梯子快一点),下载cuda10.1的runfile(local)文件。
# 14.04
wget https://developer.download.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda_10.1.243_418.87.00_linux.run
# 16.04
wget https://developer.download.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda_10.1.243_418.87.00_linux.run
# 18.04
wget https://developer.download.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda_10.1.243_418.87.00_linux.run
安装 cuda
仅安装Toolkit(由于非root用户安装过程会大量报错,这里选择静默安装,且一定要安装在自己的HOME内,这里我们安装在$HOME/opt/cuda_10.2文件夹下)
注意,不用安装driver,因为已经装好了,而且要root才可以装,所以只需要安装toolkit就好了
在使用 Anaconda 安装 Pytorch 深度学习框架时,可以发现 Anaconda 会自动为我们安装 cudatoolkit.
上述安装的 cudatoolkit 与通过 Nvidia 官方提供的 CUDA Toolkit 是不一样的。具体而言,Nvidia 官方提供的 CUDA Toolkit 是一个完整的工具安装包,其中提供了 Nvidia 驱动程序、开发 CUDA 程序相关的开发工具包等可供安装的选项。使用 Nvidia 官网提供的 CUDA Toolkit 可以安装开发 CUDA 程序所需的工具,包括 CUDA 程序的编译器、IDE、调试器等,CUDA 程序所对应的各式库文件以及它们的头文件。上述 CUDA Toolkit 的具体组成可参考 CUDA Toolkit Major Components.
实际上,Nvidia 官方提供安装的 CUDA Toolkit 包含了进行 CUDA 相关程序开发的编译、调试等过程相关的所有组件。但对于 Pytorch 之类的深度学习框架而言,其在大多数需要使用 GPU 的情况中只需要使用 CUDA 的动态链接库支持程序的运行( Pytorch 本身与 CUDA 相关的部分是提前编译好的 ),就像常见的可执行程序一样,不需要重新进行编译过程,只需要其所依赖的动态链接库存在即可正常运行。故而,Anaconda 在安装 Pytorch 等会使用到 CUDA 的框架时,会自动为用户安装 cudatoolkit,其主要包含应用程序在使用 CUDA 相关的功能时所依赖的动态链接库。在安装了 cudatoolkit 后,只要系统上存在与当前的 cudatoolkit 所兼容的 Nvidia 驱动,则已经编译好的 CUDA 相关的程序就可以直接运行,而不需要安装完整的 Nvidia 官方提供的 CUDA Toolkit .
# 给权限
chmod +x cuda_10.1.243_418.87.00_linux.run
bash ./cuda_10.1.243_418.87.00_linux.run --toolkit --toolkitpath=$HOME/cuda_10.1 --defaultroot=$HOME/cuda_10.1
官网的 cuda10.1有三种版本,最开始是用了
CUDA Toolkit 10.1 (Feb 2019), Online Documentation
我在181安装的时候很正常,但是在188中途会出现 段错误,在246会出现其他错误
改用了最新的 CUDA Toolkit 10.1 update2 (Aug 2019), Versioned Online Documentation
就正常了。
安装成功,显示
===========
= Summary =
===========
Driver: Not Selected
Toolkit: Installed in /home/lirong/cuda_10.1/
Samples: Not Selected
# path
Please make sure that
- PATH includes /home/lirong/cuda_10.1/bin
- LD_LIBRARY_PATH includes /home/lirong/cuda_10.1/lib64, or, add /home/lirong/cuda_10.1/lib64 to /etc/ld.so.conf and run ldconfig as root
# uninstall
To uninstall the CUDA Toolkit, run cuda-uninstaller in /home/lirong/cuda_10.1/bin
Please see CUDA_Installation_Guide_Linux.pdf in /home/lirong/cuda_10.1/doc/pdf for detailed information on setting up CUDA.
***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 418.00 is required for CUDA 10.1 functionality to work.
To install the driver using this installer, run the following command, replacing <CudaInstaller> with the name of this run file:
sudo <CudaInstaller>.run --silent --driver
Logfile is /tmp/cuda-installer.log
修改环境变量
vim $HOME/.bashrc
添加代码
export PATH=$HOME/cuda_10.1/bin:$PATH
export LD_LIBRARY_PATH="$HOME/cuda_10.1/lib64/"
export CUDA_ROOT=$HOME/cuda_10.1/
export CUDA_TOOLKIT_ROOT=$HOME/cuda_10.1/lib64/
export CMAKE_CUDA_COMPILER=$HOME/cuda_10.1/bin/nvcc
source ~/.bashrc
查看 nvcc -V
$ nvcc -V
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
是10.1 版本的cuda 没错了。
下载 cudnn
对应cuda10.1的cudnn如下
选择 Download cuDNN v8.0.5 (November 9th, 2020), for CUDA 10.1
然后 cuDNN Library for Linux (x86)
因为下载cudnn是需要登录的,所以不便用wget下载,在自己电脑上下载后,再传到服务器上。
解压cudnn
下载完 cuDNN,可能发现后缀是 .solitairetheme8,直接将这个后缀改成 .tgz 即可解压。
tar -zxvf cudnn-10.2-linux-x64-v8.0.0.39.tgz
解压后发现cudnn总共分两个目录
复制文件到CUDA安装目录
复制 cuDNN 文件到 CUDA 安装目录:
(cuDNN 解压到 ~/cuda 目录了,~/cuda-9.1 为自己设定的 CUDA 安装目录,~ 代表 /home/x007jianjian)
cp cuda/include/cudnn.h ~/cuda_10.1/include/
cp cuda/lib64/lib* ~/cuda_10.1/lib64/
# 并且给所有用户添加读的权限
chmod a+r ~/cuda_10.1/include/cudnn.h ~/cuda_10.1/lib64/libcudnn*
cp cuda/include/cudnn* ~/cuda_10.1/include/
安装多版本cudnn,cuda
安装步骤同上述,需要哪个版本就把用户环境变量指向按个版本。
cudnn版本检测不到的问题
打开 cudnn.h 文件,发现
#if !defined(CUDNN_H_)
#define CUDNN_H_
#include <cuda_runtime.h>
#include <stdint.h>
#include "cudnn_version.h"
#include "cudnn_ops_infer.h"
#include "cudnn_ops_train.h"
#include "cudnn_adv_infer.h"
#include "cudnn_adv_train.h"
#include "cudnn_cnn_infer.h"
#include "cudnn_cnn_train.h"
#include "cudnn_backend.h"
#if defined(__cplusplus)
extern "C" {
#endif
#if defined(__cplusplus)
}
#endif
#endif /* CUDNN_H_ */
原来版本号在另一个文件里,但是我安装cudnn的时候只复制了 cudnn.h 没复制其他文件过来
cp cuda/include/cudnn* ~/cuda_10.1/include/
如果还是检测不到,就把 cudnn_version.h 里面的东西(如下)复制到cudnn.h里面
#ifndef CUDNN_VERSION_H_
#define CUDNN_VERSION_H_
#define CUDNN_MAJOR 8
#define CUDNN_MINOR 0
#define CUDNN_PATCHLEVEL 5
#define CUDNN_VERSION (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL)
#endif /* CUDNN_VERSION_H */