news 2026/9/16 2:17:00

解决 Fish Speech 在 PyTorch 2.10.0+cu130 中的 torchaudio.list_audio_backends AttributeError

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
解决 Fish Speech 在 PyTorch 2.10.0+cu130 中的 torchaudio.list_audio_backends AttributeError

解决 Fish Speech 在 PyTorch 2.10.0+cu130 中的torchaudio.list_audio_backendsAttributeError

https://github.com/fishaudio/fish-speech?tab=readme-ov-file

https://speech.fish.audio/install/#system-setup

https://docs.pytorch.ac.cn/audio/stable/generated/torchaudio.list_audio_backends.html

https://github.com/pytorch/audio/issues/3902


目录

解决 Fish Speech 在 PyTorch 2.10.0+cu130 中的 torchaudio.list_audio_backends AttributeError

问题背景

权威引用:为什么这个函数消失了?

解决方案一(降级 PyTorch)

解决方案二(无需降级 PyTorch)

1. 定位文件

2. 修改代码(约第 34 行)

3. 验证

技术细节:为什么选择 soundfile作为回退?

预防措施与给开发者的建议

1. 依赖锁定(Prevention)

2. 代码健壮性(Best Practice)

3. 环境诊断脚本

总结思考



问题背景

在 Windows 11 + RTX 3090 + CUDA 13.0 环境下,使用torch==2.10.0+cu130运行 Fish Speech 的 WebUI (python tools/run_webui.py) 时,程序在加载音频后端时崩溃,报错如下:

AttributeError: module 'torchaudio' has no attribute 'list_audio_backends'

根本原因torchaudio.list_audio_backends()函数在PyTorch 2.9.0 及更高版本中已被官方彻底移除。Fish Speech 项目代码(reference_loader.py)直接调用了这个已废弃的 API。


权威引用:为什么这个函数消失了?

根据 PyTorch Audio 官方文档和源码,这是一个有计划的 API 废弃,属于从“Legacy Backend Mode”向“Dispatcher Mode”迁移的一部分。

版本

状态

官方说明

PyTorch 2.8.x

Deprecated

函数存在但发出警告,提示将在 2.9 中移除。

PyTorch 2.9.0+

Removed

函数已从torchaudio模块的__init__.py中删除,调用即报AttributeError

官方文档证据

  • PyTorch 2.9.0 Docs: torchaudio.list_audio_backends页面顶部明确标注"DEPRECATED"​ 和"Warning: This function has been deprecated. It will be removed from 2.9 release."

  • Migration Guide: 官方建议使用新的Dispatcher Mode,即直接调用torchaudio.load()而不需要手动设置全局后端。


解决方案一(降级 PyTorch)


解决方案二(无需降级 PyTorch)

核心思路:使用try-except捕获AttributeError,在新版本中直接回退到默认且稳定的soundfile后端。

1. 定位文件

打开导致报错的文件:fish_speech/inference_engine/reference_loader.py

2. 修改代码(约第 34 行)

找到__init__方法中定义后端的代码块。

修改前(报错代码):

# Define the torchaudio backend backends = torchaudio.list_audio_backends() # <-- 这行在 2.10.0 会爆炸 if "ffmpeg" in backends: self.backend = "ffmpeg" else: self.backend = "soundfile"

修改后(兼容代码):

# Define the torchaudio backend # 处理 torchaudio 版本差异 (>=2.9 移除了 list_audio_backends) try: # 尝试旧版 API (torchaudio < 2.9) backends = torchaudio.list_audio_backends() if "ffmpeg" in backends: self.backend = "ffmpeg" else: self.backend = "soundfile" except AttributeError: # 新版 torchaudio (>=2.9) 已移除该函数 # 在 Windows + PyTorch 2.10 环境下,soundfile 是安全且高效的默认值 self.backend = "soundfile"

3. 验证

重新运行python tools/run_webui.py。如果日志显示Warming up done, launching the web UI...且无报错,则修复成功。


技术细节:为什么选择soundfile作为回退?

  1. Windows 原生支持soundfile后端在 Windows 上对 WAV 格式的支持最稳定,无需额外安装 FFmpeg 系统库。

  2. Fish Speech 需求:项目主要处理的是训练和推理用的标准音频文件(WAV),soundfile完全够用。

  3. 性能无损:对于 RTX 3090 的推理流水线,I/O 后端对 GPU 计算速度几乎没有影响。

预防措施与给开发者的建议

1. 依赖锁定(Prevention)

requirements.txt或项目文档中明确指定torchaudio版本,避免用户自动安装最新版导致 API 断裂。

# 如果项目尚未适配 2.9+,应锁定在 2.8.x torchaudio<2.9.0

2. 代码健壮性(Best Practice)

在调用可能被废弃的第三方库 API 时,永远使用防御性编程

# 好习惯:检查属性是否存在 if hasattr(torchaudio, 'list_audio_backends'): # 使用旧版逻辑 else: # 使用新版逻辑或默认值

3. 环境诊断脚本

创建一个check_env.py来快速诊断兼容性问题:

import torch, torchaudio print(f"PyTorch: {torch.__version__}") print(f"torchaudio: {torchaudio.__version__}") print(f"Has list_audio_backends: {hasattr(torchaudio, 'list_audio_backends')}")

总结思考

这是一个典型的深度学习生态快速迭代导致的“下游项目滞后”问题。PyTorch 为了性能(Dispatcher Mode)移除了旧的全局状态管理 API,但像 Fish Speech 这样的优秀开源项目可能因为维护周期原因未能即时跟进。

对于用户而言,不降级 PyTorch(保持 CUDA 13.0 高性能)​ 而是手动 Patch 项目代码,是在享受新硬件算力与使用社区模型之间最好的平衡点。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/13 16:41:21

六大行业协会共商产业融合发展新路径

&#xff08;央链直播 北京讯&#xff09;今日&#xff0c;中国移动通信联合会人工智能与元宇宙产业工作委员会、中国通信工业协会区块链专业委员会、中国移联数字文化和智慧教育分会、中国移联可信资产与数链金融专委会、中国移动通信联合会数智中医药生物健康分会、香港RWA全…

作者头像 李华
网站建设 2026/9/14 19:29:38

多邻国 6.67.1 | 无限红心,最强外语学习应用,趣味学习外语

多邻国Duolingo是一款全球知名的语言学习APP&#xff0c;深受超5亿用户喜爱。它提供40多个语种的学习课程&#xff0c;涵盖常见语言如英语、日语、韩语、法语、意大利语、西班牙语&#xff0c;还包含夏威夷语、威尔士语等小众及濒危语言&#xff0c;甚至有《权力的游戏》中的龙…

作者头像 李华
网站建设 2026/9/13 12:48:15

开源在线评测系统(OJ)沙盒解决方案对比分析

开源在线评测系统&#xff08;OJ&#xff09;沙盒解决方案对比分析 在线评测系统&#xff08;Online Judge&#xff0c;简称OJ&#xff09;是计算机编程教育、竞赛和招聘面试中不可或缺的工具。而沙盒&#xff08;Sandbox&#xff09;作为OJ系统的核心组件&#xff0c;负责安全…

作者头像 李华