今晚,我安装好了CUDA+PyCUDA+Anaconda

整理之前的笔记

11

前言

未来一段时间要用python在GPU上写一些代码,需要安装python+CUDA。
但是却在环境问题上耽误了大概两周的样子,修了又修,接近自闭。
今晚终于在Jing老师和LCX的帮助下解决了。
怎么想都想不到竟然是分号的问题?!
本文安装步骤来自LCX的安装文档,再加上Jing老师的指导,笔者主要是在记录详细过程。

安装

Anaconda-python

预先安装的python就不要了,用anaconda提供的python。
anaconda会提供一些常用的工具包,在它下面运行python会比较方便(LCX语)。
从官网下载安装包默认安装即可,建议在安装时将它添加到环境变量中方便使用。

22

然后在anaconda prompt中安装pycuda
conda install pycuda 或者 pip install pycuda

Visual Studio

不必用VS编写代码,这里用的是它的VC++的一些发行版本。
笔者在头铁尝试VS2017碰壁后灰溜溜回到VS2015。
虽然没有直接证据证明VS2017不行,但综合网上文章和朋友的经验,还是VS2015稳一点。
当然,有可能会用到VC2015的一个修复版本来解决文件缺失的问题。
https://www.microsoft.com/en-us/download/details.aspx?id=48145

CUDA Toolkit和CUDNN

CUDNN https://developer.nvidia.com/cudnn
先下载好,后面会用到
CUDA Toolkit https://developer.nvidia.com/cuda-downloads
注意下载的版本,笔者使用的是v10.2
组件按需要选择,我用这四个就可以了。

CUDA会自动配置一些环境变量,还有一些需要手动配置。
环境变量中添加:

CUDA_LIB_PATH = %CUDA_PATH%\lib\x64 
CUDA_BIN_PATH = %CUDA_PATH%\bin 
CUDA_SDK_BIN_PATH = %CUDA_SDK_PATH%\bin\win64 
CUDA_SDK_LIB_PATH = %CUDA_SDK_PATH%\common\lib\x64 

Path中添加:

C:\Program Files\NVIDIA Corporation\NVSMI
C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\lib
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\include
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\bin
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\libnvvp

当然,需要添加的路径取决于安装的组件和安装目录,别直接复制。

将CUDNN下的bin include lib三个文件夹添加到
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2下面的bin include lib中,
实际上只是将CUDNN的三个文件添加到目录下。

验证与报错解决

是的,本文的主要内容是解决一些神奇的报错和环境问题。
毕竟笔者两周的自闭时光不能毫无产出啊。

nvcc -V

这只是最基本的检查,有结果也不能说明安装成功,出错可能还更麻烦。

bandwidthTest.exe和deviceQuery.exe

以上两个程序在目录C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\extras\demo_suite中。

如果遇到报错,有return Error 35,driver insuffcient之类字样的报错信息,那可能是驱动版本太低了,需要更新显卡驱动到最新。

Anaconda

也许你又和我一样,在用anaconda安装pycuda时就看到这样的提示。
虽然conda install pycuda没有成功,但是pip install pycuda解决,仿佛问题不大。
然而,这个却是笔者环境问题的关键。

[superuser.com][10]上的回答没有参考价值,并不是双引号的原因。
笔者猜测可能是anaconda在解析Path环境变量时会每读一行就添加一个分号来分隔一行环境变量值。
要是你像我一样行末本来就有分号就麻烦了,需要删除每一行行末的分号。
笔者甚至把Path中的每一个路径单独作一行才解决这个问题。
如果解决,进入anaconda prompt时没有错误提示。

cl.exe

这时候可以尝试跑一条测试代码看看有没有成功使用到GPU。
遗憾的是又一次报错了,关于cl.exe,泪儿流下来。

这时候去 C:\Program Files (x86)\Microsoft Visual Studio v14.0\VC\bin\amd64,这里有一个cl.exe,把路径添加到Path中。
(注意要选amd64,它隔壁目录也有cl.exe,不要认为都可以)
在把 C:\Program Files (x86)\Microsoft Visual Studio v14.0\VC\bin也加进Path去。

corecrt.h和stddef.h缺失

再一次运行,又报错了,运行时提示No such file or directy。
添加C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt到Path中,可以先检查一下这个目录下有没有这两个文件。

结语

再一次感谢Jing老师的指导和LCX提供的安装文档,并且在这两周一直帮我想办法。

同时,本文的目录仅供参考,读者还是要以自己的安装目录为准。

如果玄学问题不断,而且又把安装目录指定为机械盘,可能是硬盘的错误需要重装。(虽然可能性极小)

环境的玄学问题还是要及时请教有经验的人士,避免自己无脑重装软件却丝毫没有触及核心问题。

Welcome to my other publishing channels