在这篇文章中,我们不仅要安装好CUDA,还有安装多版本的CUDA
首先聊一个题外话:前几天在csdn上看到的一个话题”安装pytorch一定要去nvidia官网下载安装cuda和cudnn吗?“
我相信任何一个刚开始接触或者从事深度学习的炼丹者都会从安装cuda开始,现在网上随便一搜如何安装pytorch,蹦出来教程提及到的流程基本上都是先安装cuda,cudnn , 然后安装pytorch。但是现在完全没有必要,现在的pytorch都已经预构建了cuda以及cudnn,换言之,下载好了gpu版本的pytorch,pytorch默认用的都是自己附带的cuda。如果只是用pytorch训练、推理深度学习模型,完全没有必要再去额外安装完整版的cuda cudnn ,现在版本的pytorch都附带了不完整的cuda,这对于训练模型、模型推理等完全够用了,除非你触及到了cuda编程、cuda编译构建项目这个层面(国内深度学习从业者难有20%会触及到这个层面)此时才需要安装完整的英伟达cuda。因此对于刚开始接触或者从事深度学习的小白,特别是刚入门的学生党,基本上不会接触到这个层面,因此没有特别大的必要去英伟达官方下载安装完整版的cuda。直接下载Pytorch就可以直接使用了。
利用Pytorch等深度学习框架进行模型训练是”打怪升级“的第一阶段,今天我想谈一下,”打怪升级“的第二阶段:模型多环境推理部署和加速推理 的过程中 会遇到的一个实际问题:多版本CUDA
举一个典型的案例:生产环境下,我们要求项目具有低延迟、高吞吐,使用pytorch训练出来的原始模型往往满足不了这样的要求的,因此模型部署的时候不会采用pytorch训练出来的原始模型,在英伟达平台下,我们都会采用Tensorrt推理对项目进行深度加速,tensorrt加速也离不开CUDA,并且对cuda版本要求较为严格。假设项目A用的是Tensorrt10.x 需要CUDA12.X,项目B用的是Tensorrt 8.x,需要CUDA11.X。现在需要在本地测试一下两个项目,需要多版本CUDA怎么办?
所以如果可以灵活地在不同cuda版本间切换将是非常方便的。anaconda就可以实现这个功能。我们可以在conda创建的不同虚拟环境中安装不同的cuda和cudnn版本,以此来实现不同cuda版本间的切换。
一、通过Anaconda安装CUDA
我们可以通过anaconda安装CUDA。以cuda12.2为例,详细的安装步骤在nvidia官网也都有介绍CUDA Toolkit Documentation 12.2 (nvidia.com)
我这里直接给出简要步骤:
首先anaconda源更换为conda-forge,然后使用conda search命令可以查看可用的cuda版本
conda search cuda -c nvidia
我们可以直接通过下面的命令安装CUDA
conda install cuda -c nvidia
但是上面的命令是安装最新版本CUDA。截止到24.06.27是CUDA12.5.0。一般我们安装时往往不是安装最新版本的,而是安装指定版本的,因此需要添加 -c nvidia/label/cuda-x 来指定具体的版本,例如我需要安装CUDA12.2。则使用下面的命令
conda install cuda -c nvidia/label/cuda-12.2.0
例如,我在cuda12.2的anaconda虚拟环境下安装CUDA12.2
安装好之后,在anaconda虚拟环境名为cuda12.2验证cuda版本,可以看到cuda版本号为12.2
由此,成功通过anaconda在虚拟环境中安装好了CUDA。如果还需要安装另外一个版本的CUDA,新建一个虚拟环境按照上面的步骤重复操作一次即可。由此实现了虚拟环境下多版本CUDA
二、在Anaconda环境中通过pip安装CUDA
我们不仅可以使用anaconda安装CUDA,还可以使用pip安装CUDA。以CUDA11.6为例,详细的安装步骤在nvidia都有介绍
Installation Guide Linux :: CUDA Toolkit Documentation (nvidia.com)
下面以pip安装cuda11.6为例,我们需要安装下面的wheel包
nvidia-nvml-dev-cu116
nvidia-cuda-nvcc-cu116
nvidia-cuda-runtime-cu116
nvidia-cuda-cupti-cu116
nvidia-cublas-cu116
nvidia-cuda-sanitizer-api-cu116
nvidia-nvtx-cu116
nvidia-cuda-nvrtc-cu116
nvidia-npp-cu116
nvidia-cusparse-cu116
nvidia-cusolver-cu116
nvidia-curand-cu116
nvidia-cufft-cu116
nvidia-nvjpeg-cu116
pip安装的时候需要添加nivida源
--extra-index-url https://pypi.ngc.nvidia.com
例如pip安装CUDA11.6的命令如下
pip install nvidia-nvml-dev-cu116 nvidia-cuda-nvcc-cu116 nvidia-cuda-runtime-cu116 nvidia-cuda-cupti-cu116 nvidia-cublas-cu116 nvidia-cuda-sanitizer-api-cu116 nvidia-nvtx-cu116 nvidia-cuda-nvrtc-cu116 nvidia-npp-cu116 nvidia-cusparse-cu116 nvidia-cusolver-cu116 nvidia-curand-cu116 nvidia-cufft-cu116 nvidia-nvjpeg-cu116 --extra-index-url https://pypi.ngc.nvidia.com
如果需要安装其他版本的CUDA,则把最后的版本号修改一下即可。例如CUDA11.4的安装命令是
pip install nvidia-nvml-dev-cu114 nvidia-cuda-nvcc-cu114 nvidia-cuda-runtime-cu114 nvidia-cuda-cupti-cu114 nvidia-cublas-cu114 nvidia-cuda-sanitizer-api-cu114 nvidia-nvtx-cu114 nvidia-cuda-nvrtc-cu114 nvidia-npp-cu114 nvidia-cusparse-cu114 nvidia-cusolver-cu114 nvidia-curand-cu114 nvidia-cufft-cu114 nvidia-nvjpeg-cu114 --extra-index-url https://pypi.ngc.nvidia.com
但是在指定英伟达pip源https://pypi.ngc.nvidia.com的情况下,通过pip安装似乎安装不了最新版本的CUDA。截止到2024.6.27,我发现能够安装的只有CUDA11.7及以下版本,CUDA11.8和CUDA12.X都会提示不存在。推荐大家通过Anaconda配置多版本CUDA