Bug: model.generate(input=bytes) hangs for minutes on raw PCM chunks that trigger audio container false-positive
Mantenedores costumam responder em até 1 dia
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Facilidade para iniciantes
- 45/100
- Tipo de issue
- Bug
- Clareza
- Precisa de esclarecimento
- Status de atividade
- Ativa
- Domínio
- audio-video-rtc, machine-learning
Direção de pesquisa
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.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
🐛 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 数据复现验证。)
- Linguagem predominante
- Python
- Estrelas
- 20.8k
- Forks
- 2.1k
- Merge médio
- 1d 1h
- PRs com merge (30d)
- 37
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Tem um modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de modelscope/FunASR
-
funasr_onnx streaming Paraformer returns inconsistent structures for empty resultsTalvez já em andamento @ychy7001 assumiu há 2 dias. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
modelscope/FunASR#3791 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
`SentencepiecesTokenizer.ids2tokens` ignores `token_list` - root cause of the paraformer-en gibberish in #3040Talvez já em andamento Um pull request vinculado a esta issue está aberto ou já foi mesclado. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
modelscope/FunASR#3780 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
modelscope/FunASR#3762 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
Bug: blank lines in wav.scp / jsonl file lists crash prepare_data_iterator (IndexError / JSONDecodeError)Talvez já em andamento Um pull request vinculado a esta issue está aberto ou já foi mesclado. Abertaneeds feedback
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 85/100
modelscope/FunASR#3757 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 88/100
modelscope/FunASR#3730 · 2 comentários ·
Mantenedores costumam responder em até 1 dia
Todas as issues de modelscope/FunASR
Issues semelhantes
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
nansencenter/geodataset#39 ·
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
awslabs/visual-asset-management-system#804 ·
Mantenedores costumam responder em até 1 dia
-
follow-up
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 65/100
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
odoo/odoo#297927 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
link-rot
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 67/100