前言

为了运转一个 Tensorflow1.6.0 的项目,CPU 跑了三个多小时才完成一个 epoch,还得用 GPU。但这个版别的 TF 只能在 10 以下的 CUDA 平台,但是曾经的 Pytorch 也要持续啊。所以需求在本地 Windows 下装置多个版别 CUDA,其实有两种办法让 CUDA 共存。一种是英伟达的东西包装置,还一种是 CUDA 的动态链接库通过 conda 装置。

由所以 Windows,装备 CUDA 多版别环境变量可能还会呈现 “此环境变量太大,此对话框允许将值设置为最长 2047 个字符” 和装置后运转项目 “If you want to see a list of allocated tensors when OOM happens, add report_tensor_allocations_upon_oom to RunOptions for current allocation info” 等报错,接下来就开端一一介绍了。

Windows10 下 CUDA 新旧多版别共存

装置

动态链接库办法

比较英伟达官方提供的 CUDA Toolkit,这种办法显得特别简便。由于前者是一个完好的东西装置包,其中还提供了英伟达驱动程序(可以不勾选)和开发 CUDA 程序的东西。而对于运用深度学习结构的话,练习运用 GPU 确实只需求运用 CUDA 的动态链接库就可以,而且只需求用 conda 装置就可以。

创立环境并激活

这儿仍是用 conda 创立一个新环境专门用于一个版别的 CUDA,要几个就创立几个,然后激活并进入,当然也要看看当时 conda 支撑哪些 cuda 和 cudnn。

conda create -n tensorflow-cu python=3.6
conda activate tensorflow-cu

检查支撑的 cuda

conda search cudatoolkit --info

Windows10 下 CUDA 新旧多版别共存

检查支撑的 cudnn

Windows10 下 CUDA 新旧多版别共存

装置 cuda 和 cudnn

conda install cudatoolkit=9.01
conda install cudnn=7.1.4

Windows10 下 CUDA 新旧多版别共存

东西包办法

这种办法便是先清晰自己需求装置的版别,然后去英伟达官网下载装置包。我上面也有文章介绍,不过在曾经基础上再加一低版别,需求注意的便是不要勾选驱动程序,然后切换版别要装备环境变量。

流程装置

Windows10 下 CUDA 新旧多版别共存

牢记只勾选 CUDA,牢记

Windows10 下 CUDA 新旧多版别共存

从头选择方位

Windows10 下 CUDA 新旧多版别共存

装置完毕后,他会主动在环境变量里新增 CUDA_PATH_V9_0 和 NVCUDASAMPLES9_0_ROOT,而且 CUDA_PATH 和 NVCUDASAMPLES 也会替换成最终装置的版别,但当时依然仍是之前的 CUDA11,这个时候还要去 Path 里设置一下。

Windows10 下 CUDA 新旧多版别共存

要让版别切换到 v9,需求手动增加 CUDA9 的 development 下 bin 和 libnvvp,并放 v11 前面,但是保存时报 “此环境变量太大”。这个是由于 Patch 变量的值只要 2047 字符大小,处理办法可以修改注册表,在 Path 里删除没用的环境变量和用外边的变量做一个引进。便是 bin 和 libvvp 都是 CUDA9 下,只需求引进这个就可以节省更多字符占用了。

Windows10 下 CUDA 新旧多版别共存

%CUDA_PATH_V11_4%bin
%CUDA_PATH_V11_4%libnvvp

虽然可以保存了,但是想切换 CUDA 版别要再次打开 Path,发现这个弹窗变成了一行,而不是像之前那样按变量展开。这是由于刚刚为了让 V9 版别在前面,我把他顶到了最上面,而最顶上如果有变量办法的引进,Path 就会变成一行,我们只需求把一个其他绝对方位的变量放在顶部就可以处理了。

其他

当切换后装置 tensorflow-gpu 开端练习时,呈现 “Hint: If you want to see a list of allocated tensors when OOM happens, add report_tensor_allocations_upon_oom to RunOptions for current allocation info”,由于当时显卡 GTX 750Ti,显存太小,可以将批次 batch_size 调小处理。

Windows10 下 CUDA 新旧多版别共存