wenet-e2e / wenet

Production First and Production Ready End-to-End Speech Recognition Toolkit
https://wenet-e2e.github.io/wenet/
Apache License 2.0
4.14k stars 1.07k forks source link

wfst_beam_search解码速度慢 #1713 #1723

Closed YYGXjpg closed 9 months ago

YYGXjpg commented 1 year ago

接 #1713 您好,我这边确认了,runtime/libtorch的GPU编译是没问题的,使用prefix beam search解码也是有用到GPU的,GPU利用率也有30%以上,解码速度也比较快。

问题在于,加了TLG之后,会非常慢(使用的TLG大小是870M),且GPU利用率长期为0(偶尔会瞬间变成9%)。 打印出了一些中间log如下:

I0307 08:30:37.921689 4976 ctc_wfst_beam_search.cc:122] 44.1748 45.279 I0307 08:30:37.921811 4976 asr_decoder.cc:119] forward takes 55 ms, search takes 47477 ms I0307 08:30:37.922067 4976 asr_decoder.cc:200] Partial CTC result 还 要 考 虑 预 防 主 义 的 需 要 你 将 来 还 会 不 会 再 实 施 犯 罪 这 个 试 用 期 限 是 最 重 要 的 那 职 业 禁 止 呢 是 从 刑 罚 执 行 完 毕 之 日 起 计 算 I0307 08:30:37.965334 4967 lattice-faster-decoder.cc:967] ProcessNonemitting 224 320 I0307 08:30:37.974196 4967 lattice-faster-decoder.cc:967] ProcessNonemitting 229 346 I0307 08:30:37.982820 4967 lattice-faster-decoder.cc:967] ProcessNonemitting 224 339 I0307 08:30:37.983292 4975 lattice-faster-decoder.cc:967] ProcessNonemitting 68947 158037 ... I0307 08:30:38.293226 4968 lattice-faster-decoder.cc:967] ProcessNonemitting 201 210 I0307 08:30:38.300642 4968 lattice-faster-decoder.cc:967] ProcessNonemitting 201 209 I0307 08:30:38.303037 4976 asr_decoder.cc:200] Partial CTC result 还 要 考 虑 预 防 主 义 的 需 要 你 将 来 还 会 不 会 再 实 施 犯 罪 这 个 试 用 期 限 是 最 重 要 的 那 职 业 禁 止 呢 是 从 刑 罚 执 行 完 毕 之 日 起 计 算 I0307 08:30:38.303089 4976 asr_decoder.cc:84] Rescoring cost latency: 380ms. I0307 08:30:38.303100 4976 decoder_main.cc:72] Partial result: 还 要 考 虑 预 防 主 义 的 需 要 你 将 来 还 会 不 会 再 实 施 犯 罪 这 个 试 用 期 限 是 最 重 要 的 那 职 业 禁 止 呢 是 从 刑 罚 执 行 完 毕 之 日 起 计 算 I0307 08:30:38.303107 4976 decoder_main.cc:104] BL_mKtLdBK0_0090 Final result: 还 要 考 虑 预 防 主 义 的 需 要 你 将 来 还 会 不 会 再 实 施 犯 罪 这 个 试 用 期 限 是 最 重 要 的 那 职 业 禁 止 呢 是 从 刑 罚 执 行 完 毕 之 日 起 计 算 I0307 08:30:38.303115 4976 decoder_main.cc:105] Decoded 12320ms audio taken 47914ms.

看起来是CtcWfstBeamSearch耗时很久,(search takes 47477 ms),请问这个是正常的吗?如何加速呢?

robin1001 commented 1 year ago

正常,你是使用 GPU 做网络前向,会非常快。wfst_beam_search 跑在 CPU 上,相对看下来会慢。

YYGXjpg commented 1 year ago

请问wfst_beam_search有办法在GPU上进行吗?

xingchensong commented 1 year ago

https://github.com/wenet-e2e/wenet/pull/1521 可以参考这里的实现,使用k2的hlg在GPU上解码

YYGXjpg commented 1 year ago

感谢提供思路,不过k2的hlg好像只能用wenet/bin/recognize.py来解码,目前没办法在此基础上加context biasing吧? 如果要同时使用LM和context biasing,是否目前只有使用decoder_main进行wfst beam search解码的方案呢?

github-actions[bot] commented 10 months ago

This issue has been automatically closed due to inactivity.