conda安装的cudatoolkit, cudnn与在主机上安装的cuda, cudnn有何关系?

conda安装的cudatoolkit, cudnn与在主机上安装的cuda, cudnn有何关系?

在conda创建的虚拟环境中安装tensorflow-gpu后,会自动安装cudatoolkit和cudnn。在这个虚拟环境中使用tensorflow时,如果涉及到GPU的计算,是不是会自动使用虚拟环境中安装的cudatoolkit和cudnn?与主机中安装的cuda及cudnn无关?

回答

anaconda 的 cudatoolkit 不包含完整安装cuda的全部文件,只是包含了用于 tensorflow,pytorch,xgboost 和 Cupy 等所需要的共享库文件。一般情况下会直接调用anaconda的cudatoolkit工具包。

具体而言

调用哪个 cuda 库要看生成 tensorflow / pytorch 库的时候,设置的链接库寻找目录,以 pytorch 为例,项目根目录下的 setup.py 中指定链接库的搜索目录,其中 cuda 的根目录 CUDA_HOME在 tool.setup_helpers.cuda 中有获取逻辑,大概过程是:

  1. 先取默认 cuda 安装目录 /usr/local/cuda
  2. 如默认目录不存在(例如安装原生 cuda 到其他自定义位置),那么搜索 nvcc 所在的目录
  3. 如果 nvcc 不存在,那么直接寻找 cudart 库文件目录(此时可能是通过 conda 安装的 cudatoolkit,一般直接用 conda install cudatoolkit,就是在这里搜索到 cuda 库的),库文件目录的上级目录就作为 CUDA_HOME
  4. 如果最终未能得到 CUDA_HOME,那么生成的 pytorch 将不使用 CUDA。

(以上过程的 pytorch 源码版本 '1.3.0')

详细的可去看 pytorch 源码。tensorflow 源码我没看过,不过思路应该差不多。

然后,通过 conda 安装 cudatoolkit 包含的库文件均在 miniconda3/lib 中可以找到(或者直接在 miniconda3 / pkgs / cudatoolkit-10.x.xxx /lib 中查看),

ls -al libcu*
ls -al libnpp*
ls -al libnv*

原生安装的cuda肯定是 conda-cudatoolkit 的超集,可以自己尝试这两种安装,然后肉眼比对,差别一目了然。再有不懂的,去 nvidia 官网看文档,慢慢的,就懂了。

最后,可以通过 ldd xx.so 直接查看依赖哪些库以及库的详细路径

你可能感兴趣的:(Ubuntu)