很多人配置环境就是直接安装三件套,而对于版本管理不是很清楚。在开发初期,这样做没什么问题。但是如果服务器多人使用,或者复现代码多(pytorch版本和cuda版本是互相依赖的),就需要更进一步的版本管理方法。这里将详细介绍用于深度学习或者CPP开发的CUDA版本管理方式。
在配置环境前,首先需要明确自己的需求。一般来说,CUDA将会被用于:
对于使用Python进行的开发,推荐在linux上使用Docker,Windows上使用anaconda。对于C++开发,只使用方法一手动管理版本即可,无须安装anaconda和docker。请注意,以下的方法选择其一即可,混着用容易把自己搞乱了。
下面是目录,按需要跳转:
CUDA是基于驱动运行的,所以安装驱动必不可少。这一步非常简单,在linux和windows上都比较好做。这里暂时跳过。
我们使用什么版本cuda的,取决于要使用的PyTorch版本。在配置环境前,首先需要明确自己的需求。
pip的版本管理很混乱,在每次使用的过程中都要小心,哪些包的版本被修改了。因此建议对于版本跨度大的包,使用conda等虚拟环境隔离。
注意,这里的CUDA版本是假的,默认显示一个数值。还是需要继续安装~
nvidia-smi
输出方框就说明正常
系统环境变量
管理多版本CUDA方法相对来说最简单,直观。就是更改cuda对应的系统环境变量,使得其指向不同的版。
优点:
缺点:
系统环境变量
,在多人使用的服务器上容易造成版本混乱。很多仓库在安装时候会指定cuda-tookit
,导致环境
nvcc --version
命令,查看CUDA版本号。set cuda
命令,查看CUDA设置的环境变量。下载cuda:
首先确定需要下载的版本,wget下载。
赋予权限,安装
wget https://developer.download.nvidia.com/compute/cuda/自己的版本
sudo sh cuda_xxx.run
配置环境
sudo vi ~/.bashrc
export PATH=/usr/local/cuda-11.6/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-11.6/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export CUDA_HOME=/usr/local/cuda-11.6
source ~/.bashrc
sudo ldconfig
nvcc -V
在windows中,在控制面板中找到编辑系统环境变量
选项。
系统环境变量栏
,找到Path
和CUDA
。确定将要使用的CUDA版本,可以在系统环境变量栏
其他的CUDA*
中找到当前安装了哪些版本的cuda。CUDA
的地址换成目标版本的CUDA 安装地址Path
中把目标版本的CUDA地址放在最上面,这样nvidia-smi
指令就能找到当前实际使用的cuda版本。否则,其显示将会是默认的最新版,或者以前的版本。在Linux中,基本原理一样,就是更改系统环境变量,使得cuda的指向改变。
~/.bashrc
文件,到文件末尾修改下面的地址export PATH="/usr/local/cuda-11.0/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda-11.0/lib64:$LD_LIBRARY_PATH"
export CUDA_HOME=/usr/local/cuda-11.0
source ~/.bashrc
sudo ldconfig
# 检查安装
nvcc -V
Docker
这种方法的学习成本比较高,但是对于频繁切换电脑、切换系统;需要在多台无人车、板卡配置生产环境等高移动需求的人来说,是最好的方法。打包解包速度快得很。
这里简单介绍使用方法,详细请查看我的文章:Docker配置深度学习环境。
请注意:在Windows系统中不推荐使用docker(CUDA for WSL2驱动问题多,效率低,不如直接linux)
$ 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-container-toolkit
$ sudo systemctl
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo | sudo tee /etc/yum.repos.d/nvidia-docker.repo
$ sudo yum install -y nvidia-container-toolkit
$ sudo systemctl restart docker
激活环境 :
$ docker run --gpus all <镜像名称>
无须测试安装,不会出错的。
run不同版本对应的镜像即可。
anaconda
很多人对于anaconda的印象停留在python的包管理上,但其实它可以用于很多其他版本的管理中。比如cuda+cudnn的版本管理,就可以依靠环境完成隔离。
对于anaconda,linux和windows是一样的。
首先,新建虚拟环境并进入:
conda activate 环境名
如果有其他环境(甚至其他计算机的,拷贝过来也可以),包很全,可以使用
conda create -n 新环境名 --clone 已有环境名
搜索所有可用包的信息
conda search cudatoolkit --info
执行安装
conda install cudatoolkit==版本号
b. 网络差,下载卡住,离线安装。
conda search cudatoolkit --info
# 找到下载地址
wget 下载地址
conda install --use-local 下载好的地址
安装cudnn
cudnn的版本和cuda版本对应,如果省事儿,网络好,可以一起安装
conda install cudatoolkit==版本号 cudnn
在线、本地安装(同上)
检查安装成功与否
需要注意,conda环境下的nvcc地址和需要自己手动export,在对应虚拟环境下面。因此可以安装nvcc工具:
conda install -c nvidia cuda-nvcc
# 或者特定版本的nvcc,安装的版本应与你的cuda版本兼容
conda install -c "nvidia/label/cuda-x.x.x" cuda-nvcc
验证安装:
nvcc -V
直接使用conda,切换到对应版本的虚拟环境即可。建议自己写个文档,记录哪个虚拟环境都是什么版本的python和torch、cuda、cudnn。