多版本cuda管理

背景

  • 在深度学习中,难免会配置多个不同的环境,需要不同的cuda和cudnn版本,又或者,随着框架的不断升级,需求的cuda版本越来越高,这时候,难免就更新cuda的版本,使得多个版本的cuda共存于电脑。那么如何灵活管理和使用不同版本的cuda就成了一个问题。

cuda是什么

  • CUDA英文全称是Compute Unified Device Architecture。
    CUDA是一个并行计算平台和编程模型,能够使得使用GPU进行通用计算变得简单和优雅。

  • 所以其实cuda就像pytorch类似的框架,已经提供了很多东西,你可以直接使用,但是如果觉得不够,你也可以按照一定的逻辑进行你自己的开发。不是单纯的API,也不像是一门编程语言。

  • 值得一提的是,CUDA只能在NVIDIA的GPU上运行,不过,随着版本不断迭代更新,也许会支持其他的GPU.

cuda的作用和版本迭代

  • 就好像我们的很多深度学习模型都是基于pytorch,或者tensorflow等框架开发的。pytroch和tensorflow这些深度学习又是基于cuda开发的。也就是我们只需要把cuda当做一个类似opencv的第三方库看待就可以。

  • 而cuda的版本更新,比如cuda9到cuda10,可以简单的理解为,我opencv3,更新到了opencv4. 会增加新的功能,同时也会对过去的一些功能做修改。而新版本的cuda,简单来说就是会支持更多的下显卡,以及拥有更好的加速优化。但是同样的,原来的一些接口也可能会做修改。

  • 所以说cuda版本,并不一定向下兼容,也就是cuda10不一定就能跑cuda9下可以跑的程序。但是另外的,也不是就完全就不能跑。如果调用的接口在cuda更新的时候,没有进行修改的话,其实换了cuda也还是能跑的。

cuda和显卡驱动的关系

  • 显卡驱动越新,就可以支持越高版本的cuda,同样也支持低版本cuda。 通常新版本的显卡驱动应该能支持当前最高支持CUDA版本以下的所有版本,所有要关注显卡驱动能支持的最高CUDA版本。
  • 所以你可以放心大胆的更新你的显卡驱动,不用担心更新之后原来的cuda就不能用了。

不同的cudatoolkit区别

  • NVIDIA官方

    • Nvidia 官方提供的 CUDA Toolkit 是一个完整的工具安装包,其中提供了 Nvidia 驱动程序、开发 CUDA 程序相关的开发工具包等可供安装的选项。使用 Nvidia 官网提供的 CUDA Toolkit 可以安装开发 CUDA 程序所需的工具,包括 CUDA 程序的编译器、IDE、调试器等,CUDA 程序所对应的各式库文件以及它们的头文件
  • anaconda

    • 但对于 Pytorch 之类的深度学习框架而言,其在大多数需要使用 GPU 的情况中只需要使用 CUDA 的动态链接库支持程序的运行。
    • anaconda的cudatoolkit主要包含应用程序在使用 CUDA 相关的功能时所依赖的动态链接库。在安装了 cudatoolkit 后,只要系统上存在与当前的 cudatoolkit 所兼容的 Nvidia 驱动,则已经编译好的 CUDA 相关的程序就可以直接运行。具体看下面cuda作用过程分析

cuda的作用过程

  • 初学者一般会从NVIDIA的官方下载cuda和cudnn 进行安装。但是实际上,这个过程安装的不仅仅是cuda还有cuda的编程环境,编译器,等一系列的东西。

  • 刚刚提到了,深度学习框架的GPU版本其实基于cuda框架进行开发的。就好像你设计一个程序,用到了opencv一样。

  • 然后我们从官网下载下来的cuda其实是包含源程序的版本,就好像你从github下载下来的没有编译过的源码。

  • 而我们在运行基于深度学习框架的程序的时候,会对cuda程序进行编译,产生一个动态链接库。然后给框架使用。就好像你的opencv如果采用源码的话,会编译生成很多.so文件一样,其实cuda生成的也是一系列的.so文件。

  • 那么我们就会想,能不能像opencv一样,直接下载编译好的.so文件,然后到时候根据需求调用就好了呢??可以的。这就是最简单的多版本的管理原理。

基于conda的多版本cuda管理

  • conda install cudatoolkit-xxx
    • 安装你需要的cuda版本对应的cudatoolkit,里面就有编译好的动态链接库
    • 存放在 anaconda3/pkgs 文件夹下
  • export LD_LIBRARY_PATH=”你需要的cudatoolkit下的lib的路径”
    • 在终端执行这个,便可以修改当前终端下的指向的cuda的链接库的路径。便可以的。
  • 这个方法和你的电脑本身装的cuda是什么无关,都可以使用,非常方便。