Bug: model.generate(input=bytes) hangs for minutes on raw PCM chunks that trigger audio container false-positive
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 45/100
- Type d'issue
- Bug
- Clarté
- À clarifier
- Activité
- Active
- Domaine
- audio-video-rtc, machine-learning
Piste de recherche
Read funasr/utils/load_utils.py, especially load_bytes(), _is_audio_container(), and _has_consecutive_mp3_frames(), then trace the input path from funasr/auto/auto_model.py. Build a focused test with 6400-byte raw int16 PCM chunks, verify whether they are misclassified as container audio, and confirm that generate() returns promptly without the reported decode failure.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
🐛 Bug Report: model.generate(input=bytes) 在处理流式原始 PCM 时长时间 hang
版本
- FunASR: 1.4.0
- Python: 3.10.12
- PyTorch: 1.12.0
- OS: Centos7.9
场景
FSMN VAD 模型做流式推理:每 200ms 收到一个 int16 PCM chunk(6400 字节,16kHz mono),调用 AutoModel.generate()。
调用方式
from funasr import AutoModel
model = AutoModel(model="iic/speech_fsmn_vad_zh-cn-16k-common-pytorch", disable_update=True)
# 每 200ms 一帧,pcm_chunk 是原始 int16 PCM bytes,6400 字节(16kHz x 0.2s x 2)
cache = {}
for pcm_chunk in pcm_chunks:
result = model.generate(
input=pcm_chunk, # bytes, 原始 int16 PCM, 6400 字节
cache=cache,
chunk_size=200,
disable_pbar=True,
)
现象
服务稳定运行数周后,某次处理中 generate() 调用hang 约三分钟不返回。期间该路会话的所有后续音频帧无法处理。三分钟后抛出异常:
Failed to decode container-formatted audio bytes.
Verify that the input is a complete supported audio file and that torchaudio,
soundfile, or ffmpeg is available.
通常 generate() 对一个 200ms chunk 的推理只需 10-20ms。hang 的持续时间远超正常推理时间。
补充信息
- FunASR 版本 1.4.0(
pip show funasr输出) - 输入是原始 int16 PCM bytes,不是 WAV/MP3 等容器格式文件
- 该错误低频出现(数周一次),未找到稳定复现方式
以下是 AI(Claude)辅助分析的推测,供参考:
AI 推测的可能原因
-
_is_audio_container误判:load_utils.py中load_bytes()对所有bytes输入调用_is_audio_container()进行容器格式检测。200ms int16 PCM chunk(6400 字节)有一定概率命中 MPEG 帧头假阳性(data[0] == 0xFF and (data[1] & 0xE0) == 0xE0),随后_has_consecutive_mp3_frames()在随机 PCM 数据中有非零概率通过三层帧头校验。 -
误判后 torchaudio 陷入长时间错误恢复:一旦判定为容器格式,
load_bytes()调用load_audio_text_image_video(BytesIO(input), fs=16000),torchaudio 被喂入一个 6400 字节的"假 MP3 文件",内部错误恢复路径反复尝试重新同步,持续数分钟后才放弃。
(以上推测基于对 FunASR 1.4.1 funasr/utils/load_utils.py 和 funasr/auto/auto_model.py 源码的阅读,尚未通过构造特定 PCM 数据复现验证。)
- Langage dominant
- Python
- Étoiles
- 20.5k
- Forks
- 2.1k
- Merge moyen
- 15 h 21 min
- PR mergées (30 j)
- 125
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de modelscope/FunASR
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 88/100
modelscope/FunASR#3730 · 2 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 86/100
modelscope/FunASR#3704 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
没有vllm时使用fun-asr-nano每次都重新加载模型Ouvertebug needs feedback
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
modelscope/FunASR#3401 · 2 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
关于实时模式的vllm解码并发问题Ouvertebenchmark needs feedback question
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 35/100
modelscope/FunASR#3732 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
【暴露的问题比断句严重】实时语音,切分不够彻底,怎么解决Ouvertebug needs triage
Difficulté 4/5 3-5 jours Accessibilité débutants 30/100
modelscope/FunASR#3727 · 2 commentaires ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de modelscope/FunASR
Issues similaires
-
bug server
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
sportsdataverse/sportsdataverse-py#641 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
googleapis/google-cloud-python#18532 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
Les mainteneurs répondent en général sous 1 jour