无Anaconda环境下Jupyter Notebook中CuPy导入报错:DLL加载失败(.py文件可正常运行)
我之前在非Anaconda的Windows环境里也碰到过一模一样的问题——普通终端用CuPy完全没问题,一到Jupyter就报ImportError: DLL load failed while importing nvrtc,折腾了好一阵,总结了几个不需要依赖Anaconda的有效方案:
方案1:在Notebook开头手动强制添加CUDA路径
Jupyter的环境变量继承经常会出问题,哪怕系统PATH里已经加了CUDA的bin目录,它可能还是没加载到或者加载顺序不对。你可以在Notebook的第一个代码单元格里先执行这段代码:
import os # 替换成你的CUDA版本路径 cuda_bin_path = r"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.6\bin" # 把CUDA的bin目录放到PATH最前面,确保优先加载正确的DLL os.environ['PATH'] = f"{cuda_bin_path};{os.environ['PATH']}" # 现在再导入CuPy import cupy
这样每次打开Notebook都先手动修正PATH,就能绕开Jupyter的环境变量问题。
方案2:修改Jupyter配置文件,永久设置环境变量
如果不想每次都手动加路径,可以修改Jupyter的启动配置,让它每次启动都自动加载正确的PATH:
- 打开命令行终端,执行
jupyter notebook --generate-config生成配置文件,终端会告诉你配置文件的保存路径(一般是C:\Users\<你的用户名>\.jupyter\jupyter_notebook_config.py) - 用文本编辑器打开这个配置文件,找到
c.NotebookApp.env这一行(可能被注释掉了,前面有#),取消注释后改成:
import os cuda_bin_path = r"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.6\bin" c.NotebookApp.env = {'PATH': f"{cuda_bin_path};{os.environ['PATH']}"}
- 保存配置文件,重启Jupyter Notebook,之后每次启动都会自动把CUDA的bin目录放到PATH最前面,从根源解决环境变量问题。
方案3:排查并解决DLL冲突
有时候系统里可能存在其他版本的nvrtc.dll(比如某些NVIDIA软件、游戏或者其他Python库自带的旧版本),Jupyter启动时优先加载了错误的版本。你可以用微软的Process Explorer工具来排查:
- 下载并打开Process Explorer,启动Jupyter Notebook后,在工具里搜索
nvrtc.dll - 查看这个DLL的加载路径,如果不是来自你的
v11.6\bin目录,找到那个冲突的DLL所在的文件夹 - 把这个冲突文件夹从系统的
PATH环境变量里移除,或者调整顺序让CUDA的bin目录排在它前面
方案4:重新安装对应CUDA版本的CuPy
确保CuPy的版本和你的CUDA版本完全匹配,有时候pip默认安装的CuPy可能适配的是其他CUDA版本,导致DLL不兼容。执行下面的命令重新安装:
pip install cupy-cuda116 --force-reinstall
这里的cupy-cuda116对应你的CUDA 11.6版本,如果你的CUDA是其他版本,换成对应的后缀(比如cupy-cuda117对应11.7)。
之前你用pip install -U notebook临时有效,应该是更新后Jupyter的环境变量加载逻辑临时被重置了,但重启后又回到了原来的状态,上面的方案都是从环境变量或版本匹配的根源解决问题,适合教学演示的长期使用。
内容的提问来源于stack exchange,提问作者ImARandom

