【环境】pytorch选择cuda的顺序【关于cudatoolkit和/usr/local/cuda】

本文详细解析了PyTorch在编译时查找CUDA的环境变量顺序,以及执行时动态库搜索路径,包括CUDA_HOME、cudatoolkit和conda的配置。了解这些有助于正确配置和编译使用不同版本的CUDA。
摘要由CSDN通过智能技术生成

简介

  • cuda:完整版的cuda
  • cuda动态链接库:阉割版的cuda,只有cuda运行时需要的动态链接库。
  • cudatoolkit:是conda提供的阉割版的cuda,只有cuda运行时需要的动态链接库。

pytorch选择cuda的顺序

  • 分为编译时的查找顺序和执行时的查找顺序
  • 编译时的查找顺序由 torch/utils/cpp_extension.py的_find_cuda_home()决定。
  • 执行的查找顺序由动态库的搜索路径决定

一、编译时的查找顺序

1、顺序总览

  • (1)环境变量CUDA_HOME 或 CUDA_PATH
  • (2)/usr/local/cuda
  • (3)which nvcc的上级上级目录(which nvcc 会在环境变量PATH中找)
  • (4)如果上述都不存在,则torch.utils.cpp_extension.CUDA_HOME为None,会使用conda安装的cudatoolkit,其路径为cudart 库文件目录的上级目录(此时可能是通过 conda 安装的 cudatoolkit,一般直接用 conda install cudatoolkit,就是在这里搜索到 cuda 库的)。

2、验证过程

验证过程可参考我的之前的文章一文讲清楚CUDA、CUDA toolkit、CUDNN、NVCC关系

3、编译pytorch时的使用过cuda版本

python -c "import torch;print(torch.version.cuda )"

pytorch可能不是在你的电脑上编译的,这个版本代表pytorch在编译时,使用过的cuda版本。
这时候,我们只在本地有相应版本的cuda动态链接库,就可以使用别人已经编译好的pytorch,非常方便。

4、当编译一个新程序,会使用的cuda版本

python -c "import torch.utils.cpp_extension; print(torch.utils.cpp_extension.CUDA_HOME)"

在很多时候,(比如安装apex,precious roipooling),我们需要使用cuda重新编译,这时候,我们需要的不仅仅是一个阉割版的cuda动态链接库,我们需要一个完整的cuda,以上的CUDA_HOME就是完整cuda的路径。

二、执行的查找顺序

1、执行的查找顺序由动态库的搜索路径决定,搜索so文件的顺序如下

  • (1)gcc编译时指定的运行时库路径,如-rpath
  • (2)LD_LIBRARY_PATH
  • (3)/etc/ld.so.cache
  • (4)/lib,/usr/lib等

2、conda的查找顺序

envname=my_env_pytorch17
objdump -x ~/miniconda3/envs/$envname/bin/python | grep RPATH
# out:
#   RPATH                $ORIGIN/../lib

可以看到,conda是通过(1)rpath的方式实现的,先去查找lib

ls ~/miniconda3/envs/$envname/lib/ | grep libcudart.so
# out:
# libcudart.so.10.2.89

可以看到,lib中包含一个libcudart.so.10.2.89,这就是安装的cudatoolkit,是10.2版本的。

  • 9
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值