Skip to content

TorchAudio后端调用方式被弃用 报错 #490

@shog86

Description

@shog86

到分割长句这里有报错且卡住无法继续:

/Users/miniconda3/envs/videolingo/lib/python3.10/importlib/init.py:169: UserWarning: TorchAudio's global backend is now deprecated. Please enable distpatcher by setting TORCHAUDIO_USE_BACKEND_DISPATCHER=1, and specify backend when calling load/info/save function.
_bootstrap._exec(spec, module)
/Users/miniconda3/envs/videolingo/lib/python3.10/site-packages/streamlit/watcher/local_sources_watcher.py:210: UserWarning: Torchaudio's I/O functions now support par-call bakcend dispatch. Importing backend implementation directly is no longer guaranteed to work. Please use backend keyword with load/save/info function, instead of calling the udnerlying implementation directly.
lambda m: list(m.path._path),

问了大模型,回复如下:

这些警告信息来自 torchaudio 库,提示你其旧的全局后端(global backend)机制已被弃用,建议迁移到新的**后端调度器(backend dispatcher)**机制。这是 torchaudio 从 2.0+ 版本开始引入的现代化 I/O 架构。

⚠️ 警告解释

  1. 第一个警告:

    TorchAudio's global backend is now deprecated. Please enable dispatcher by setting TORCHAUDIO_USE_BACKEND_DISPATCHER=1, and specify backend when calling load/info/save function.

    • 你当前可能在使用 torchaudio.load()info()save() 时,依赖了已废弃的全局后端设置。
    • 解决方法是启用新的调度器,并在调用 I/O 函数时显式指定 backend
  2. 第二个警告:

    Torchaudio's I/O functions now support backend dispatch... Importing backend implementation directly is no longer guaranteed to work.

    • 你或某个依赖库(如 streamlit 插件)可能直接导入了底层后端实现(例如 torchaudio.backend.sox_io_backend),这在未来将不再被支持。

✅ 解决方案

✅ 方法一:设置环境变量并更新代码(推荐)

在运行程序前,设置环境变量启用新调度器:

export TORCHAUDIO_USE_BACKEND_DISPATCHER=1

然后,在你的代码中显式指定 backend 参数:

import torchaudio

# ✅ 正确做法:指定 backend
waveform, sample_rate = torchaudio.load('audio.wav', backend='soundfile')  # 或 'sox_io'

# 其他函数也类似
info = torchaudio.info('audio.wav', backend='soundfile')
torchaudio.save('output.wav', waveform, sample_rate, backend='soundfile')

常见 backend 值:

  • 'soundfile':支持 WAV, FLAC, OGG, etc.(推荐用于通用场景)
  • 'sox_io':支持更多格式,但依赖 libsox
  • 'ffmpeg':通过 torchaudio + pydub 或外部工具链支持

✅ 方法二:临时抑制警告(不推荐长期使用)

如果你暂时无法修改代码(比如是第三方库引发的),可以临时屏蔽警告:

import warnings
warnings.filterwarnings("ignore", module="torchaudio")

或更精确地:

warnings.filterwarnings(
    "ignore",
    message="TorchAudio's global backend is now deprecated",
    module="torchaudio"
)

但这只是“眼不见为净”,不解决根本问题。


🔍 如何定位问题代码?

这些警告来自:

streamlit/watcher/local_sources_watcher.py

说明可能是 streamlit 在监控文件时自动加载了音频文件,而它使用的 torchaudio 调用方式过时。

你可以:

  1. 检查你的 streamlit 应用中是否自动加载音频。
  2. 升级 torchaudiostreamlit 到最新版本,看是否已修复。
  3. 向相关库提交 issue,提醒他们更新 torchaudio 的使用方式。

📦 检查版本

确保你使用的是较新的 torchaudio

pip show torchaudio

建议使用 torchaudio >= 2.1.0


总结

项目 建议
是否启用新调度器 ✅ 设置 TORCHAUDIO_USE_BACKEND_DISPATCHER=1
是否指定 backend ✅ 在 load/info/save 中加 backend='soundfile'
是否直接导入 backend ❌ 避免使用 torchaudio.backend.sox_io_backend
是否升级库 ✅ 升级 torchaudio 和相关依赖

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions