笔者在复现代码的时候,遇到报错OSError: [WinError 127] 找不到指定的程序。
下方列出了报错信息与截图:
Traceback (most recent call last):
File "C:/Users/24061/Desktop/MERcode/EMOPIA_cls-main/emopia_retrain/audio_cls/train_test.py", line 13, in
from src.model.net import ShortChunkCNN_Res
File "C:\Users\24061\Desktop\MERcode\EMOPIA_cls-main\emopia_retrain\audio_cls\src\model\net.py", line 5, in
import torchaudio
File "C:\Users\24061\anaconda3\envs\emopianew\lib\site-packages\torchaudio\__init__.py", line 1, in
from torchaudio import _extension # noqa: F401
File "C:\Users\24061\anaconda3\envs\emopianew\lib\site-packages\torchaudio\_extension.py", line 67, in
_init_extension()
File "C:\Users\24061\anaconda3\envs\emopianew\lib\site-packages\torchaudio\_extension.py", line 61, in _init_extension
_load_lib("libtorchaudio")
File "C:\Users\24061\anaconda3\envs\emopianew\lib\site-packages\torchaudio\_extension.py", line 51, in _load_lib
torch.ops.load_library(path)
File "C:\Users\24061\anaconda3\envs\emopianew\lib\site-packages\torch\_ops.py", line 110, in load_library
ctypes.CDLL(path)
File "C:\Users\24061\anaconda3\envs\emopianew\lib\ctypes\__init__.py", line 381, in __init__
self._handle = _dlopen(self._name, mode)
OSError: [WinError 127] 找不到指定的程序。
查阅了很多资料,所有报错指南均指向一个原因:存在包的版本不匹配问题!
从报错信息可以看到,在import torchaudio
后面引发了一系列错误,根源就在torchaudio
这里。
初步判断,是由于torch
与torchaudio
版本不匹配导致的(事实证明,这个判断是正确的,我真聪明!)。
于是,开始debug之旅!(长路漫漫,过程太心酸了,以下步骤是笔者试错多次,最终总结的正确操作指南。)
笔者所用系统为Windows,本机已安装cuda和cudnn,下文为gpu版本的torch、torchvision、torchaudio安装示例。
因为笔者本机有显卡,型号为NVIDIA GeForce GTX 1080 Ti
,所以想安装gpu
版本的,后续跑代码更方便嘛!显卡截图如下:
安装过pytorch的朋友大概也知道,一般是去pytorch官网,根据推荐,然后用
conda
或pip
进行安装。但是笔者用官网所给的链接进行下载时,一直报错(莫名的原因),于是此处选择离线下载
的方式进行安装。
①查看cuda版本
whl
文件离线下载网址:https://download.pytorch.org/whl/torch_stable.html。
该网站中,可以找到相应版本的whl
文件进行下载。具体怎么选择,听笔者继续讲哈。
gpu版本的以cu
开头,cu102
表示cuda版本为10.2
, torch-1.10.1
表示torch版本为1.10.1
,cp38
表示python版本为3.8
,win
表示适用于windows系统
,amd64
表示64位系统
。
在选择torch
版本时,只要保证cu
和本机已安装的cuda
对应,python
版本与win/linux
系均与环境匹配即可,然后在满足条件的torch-1.10.0
、torch-1.10.1
、torch-1.10.2
等里面随便选一个即可。
搜索资料,找到一篇帮助笔者解决问题的帖子:PyTorch中torch、torchvision、torchaudio版本对应关系。
这篇帖子中,详细列出了torch、torchvision、torchaudio各个版本的对应关系。
根据帖子中所列的,可以找到与已下载的torch
相匹配的torchvision
和torchaudio
。然后来到离线网站上进行版本选择与下载(依旧是控制cu
、cp
、系统
三个要素即可,只要这三个条件与本机相符,torchvision的具体版本应该下载哪个,根据自己的心情决定):
注意:torch要最后装!torch要最后装!torch要最后装!
为什么一定要提前强调这句呢?因为笔者安装时踩坑了,当安装完
torch
,然后安装torchvision
时,系统竟然在自动下载cpu版本的torch
!好家伙,直接把笔者已安装的gpu版本的torch覆盖掉了。上图说明:(它竟然提示:成功卸载了torch-1.10.0)呵呵,一整个大无语。
所以!安装步骤应该为:安装torchvision
→安装torchaudio
→安装torch
。
笔者存放的位置为C:\Users\24061\anaconda3\envs\emopianew\Lib\site-packages
文件夹下。
激活环境
conda activate emopianew # 此处emopianew为笔者的项目的环境名
切换目录
cd C:\Users\24061\anaconda3\envs\emopianew\Lib\site-packages
然后pip install whl文件
安装torchvision
pip install torchvision-0.11.3+cu102-cp38-cp38-win_amd64.whl
注:如果这个过程中自动下载了
torch
,请用pip uninstall torch
命令将其删掉。因为它自动下载的是cpu版本的torch,没什么用。
安装torchaudio
pip install torchaudio-0.10.0+cu102-cp38-cp38-win_amd64.whl
安装torch
pip install torch-1.10.2+cu102-cp38-cp38-win_amd64.whl
安装完成后,在命令行中输入python
,启动python。然后如下图所示,查看是否安装成功:
cu
的gpu
版本。输入torch.cuda.is_available()
可以看到True
,表示gpu可以用了。cuda
的指令:cpu
!你中招了!别哭别哭,你的这些磨难笔者都一一经历过,正所谓:满纸荒唐言,一把辛酸泪。都云作者痴,谁解其中味!debug的辛酸,经历过的人才懂。pip uninstall 包名
卸载掉,然后返回上面步骤,pip install whl文件
重新装包就行。回归本文开头提到的报错问题:OSError: [WinError 127] 找不到指定的程序。
,至此就算彻底解决了。重新运行程序,也没有再出现这个错误了。
(本文完)
感谢以下帖子对笔者的帮助:
pytorch gpu安装教程(Perfect完美系列)
torch.cuda.is_available()返回false——解决办法