Python GPU3:Pycuda

Python GPU3:Pycuda

0. 准备

pycuda的安装环境很大程度上取决约显卡驱动本身是否能够安装成功,除了安装pycuda库本身之外,重点是需要确保如下的指令可以运行成功:

1. 安装

1.1 方法一

pip这种方法不推荐,会遇到种种环境问题或安装包问题,报错(原因是CUDA版本)
pip install pycuda

1.2 方法二

  1. 访问网址,下载
  1. 进入网站
notion image
  1. 下拉,找到适合自己Python解释器和CUDA的pycuda版本,我机器信息
      • CUDA11.4
      • python3.8
      • 64位
notion image
  1. 文件信息解释
  • pycuda‑2021.1+cuda114‑cp38‑cp38m‑win_amd64.whl
    • pycuda‑2021.1:表示pycuda版本是2021.1
    • cuda114:表示CUDA版本为11.4
    • cp38‑cp38m:Python解释器3.8
    • win_amd64.whl:64位
  1. 安装
将下载的pycuda‑2021.1+cuda114‑cp38‑cp38m‑win_amd64.whl文件复制到python安装路径的scripts文件夹下,我这里是D:\Python38\Scripts,切换到该目录下执行
# 安装 pip install pycuda-2021.1+cuda114-cp38-cp38-win_amd64.whl # 卸载 pip uninstall pycuda-2021.1+cuda114-cp38-cp38-win_amd64.whl
notion image
报了一个第三方库的版本错误,需要typing-extensions<3.8.0,>=3.7.0,降低版本
pip install -U typing-extensions==3.7.4
notion image
pytools版本问题,降低pytools
pip install -U pytools==2021.2.7

2. 测试

import pycuda.driver as cuda import pycuda.autoinit from pycuda.compiler import SourceModule import numpy # 创建了一个随机数组成的4*4大小的数组a a = numpy.random.randn(4, 4) # 创建的这个数组a包含的是双精度浮点数,但大多数常用的NVIDIA显卡只支持单精度浮点数,所以需要转换一下类型 a = a.astype(numpy.float32) # 已有的数据转移过去,还要设定一个目的地,所以我们要在显卡中分配一段显存 a_gpu = cuda.mem_alloc(a.nbytes) # 生成的数组a转移到GPU cuda.memcpy_htod(a_gpu, a) # 编译代码,并且加载到显卡中,把显存中的数组a_gpu作为参数传过去,同时设定块大小为4x4: mod = SourceModule(""" __global__ void doublify(float *a) { int idx = threadIdx.x + threadIdx.y*4; a[idx] *= 2; } """) # 使用pycuda.driver.Function,然后调用此引用 func = mod.get_function("doublify") # 显存中的数组a_gpu作为参数传过去,同时设定块大小为4x4 func(a_gpu, block=(4, 4, 1)) # 把经过运算处理过的数据从GPU取回,并且将它和原始数组a一同显示出来对比 a_doubled = numpy.empty_like(a) cuda.memcpy_dtoh(a_doubled, a_gpu) print(a_doubled) print(a)
启动报错numpy版本的问题
notion image
pip install -U numpy
再启动,报错el.exe错误,原因是没找到C++的编译器
notion image
解决方法:安装C++编译器,安装Visual Studio,并设置系统变量。

2.1 下载Visual Studio 2022

📢📢📢GPU版本支持Visual Studio版本有限制,我的CUDA11.4只支持到2019
notion image
运行下载文件,这个最好留一下,后续安装其他功能可以使用。
notion image
选择C++桌面开发,安装。(想一下为了使用el.exe这个文件,我要下载整个C++开发模块😅,当然也可以只下载单个组件,但是对C++不太熟🤣)
notion image
安装好找到cl.exe对应目录:C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.31.31103\bin\Hostx64\x64
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.31.31103\bin\Hostx64\x64
notion image
添加系统变量
notion image
重启vscode,运行再次报错,我的GPU版本只支持2017-2019😰
notion image
卸载Visual Studio 2022😅

2.2 下载Visual Studio 2019

下载Visual Studio 2019 Community 社区版(免费版)
notion image
注意找到cl.exe对应目录的路径C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64
notion image

环境变量设置

将2.1中配置的Visual Studio 2022的cl.exe 的路径改为2019的cl.exe 的路径
notion image
重启vscode,运行程序,成功显示数据,终于成功了🥳
notion image
 
 

参考