1、报错情况说明

笔者在复现代码的时候,遇到报错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 <module>
    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 <module>
    import torchaudio
  File "C:\Users\24061\anaconda3\envs\emopianew\lib\site-packages\torchaudio\__init__.py", line 1, in <module>
    from torchaudio import _extension  # noqa: F401
  File "C:\Users\24061\anaconda3\envs\emopianew\lib\site-packages\torchaudio\_extension.py", line 67, in <module>
    _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] 找不到指定的程序。

在这里插入图片描述

2、错误分析

查阅了很多资料,所有报错指南均指向一个原因:存在包的版本不匹配问题!

从报错信息可以看到,在import torchaudio后面引发了一系列错误,根源就在torchaudio这里。

初步判断,是由于torchtorchaudio版本不匹配导致的(事实证明,这个判断是正确的,我真聪明!)。

于是,开始debug之旅!(长路漫漫,过程太心酸了,以下步骤是笔者试错多次,最终总结的正确操作指南。)

3、错误解决(重装torch、torchvision、torchaudio的心酸之旅)

前提说明

笔者所用系统为Windows,本机已安装cudacudnn,下文为gpu版本的torchtorchvisiontorchaudio安装示例。

因为笔者本机有显卡,型号为NVIDIA GeForce GTX 1080 Ti,所以想安装gpu版本的,后续跑代码更方便嘛!显卡截图如下:
在这里插入图片描述


开始安装

安装过pytorch的朋友大概也知道,一般是去pytorch官网,根据推荐,然后用condapip进行安装。但是笔者用官网所给的链接进行下载时,一直报错(莫名的原因),于是此处选择离线下载的方式进行安装。

(1)第一步:查看cuda版本号

①查看cuda版本

笔者的cuda版本是10.2
查看cuda版本的方式为:命令行输入nvcc -Vnvcc --version
在这里插入图片描述

(2)下载相应版本的whl文件

离线下载网址:https://download.pytorch.org/whl/torch_stable.html
该网站中,可以找到相应版本的whl文件进行下载。具体怎么选择,听笔者继续讲哈。

①下载torch

gpu版本的以cu开头,cu102表示cuda版本为10.2torch-1.10.1表示torch版本为1.10.1cp38表示python版本为3.8win表示适用于windows系统amd64表示64位系统

在选择torch版本时,只要保证cu和本机已安装的cuda对应,python版本与win/linux系均与环境匹配即可,然后在满足条件的torch-1.10.0torch-1.10.1torch-1.10.2等里面随便选一个即可。

此处笔者选择cu102torch-1.10.2版本,根据所用的环境,选择python3.8的windows版本:
在这里插入图片描述

②下载torchvision

搜索资料,找到一篇帮助笔者解决问题的帖子:PyTorch中torch、torchvision、torchaudio版本对应关系
这篇帖子中,详细列出了torch、torchvision、torchaudio各个版本的对应关系。

根据帖子中所列的,可以找到与已下载的torch相匹配的torchvisiontorchaudio。然后来到离线网站上进行版本选择与下载(依旧是控制cucp系统三个要素即可,只要这三个条件与本机相符,torchvision的具体版本应该下载哪个,根据自己的心情决定):
在这里插入图片描述

③下载torchaudio

同样的方法下载torchaudio
在这里插入图片描述

(3)安装whl

注意:torch要最后装!torch要最后装!torch要最后装!

为什么一定要提前强调这句呢?因为笔者安装时踩坑了,当安装完torch,然后安装torchvision时,系统竟然在自动下载cpu版本的torch!好家伙,直接把笔者已安装的gpu版本的torch覆盖掉了。上图说明:(它竟然提示:成功卸载了torch-1.10.0)呵呵,一整个大无语。
在这里插入图片描述

所以!安装步骤应该为:安装torchvision安装torchaudio安装torch

①将下载好的whl文件存放到项目文件夹下

笔者存放的位置为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。然后如下图所示,查看是否安装成功:

  • 正确示范:我们可以看到相应的版本均是包含cugpu版本。输入torch.cuda.is_available()可以看到True,表示gpu可以用了。
    在这里插入图片描述
    介绍一些用于查看可用cuda的指令:
    请添加图片描述
  • 错误示范
    跟着笔者操作到这里的小伙伴,基本上都安装成功了。但是呢,保不齐有些小伙伴操作失误,亦或者是系统各种莫名的bug,导致出现以下错误,看图:
    在这里插入图片描述
    明晃晃的三个字:cpu!你中招了!别哭别哭,你的这些磨难笔者都一一经历过,正所谓:满纸荒唐言,一把辛酸泪。都云作者痴,谁解其中味!debug的辛酸,经历过的人才懂。
    出现这种情况,只需要pip uninstall 包名卸载掉,然后返回上面步骤,pip install whl文件重新装包就行。

回归本文开头提到的报错问题:OSError: [WinError 127] 找不到指定的程序。,至此就算彻底解决了。重新运行程序,也没有再出现这个错误了。

(本文完)


感谢以下帖子对笔者的帮助:
pytorch gpu安装教程(Perfect完美系列)

torch.cuda.is_available()返回false——解决办法

pytorch中文文档:
https://pytorch-cn.readthedocs.io/zh/latest/

torchaudio文档:https://pytorch.org/audio/stable/sox_effects.html

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