记一次win10安装cupy的失败经历(附 cupy与numpy对比)

博主在尝试升级CUDA至11.5版本后,安装CuPy遇到一系列问题,包括模块找不到、C++ Build Tools需求等。最终发现CuPy与CUDA11.5版本不兼容,回退到CUDA10.2解决问题。文章强调了正确选择CUDA版本的重要性,并展示了CuPy与NumPy在不同数据规模下的性能比较。
摘要由CSDN通过智能技术生成

win10 python38安装cupy中踩的n多个坑

问题的根源应该是我在装cupy之前把Nvidia cuda更新到了最新的11.5版本,原本是10.2版本。中间经历真是太狗血了,花了将近一天时间来搞,当然最后终于好了。应该是win10还不能用cupy-cuda115

记录一下中间大概经历的事情吧,也算是个教训了,中间瞎几把拐弯抹角搞了好多东西,也看了很多的博客跟官方文档,但是都没啥用

中间因为一直在摸索,没想着会整这么久,绕这么多弯,很多就没有截图记录

问题的开始

想着先把nvidia的cuda (Compute Unified Device Architecture) 升级到最新的吧,这样也能安装最新的cupy了,于是很多问题就来了......

  • 在cmd中输入nvidia-smi命令,如下,cuda升级到了11.5
    cuda v11.5
  • 然后利用pip下载对应的cupy版本:cupy-cuda115:
pip3.8 install cupy-cuda115
# 查看安装情况
pip3.8 list | findstr "cupy"
# 输出cupy-cuda115,成功安装

然后问题来了,在import cupy之后显示如下:
在这里插入图片描述


问题越来越多

之后看了一些博客,索性不指定11.5版本了,直接:

pip3.8 install cupy

但是输出了一堆error,部分如下:
cupy error
其中一个error显示为:

error: Microsoft Visual C++ 14.2 or greater is required. 
Get it with "Microsoft C++ Build Tools": 
https://visualstudio.microsoft.com/visual-cpp-build-tools/

很明显,需要去下载Microsoft Visual C++ 14.2 or greater
然后就去官方网站下载了,还参考了官方文档里的这个QA:
error: Microsoft Visual C++ 14.0 or greater is required. Get it with “Microsoft C++ Build Tools”: https://visualstudio.microsoft.com/visual-cpp-build-tools/

然后就是一个漫长的过程,下载+安装
成功之后再去重新:

pip3.8 install cupy

结果他喵的还是没有卵用,跟上面的error输出的一样。。。

问题继续,改变解决角度

之后开始从 ModuleNotFoundError: No module named 'cupy' 这个问题出发,找到一些博客
其一如下:
ModuleNotFoundError: No module named ‘cupy’, cupy 安装出错
然而我的问题还是毫发无损…

在评论区看到一篇,如下:
Pycharm出现ImportError或DLL load failed(CuPy is not correctly installed)
说是改环境变量,往系统变量的path里加几个路径
然而我的问题依旧毫发无损…


有点感觉了

Pycharm出现ImportError或DLL load failed(CuPy is not correctly installed)
这篇的评论区,有句话是:
在这里插入图片描述
有点东西了,可能是cuda115这个最新版本还不能用?我不清楚,反正我思路就变成:把cuda版本降回来,到v10.2
CUDA Toolkit 10.2 Download
同时看博客,也需要搞一下cudnn:
cuDNN Archive(选个适用于cuda10.2的)
最后整好之后,看一下环境变量里面系统那栏有没有CUDA_PATH和CUDA_PATH_V10_2这两个变量
利用命令:

nvcc -V # or: nvcc --version

v10.2回来了!


看到了曙光

最后:

pip3.8 uninstall cupy-cuda115
pip3.8 install cupy-cuda102

此时再import cupy,它出现了:
nice!

终于好了!其实是自己作,本来一开始直接用cuda v10.2应该就没这么多屁事儿了。。。
不过话说回来,也学到不少东西没写出来,主要写写教训,就mark一下吧


附:cupy numpy对比

硬件:
CPU:AMD 锐龙4600H;
GPU:Nvidia GTX1650,4G独显

import numpy as np
import cupy as cp
import time

start = time.time()
a = np.ones(10**7)
end = time.time()

start_2 = time.time()
b = cp.ones(10**7)
end_2 = time.time()

# CPU
interval_1 = end - start
# GPU
interval_2 = end_2 - start_2
print(interval_1, interval_2, interval_2 / interval_1, sep='\n')

# 结果如下:
0.013987541198730469
1.559950351715088
111.52427217563238
# 发现在1000万数据规模时,创建一个(1, 10**7)的数组,numpy速度远快于cupy,是cupy的100多倍
# 将创建的规模改为1亿,即10**8之后,结果如下:
0.18699407577514648
1.5673096179962158
8.381600387601841
# 可见此时numpy的速度仅为cupy的8倍左右,在数据规模大于1000万之后,随着数据规模的增加,cupy的速度提高远大于numpy
# 因为本机GPU只有4G,由于显存容量的限制,最后测试一下4*10**8规模
# 结果如下:
0.6669847965240479
1.7918219566345215
2.6864509745536878
# 此时numpy的速度仅为cupy的2倍左右,已经没有了数量级的差距

可见,如果GPU的显存容量足够大的话,那么在数据量达到亿规模之后,cupy的优势会越来越明显

  • 12
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值