【一次性解决】深入理解CUDA和PyTorch的安装与多版本管理的三种方式

11 篇文章 2 订阅
5 篇文章 0 订阅

很多人配置环境就是直接安装三件套,而对于版本管理不是很清楚。在开发初期,这样做没什么问题。但是如果服务器多人使用,或者复现代码多(pytorch版本和cuda版本是互相依赖的),就需要更进一步的版本管理方法。这里将详细介绍用于深度学习或者CPP开发的CUDA版本管理方式。

在配置环境前,首先需要明确自己的需求。一般来说,CUDA将会被用于:

  • PyTorch的GPU版本
  • CUDA的C++开发
  • CUDA的Python开发

对于使用Python进行的开发,推荐在linux上使用DockerWindows上使用anaconda。对于C++开发,只使用方法一手动管理版本即可,无须安装anaconda和docker。请注意,以下的方法选择其一即可,混着用容易把自己搞乱了。

下面是目录,按需要跳转:

基础知识

CUDA是基于驱动运行的,所以安装显卡驱动必不可少。这一步非常简单,在linux和windows上都比较好做。这里暂时跳过。

我们使用什么版本cuda的,取决于要使用的PyTorch版本。在配置环境前,首先需要明确自己的需求

pip的版本管理很混乱,在每次使用的过程中都要小心,哪些包的版本被修改了。因此建议对于版本跨度大的包,使用conda等虚拟环境隔离。

GPU运算的环境配置流程

  1. 安装NVIDIA驱动
  2. 安装Docker(可选)
  3. 安装anaconda(可选)
  4. 配置CUDA、cuDNN
  5. 安装pytorch

检查驱动安装

注意,这里的CUDA版本是假的,默认显示一个数值。还是需要继续安装~

nvidia-smi

输出方框就说明显卡驱动正常,可以继续。

方法一:使用系统环境变量管理多版本CUDA

方法相对来说最简单,直观。就是更改cuda对应的系统环境变量,使得其指向不同的版。

优点:

  • 节省空间,不需要创建太多的conda环境
  • 安装方便,网络问题导致无法conda安装时,除了可以离线安装,还可以手动管理
  • 安装的cuda是完整版,使用**C++**开发一定要用这个方法安装

缺点:

  • 切换环境需要修改系统环境变量 ,在多人使用的服务器上容易造成版本混乱。
  • 复现代码时候每次都要查看文档,手动下载,配置环境变量,复制cudnn,成本高

环境检查脚本

很多仓库在安装时候会指定cuda-tookit,导致环境

安装

windows本地安装

  1. CUDA版本选择:
    • 打开NVIDIA控制面板,选择系统信息,查看支持的CUDA版本。
  2. CUDA toolkit下载:
    • 访问NVIDIA开发者网站的CUDA Toolkit下载页面
    • 根据自己的操作系统和CUDA版本选择合适的下载链接。
    • 下载并运行.exe文件,按照安装向导进行安装。
    • 设置临时解压目录和安装目录,建议使用默认设置。
    • 安装完成后,配置CUDA的环境变量。
  3. cuDNN下载和配置:
    • 访问NVIDIA开发者网站的cuDNN下载页面。
    • 注册一个账号并登录,然后选择适配自己CUDA版本的cuDNN版本进行下载。
    • 解压下载的压缩包,得到三个文件夹。
    • 将这三个文件夹的内容复制到CUDA的安装目录中。
    • 添加CUDA安装目录到系统环境变量的path中。
  4. 验证安装是否成功:
    • 打开命令提示符,输入nvcc --version命令,查看CUDA版本号。
    • 输入set cuda命令,查看CUDA设置的环境变量。

Linux本地安装

  1. 下载cuda:

    • 首先确定需要下载的版本,wget下载。

    • 赋予权限,安装

      wget https://developer.download.nvidia.com/compute/cuda/自己的版本
      sudo sh cuda_xxx.run
      

      这里需要额外注意,如果需要多版本CUDA 共存,不要选择更新当前cuda,应该选no

  2. 配置环境

    • 添加环境变量
    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

