前段时间被 Alfword 折磨的够呛。当我在服务器上同时开跑上千个 Alfword 游戏后,LLM server 的效率显著下降,并且经常出现 connection time out。索性我手写了一个集成了 configuration 和 serving 的框架来解决这些问题。具体而言,我希望利用 SGLang 同时 serve 多个模型(比如 8 个 Llama3.1 8b),每个模型映射单独的端口;同时开启上千个 running task,每个 task 具有一个 ModelServer 用以选择所有端口中的某一个进行交互。
在此基础上:
ModelServer 在单次 API 请求失败时,进行有限的重试;
ModelServer 会在 init 以及单次 API 请求时间超长时,遍历当前的所有端口,选择最快的端口——尽可能使用同一个端口是为了充分利用 SGLang 后端的前缀树;
需求听上去简单,但是实现起来还是有很多心思。这种简单的轮子,造起来嫌麻烦,但是自己又找不到现成的。自己写了两三周,不断调试优化,这里分享下结果。
ModelServer 实现了如下的 feature:
多模型并行服务:同时管理多个模型,提高并发处理能力和资源利用率。
最速端口选择:确保在动态负载环境下始终保持不错的性能(如果当前的”最速服务器“被严重拖慢,则会重新选择”最速服务器“)。
有限容错。
可扩展性:设计上考虑了未来的扩展需求。无论是增加更多的模型、调整重试策略,还是引入新的负载均衡算法,都可以相对容易地集成到现有框架中。
性能监控:实时追踪各个端口的响应时间和成功率。
自己用的最上心,欢迎大家提意见。
- The End -
长按二维码关注我们
本公众号专注:
1. 技术分享;
2. 学术交流;
3. 资料共享。
欢迎关注我们,一起成长!