在基准测试过程中,我们发现API服务器和AsyncLLM引擎的性能存在差距,请求延迟和吞吐量与手写的gRPC服务器不匹配。我计划对此进行调查。线索如下:
- 由于支持流式传输而减缓asyncio循环
- asyncio循环中的阻塞调用,无法卸载请求,这应该通过线程PR解决。Fix cpu heavy code in async function _AsyncLLMEngine._run_workers_async #1628,但我们应该对其进行基准测试。
- FastAPI + uvicorn是单线程的。
在基准测试过程中,我们发现API服务器和AsyncLLM引擎的性能存在差距,请求延迟和吞吐量与手写的gRPC服务器不匹配。我计划对此进行调查。线索如下:
3条答案
按热度按时间0wi1tuuw1#
一个简单的py-spy分析没有发现任何可疑的内容。
一个假设是
_schedule
和采样所花费的时间,这会阻塞主线程的网络访问。我认为这是一个相当显著的开销,大约每解码一次就会花费0.5毫秒,并阻塞网络线程。vs3odd8k2#
这可能解释了vLLM和DS-FastGen基准测试结果之间的差异。它们的基准测试使用持久客户端模式;据我所知,vLLM的基准测试使用llm.generate()代替。
zsbz8rwp3#
这个问题是否有更新:-)