在windows中,在控制面板中找到编辑系统环境变量选项。

  1. 系统环境变量栏,找到PathCUDA 。确定将要使用的CUDA版本,可以在系统环境变量栏其他的CUDA*中找到当前安装了哪些版本的cuda。
  2. CUDA的地址换成目标版本的CUDA 安装地址
  3. Path中把目标版本的CUDA地址放在最上面,这样nvidia-smi指令就能找到当前实际使用的cuda版本。否则,其显示将会是默认的最新版,或者以前的版本。
  4. 重新启动(不必要)

Linux

在Linux中,基本原理一样,就是更改系统环境变量,使得cuda的指向软连接改变。

  1. 找到目标cuda版本的安装地址,默认在/usr/local/cuda-版本号 中。

  2. 打开终端,vi编辑~/.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
    
  3. 更新环境变量并检查

    source ~/.bashrc
    sudo ldconfig
    # 检查安装
    nvcc -V
    

当然,在linux中指令行窗口使用export可以临时在当前bash环境更换版本。
在bash输入,更换成对应版本即可

export PATH=/usr/local/cuda-11.7/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.7/lib64:$LD_LIBRARY_PATH

方法二:使用Docker

这种方法的学习成本比较高,但是对于频繁切换电脑、切换系统;需要在多台无人车、板卡配置生产环境等高移动需求的人来说,是最好的方法。打包解包速度快得很。

这里简单介绍使用方法,详细请查看我的文章:Docker配置深度学习环境

请注意:在Windows系统中不推荐使用docker(CUDA for WSL2驱动问题多,效率低,不如直接linux)

linux上安装NVIDIA Container Toolkit docker

Ubuntu 16.04/18.04, Debian Jessie/Stretch/Buster:

$ 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

CentOS 7 (docker-ce), RHEL 7.4/7.5 (docker-ce), Amazon Linux 1/2:

$ 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的版本管理,就可以依靠环境完成隔离。

使用conda安装cudatoolkit其实在取巧,因为PyTorch的GPU版本已经编译过程中加入了大多数CUDA依赖,这里只需要补充一小部分就好了。对于大多数python应用,这个就足够了。

但是,如果你需要使用 mmcv-full ,tensorflow编译版本, 等其他所有需要编译的库,请使用完整安装方式。编译时必须要有完整的cuda。

安装

对于anaconda,linux和windows是一样的。

  1. 首先,新建虚拟环境并进入:

    conda activate 环境名
    

    如果有其他环境(甚至其他计算机的,拷贝过来也可以),包很全,可以使用

    conda create -n 新环境名 --clone 已有环境名
    
  2. 搜索所有可用包的信息

    conda search cudatoolkit --info
    
  3. 执行安装
    a. 网络好,直接安装。

    conda install cudatoolkit==版本号
    

    b. 网络差,下载卡住,离线安装。

    conda search cudatoolkit --info
    # 找到下载地址
    wget 下载地址
    conda install --use-local 下载好的地址
    

c. 特殊安装在末尾添加,这样安装时nvcc就可用。使用Style GAN2系列的需要注意用这个。或者就要额外安装cuda,独立安装情况下是完整的。

-c hcc
  1. 安装cudnn

    1. cudnn的版本和cuda版本对应,如果省事儿,网络好,可以一起安装

      conda install cudatoolkit==版本号 cudnn
      
    2. 在线、本地安装(同上)

  2. 检查安装成功与否

    需要注意,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。

多种方式的共存

上述的三种方式完全可以共存,例如很多库都会偷偷安装conda的cuda-tookit,但这并不会影响此conda环境之外的其他包。同时conda安装的cuda也不会影响代码的编译过程,这一点需要注意,尤其是在写cpp时候。

优先级

在conda环境中调用cuda时,需要区分主动和被动两种。

  • tensorflow-编译版本 等调用cuda时,将会调用系统安装的cuda。
  • 当torch等库调用cuda时,优先选择conda内的版本。
  • docker不会受到其他影响,可以当作虚拟机用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值