Preliminary
首先搞清楚一些关系:
- cuda & nvcc
nvcc是CUDA编译器,它是CUDA工具链的一部分。CUDA编译器是用于将CUDA代码编译为能够在NVIDIA
GPU上运行的可执行代码的工具。
查看cuda版本:
nvcc -V
2.cuda & cuda tookit:
conda install cuda:
这个命令通常用于安装完整的 CUDA 工具包,包括所有与 CUDA 相关的库和工具。这个工具包包括 CUDA
驱动程序、编译器(nvcc)、性能分析工具、文档以及其他开发工具。它适合需要完整 CUDA 开发环境的用户,特别是需要编译 CUDA
代码的情况。 该安装包会占用较大的存储空间,因为它包含了完整的开发和运行环境。
conda install cudatoolkit:
这个命令主要安装 CUDA 运行时库(runtime libraries),而不包括编译器和其他开发工具。它主要用于运行基于 CUDA
的应用程序,而不是开发新的 CUDA 应用程序。 这个安装包的体积相对较小,因为它只包含了运行时所需的库,适合那些只需要在环境中运行
CUDA 应用程序的用户。 总结来说,如果你只是需要运行依赖 CUDA 的应用程序,使用 conda install cudatoolkit
就足够了;如果你需要开发和编译 CUDA 应用程序,那么你需要使用 conda install cuda。
- 使用nvidia-smi,查看右上角cuda version,此为推荐安装的最高cuda版本。
服务器升级cuda的两种途径(我用过的):
1. conda 虚拟环境安装
conda 安装的命令:https://docs.nvidia.com/cuda/cuda-installation-guide-linux/#conda-installation
上面网页的第九章:conda-installation
常见问题:nvcc未随CUDA Toolkit一起升级
在创建虚拟环境并使用conda install
命令安装CUDA Toolkit时,很多人遇到一个常见问题:安装CUDA Toolkit后,nvcc
(CUDA编译器驱动程序)似乎没有随之更新。这通常是由于nvcc
依旧指向base环境中的路径,导致使用nvcc -V
命令查看CUDA版本时,显示的仍然是旧版本。
错误示例
假设我们在虚拟环境中运行以下命令:
conda create -n myenv python=3.8
conda activate myenv
conda install cudatoolkit=11.2 #(这个未必准确,要按版本到官网找相关代码)
然后我们查看nvcc
版本:
nvcc -V
结果发现nvcc
版本没有改变。这是因为conda install cudatoolkit
命令只安装了CUDA库,而没有安装nvcc
编译器。
正确的升级方法
为了解决上述问题,我们需要确保在虚拟环境中安装完整的CUDA,包括nvcc
。正确的命令应该是:
conda create -n myenv python=3.8
conda activate myenv
conda install cuda=11.2 #(这个未必准确,要按版本到官网找相关代码)
这样可以确保nvcc
和CUDA库都正确安装在虚拟环境中。
再次查看nvcc
版本,这时显示的CUDA版本应该与我们安装的版本一致。
2. nvidia官网 .run下载安装
有的时候想要安装低版本的cuda,conda没有现有的链接。这个时候推荐到官网安装.run文件。
到官网,查询对应的cuda版本,使用官网给出的wget下载,使用sh运行安装程序。官网给出的下载代码有sudo,可以把开头的sudo去掉。
官网链接:https://developer.nvidia.com/cuda-toolkit-archive
运行.run之后,首先accept协议,然后会跳转到选择安装文件。显示的图[2]应该如下:
一般不推荐安装多个驱动,取消安装drive。
在option中选择更改安装路径:Change Tookit Install Path
,然后更改到自己的用户文件夹下(最好新建一个文件夹存放)。
默认路径装到/usr下,假如没有sudo权限,会显示Permission Denied。
Optional[2]:
安装好后就可以安装cudnn
cuDNN Archive | NVIDIA Developer
选择对应版本,建议安装后缀为tgz的
然后解压,复制一些文件,记得把路径改成你自己的
tar -zxvf cudnn-10.0-linux-x64-v7.6.4.38.tgz cp cuda/include/cudnn.h
/home/wanggexuan/cuda-10.0/include/ cp cuda/lib64/libcudnn*
/home/wanggexuan/cuda-10.0/lib64 chmod a+r cuda/include/cudnn.h
cuda/lib64/libcudnn*
最后,配置cuda环境变量
先更新当前 Bash 会话环境的命令:
source .bashrc
将cuda加入到环境变量中去,记得修改路径:
export PATH="$PATH:/home/wgx/cuda-10.0/bin"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/home/wgx/cuda-10.0/lib64/"
export LIBRARY_PATH="$LIBRARY_PATH:/home/wgx/cuda-10.0/lib64"
验证路径和环境变量
如果在升级后仍然遇到问题,可以检查以下几点:
1.检查nvcc路径:
which nvcc
确保nvcc指向虚拟环境中的路径。
2.检查CUDA路径:
echo $PATH
echo $LD_LIBRARY_PATH
echo $CUDA_HOME
确保环境变量CUDA_HOME设置为虚拟环境中的CUDA路径,而不是base环境中的路径。
3.检查环境变量:
env | grep CUDA
查看所有与CUDA相关的环境变量,确保它们指向正确的路径。
通过以上方法,可以确保在虚拟环境中正确升级和配置CUDA版本,从而避免由于路径问题导致的编译和运行错误。
参考链接:
【1】https://blog.csdn.net/qq_41094058/article/details/116207333
【2】https://blog.csdn.net/weixin_45944960/article/details/130000445