Bootstrap

pytorch错误: 找不到指定的模块 Error loading “torch_python.dll“ or one of its dependencies

省流:python(3.12.7) 和 pytorch(2.4.0)版本不配套

问题

起因是看到了这本书《Build a Large Language Model (From Scratch) 》,是2024年9月新出的, 作者  Sebastian Raschka,想要按照作者给出的步骤来手搓一个大语言模型,以便后面拿出来吹牛。

作者在书中写道:

Therefore, when installing PyTorch, it’s advisable to use a version of Python that is one or two releases older. For instance, if the latest version of Python is 3.13, using Python 3.11 or 3.12 is recommended.

。。。。

I use PyTorch 2.4.0 for the examples, so I recommend that you use the following command to install the exact version to guarantee compatibility with this book:

pip install torch==2.4.0

为了防止和作者环境不一致,遇到一堆奇怪的问题,需要安装pytorch的2.4.0版本,但作者坑就坑在这里,没说自己用的哪个python版本,只是推荐3.11和3.12。

秉着[装新不装旧]的原则,上python官网找了个 3.12.7版本(win10 64位)来安装。然后用pip安装pytorch 2.4.0。看起来很顺利,但用起来就出问题了:

【OSError: [WinError 126] 找不到指定的模块。 Error loading "D:\Python3127\Lib\site-packages\torch\lib\torch_python.dll" or one of its dependencies.】


C:\>python
Python 3.12.7 (tags/v3.12.7:0b05ead, Oct  1 2024, 03:06:41) [MSC v.1941 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "D:\Python3127\Lib\site-packages\torch\__init__.py", line 148, in <module>
    raise err
OSError: [WinError 126] 找不到指定的模块。 Error loading "D:\Python3127\Lib\site-packages\torch\lib\torch_python.dll" or one of its dependencies.
>>>

进入这个目录,发现 torch_python.dll 文件其实存在。那就上网找找解决方案。

一搜发现各种说法都有,比如python和pytorch版本不匹配,或者没安装c++库之类的。

我的想法是,既然作者都这样说了,应该不存在版本不匹配的问题。而且网上所说不匹配的版本,都是比较老的python和pytorch版本,估计不太可能是不匹配。

尝试1

继续翻找,发现官网有个21年的帖子 (https://github.com/pytorch/pytorch/issues/66988)好像比较贴近:

【提问者】import torch: Error loading "XXXX\torch_python.dll" or one of its dependencies. 

  • PyTorch Version: 1.8.1
  • Python version: 3.6.0

【回答者】 could you use https://github.com/lucasg/Dependencies to check which dependencies are missing?

【提问者】Thanks for your reply, it seems to be the version of python. I upgrade it and it is solved.

回答者给了个工具,好像能够定位具体问题所在。提问者说最后升级了python版本解决,也不知道过程中有没有使用这个工具。

于是吭哧吭哧去下载了这个 Dependencies 工具,但悲催的是比较愚钝,完全没有windows调试经验,遂放弃。

尝试2

又翻到一篇这个帖子(Cannot import torch on windows (dll problem) - PyTorch Forums),虽然问题现象有区别,但答复者给出了另一个工具:

Do you have visual studio ? If so:

跳转到这个工具的首页(https://github.com/peterjc123/pytorch_dll_load_smoketests),有如下内容:

The general process to report a DLL load failure is listed below.

  1. Install Debugging Tools on Windows Install WinDbg - Windows drivers | Microsoft Learn
  2. Open a Powershell / CMD with admin rights and type in the following commands
    gflags /i python.exe +sls
    cdb -o -c "~*g; q" python.exe -c "import torch"
    gflags /i python.exe -sls

看起来好像能用。于是去微软官网下载windbg,官网给出三种方式,一是直接下载,结果点击后直接403,坑。二是用微软的程序包管理器下载,三是在应用商店下载。没用过方式二,选择了方式三。

windbg安装完成后,执行 gflags报错,说没有这个程序。那估计是没加入路径。又想办法进入应用商店的安装路径WindowsApps下,找半天,都没有gflags.exe这个文件,为啥呢?不知道。遂放弃。

尝试3

在这篇帖子(https://blog.csdn.net/zhangle416520/article/details/140735371)内发现一张图,是python 和 pytorch的版本对应关系图,但只到2.3版本,缺少2.4版本的。也不知道他的图是哪里获取的。

还有另一篇帖子(how to find what is the latest version of python that pytorch - Stack Overflow),里面提供了两个思路,一是通过查找github issue来判断pytorch是否支持新版本的python:

Pytorch supports Python 3.10.

Python 3.11 isn't fully supported yet.

这个帖子是2023年初的,当时说3.11还没支持。但如果在issue中搜索3.12,会得到已经支持的说明。所以应该不是版本配套问题?

另一个思路是:

You can always check torch archive or torch nightly to see if your desired version is supported.

根据这个思路,进入 download.pytorch.org/whl/torch/,可以看到:

也说明这个版本应该是能配套的。

尝试4

目前看来不是版本配套问题,但又不会、也没法做windows调试,既然没路,那就随便试试吧。

把pytroch2.4.0给卸了,直接安装最新版的:

c:\>pip install torch
Collecting torch
  Downloading torch-2.5.1-cp312-cp312-win_amd64.whl.metadata (28 kB)
。。。。
Downloading torch-2.5.1-cp312-cp312-win_amd64.whl (203.0 MB)
   ---------------------------------------- 203.0/203.0 MB 591.3 kB/s eta 0:00:00
。。。。

然后再试试 import torch,竟然就成功了!!!!!

所以根本还是版本配套问题。早知道在Linux上搞估计就没这个问题了。

经过这一番折腾,也懒得将python降级,来匹配作者要求的pytorch 2.4.0版本。如果后面有不兼容问题再说。

恨这个作者,一句话浪费我半天时间。。。

;