k2-fsa / sherpa-onnx

Speech-to-text, text-to-speech, speaker diarization, and VAD using next-gen Kaldi with onnxruntime without Internet connection. Support embedded systems, Android, iOS, Raspberry Pi, RISC-V, x86_64 servers, websocket server/client, C/C++, Python, Kotlin, C#, Go, NodeJS, Java, Swift, Dart, JavaScript, Flutter, Object Pascal, Lazarus, Rust
https://k2-fsa.github.io/sherpa/onnx/index.html
Apache License 2.0
3.4k stars 404 forks source link

online-websocket-server 中设置 --max-batch-size(允许最大并发数) 失效 #1462

Closed wanganddi0918 closed 1 hour ago

wanganddi0918 commented 4 hours ago

使用如下 API 启动服务: ./bin/sherpa-onnx-online-websocket-server \ --port=6008 \ --num-work-threads=2 \ --num-io-threads=2 \ --tokens=./sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20/tokens.txt \ --encoder=./sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20/encoder-epoch-99-avg-1.int8.onnx \ --decoder=./sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20/decoder-epoch-99-avg-1.int8.onnx \ --joiner=./sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20/joiner-epoch-99-avg-1.int8.onnx \ --log-file=./log.txt \ --max-batch-size=4 \ --loop-interval-ms=20

使用如下脚本启动客户端: find ./wavs_cn2000_repeat -name "*.wav" | while read wav_path; do python3 /home/wangdi/sherpa/sherpa-playground/sherpa-onnx/python-api-examples/online-websocket-client-decode-file.py \ --server-addr localhost \ --server-port 6008 \ --seconds-per-message 0.1 \ "$wav_path" & done wait echo "done"

现象: 理论上应该是起 4 个并发,每个并发有 2 个线程。但结果显示,无论将 max_batch_size 设置成多少,CPU的占用率不变,例如上述操作(max-batch-size=4 num-work-threads=2),CPU的占用率是 200 %左右(如下图),说明虽然起了多个并发,但是在执行的过程中仅处理了一个并发,这是为什么呢?

微信图片_20241024132036
csukuangfj commented 3 hours ago

num-work-threads=2 CPU的占用率是 200 %左右

--

提问 num-work-threads=4

那么,cpu 占用率是多少?

csukuangfj commented 3 hours ago

--max-batch-size(允许最大并发数)

为什么你会觉得, batch size 就是并发数?

wanganddi0918 commented 1 hour ago

抱歉呀,是我搞错了!num-work-threads 是并发数,这个数值有上限吗?num-work-threads、num-io-threads 以及 max-batch-size 三者之间有什么依赖关系吗

csukuangfj commented 1 hour ago

num-work-threads 是并发数,这个数值有上限吗

由你的机器配置决定。

num io threads, 是用多少个线程去处理网络连接

max batch size, 如果是 cpu, 建议设置为1或者2即可

wanganddi0918 commented 1 hour ago

好滴,多谢啦~