vLLM部署实战重难点
Kubernetes + 容器化部署
- vLLM官方docker镜像:
vllm/vllm-openai- 这是官方提供的 Docker 镜像,可以用来快速部署 vLLM 服务,便于容器化管理。
- 实战: helm chart 部署
- 本地集群: 使用 Helm 安装和配置 vLLM 在本地 Kubernetes 集群中,方便调试和开发。
- 云端集群: 在云端(如 AWS、Google Cloud、Azure 等)部署 vLLM 集群,扩展性和高可用性较好。
- CPU/内存/GPU 如何分配
- 根据集群的资源需求,合理分配 CPU、内存和 GPU,确保 vLLM 实例的高效运行,特别是在处理大规模请求时,GPU 资源尤为关键。
vLLM 状态监测
/health以及/metrics端口用于监控实例状态/health用于检查实例是否存活,/metrics提供监控指标,帮助开发人员和运维人员及时掌握系统运行状态。
- 核心 metrics 监测
- 通过监控一些关键指标,可以实时了解系统的负载和性能。
num_waiting_request > 0: 如果 vLLM 无法及时处理请求,请求就会排队,此时需要通过告警机制来提醒管理员。num_running_requests: 反映当前系统的负载,随着请求量的增加,vLLM 会动态调整 batch size 来优化性能。- SLO 相关指标:
e2e_request_latency_seconds: 请求延迟,常见 0.5s 为标准值,用来衡量服务的响应速度。time_per_output_token_seconds: 从请求到首个 token 生成的时间,表示生成响应的速度。prompt/generation_tokens_total: 每秒生成的 token 数量,反映了 vLLM 处理请求的吞吐能力。
- 实战
- 通过实际监控工具,如 Prometheus 配合 Grafana,来展示和分析这些指标,确保 vLLM 服务的高效运行。
负载均衡与路由算法
- 因为可能会部署多个 vLLM,在生产环境中运行,压力和请求处理差异较大
- 负载均衡: 需要判断哪些节点的负载过高,哪些节点已经无法再处理请求,通过负载均衡策略确保请求均匀分配。
- 路由算法实例:
- Prefix-caching: 一种重要概念,是需要路由的原因。前缀缓存存储了模型对以前遇到的前缀进行计算的中间结果,因此当相同的前缀再次出现时,模型不需要重新计算整个序列,而只需检索缓存的结果。这种技术可以显著地加快推理时间,特别是在处理长序列或执行具有相似前缀的多个推理的时候。
- Round-robin: k8s 默认的路由算法,它会把请求均匀地分发到所有的服务器,但可能会将同一 session 的请求分配到不同的节点,这可能会影响性能。
- Session-based: 为了提高性能和避免重复计算,同一用户的请求应该尽量路由到同一个节点,避免重新加载和处理历史记录。
- 最大前缀匹配: 通过将请求拆分成小块,使用哈希值匹配请求和历史记录,从而找到最合适的节点进行处理。
- Session 长度较长时: 参考 Prebel UCSD Yiying Zhang 的论文,或者使用强化学习或其他 AI 算法来预测和优化路由,确保较长 session 的高效处理。
自动扩容/压容
- 在集群中流量波动大(用户多或少)
- 实例: 通过 Kubernetes 的 Horizontal Pod Autoscaler (HPA) 和 Prometheus Adapter 监控资源使用情况,自动增加或减少 pod 数量,以应对不同的流量负载。
- 何时触发: 观察关键指标如 CPU 使用率、内存消耗、请求数等,动态调整集群规模,确保在流量增加时能够平稳扩展,在流量减少时节约资源。
容灾处理
- 不仅是节点断了后重启,可能会对业务逻辑产生影响
- 路由层的处理: 当节点宕机时,路由算法需要动态更新,避免将请求路由到不可用的节点。
- 业务层异常捕获:通过在业务层捕获异常并进行重试或转发,避免服务中断。
- 动态更新路由:当节点失效时,实时更新路由,确保请求能够被有效处理。
- 重新发送请求:确保请求不会丢失,及时重新发送到可用节点。
- 在业务端的一种挑战
- 生成到一半时的中断问题:如果在生成 token 时节点宕机,需要能够将中间状态保存并转移到其他节点继续处理,确保任务不被中断。
- 路由层的处理: 当节点宕机时,路由算法需要动态更新,避免将请求路由到不可用的节点。
vLLM部署实战重难点的更多相关文章
- jenkins 自动化部署实战
jenkins 作为一个自动化的集成工具,已经是必不可少的了.它里面提供各种插件,以及完备的基础流程设施,为大家的自动化集成之路提供了很多的方便.所以,我们有必要完整的实践一回.以切身体会到它的好处! ...
- 李洪强漫谈iOS开发[C语言-008]- C语言重难点
C语言学习的重难点 写程序的三个境界: 照抄的境界,翻译的境界,创新的境界 1 伪代码: 描述C语言的编程范式 范式: 规范的一种表示 对于C的范式学会的话,C, C++ Java 都会了 2 ...
- FastDFS 分布式文件系统部署实战及基本使用
FastDFS 分布式文件系统部署实战及基本使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. FastDFS是一个开源的高性能分布式文件系统.它的主要功能包括:文件存储,文件同步 ...
- Jenkins部署实战篇
Jenkins部署实战篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.持续集成理论 1>.开发写代码的演变过程 1.1>.一个开发单打独斗,撸代码,开发网站,自由 ...
- Hadoop生态圈-Oozie部署实战
Hadoop生态圈-Oozie部署实战 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Oozie简介 1>.什么是Oozie Oozie英文翻译为:驯象人.一个基于工作流 ...
- Tomcat部署实战
Tomcat部署实战 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.登录官网下载tomcat软件包(http://tomcat.apache.org/) 1>.在安装to ...
- Hadoop生态圈-Azkaban部署实战
Hadoop生态圈-Azkaban部署实战 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Azkaban部署流程 1>.上传azkaban程序并创建解压目录 [yinz ...
- Snort企业部署实战
Snort企业部署实战 1 背景 我们知道企业网络目前威胁来自两个位置:一个是内部,一个是外部.来自外部的威胁都能被防火墙所阻止,但内部攻击都不好防范.因为公司内部人员对系统了解很深且有合 ...
- (十)RabbitMQ消息队列-高可用集群部署实战
原文:(十)RabbitMQ消息队列-高可用集群部署实战 前几章讲到RabbitMQ单主机模式的搭建和使用,我们在实际生产环境中出于对性能还有可用性的考虑会采用集群的模式来部署RabbitMQ. Ra ...
- Kubernetes 应用部署实战
Kubernetes 应用部署实战 2018-08-08 19:44:56 wuxiangping2017 阅读数 3084 收藏 更多 分类专栏: linux运维与架构师 简介 伙计们,请搬好 ...
随机推荐
- Django实战项目-学习任务系统-发送邮件通知
接着上期代码内容,继续完善优化系统功能. 本次增加发送邮件通知功能,学习任务系统发布的任务,需要及时通知到学生用户知晓. 由于目前智能手机普及,人人都离不开手机,所以手机端接收通知信息更加及时有效. ...
- Swarm集群部署、集群架构、集群管理 、服务管理
一.部署swarm集群 #docker swarm简介 Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose ...
- 记一次Linux虚拟机分配内存不足的处理方案
记一次Linux虚拟机硬盘空间不足的处理方案 **起因:**公司的服务器是windows的,而我需要一个基于Linux的dev环境,于是用vmvare创建了一个centos7的系统实例,里面安装mys ...
- Docker管理面板系列——Portainer
一.介绍 Portainer是个轻量级的Docker管理面板,和Rancher这种重量级选手没法比,Portainer倾向于单机的管理(后来发现能够添加多个单机节点切换着管理),当然,在Docker搞 ...
- HTML5 定时通知
通过setInterval()和Notification来实现定时通知功能. demo <script> window.onload = function () { //每10秒弹出一个桌 ...
- EntityFramework 6 分页模式
在我的另一篇博客中提到了EntityFrameworkCore 分页问题, 中提到了EntityFrameworkCore在针对不同版本SQL Server数据库时如何指定分页模式,那么如何在Enti ...
- nodejs的http请求axios
http相关modules HTTP – the Standard Library Request Axios SuperAgent 推荐使用axios 或者super agent 使用axios和s ...
- Koin 依赖注入: 在 Android 模块化项目中定义 Room 数据库的最佳实践
前置 本文发布于个人小站:https://wavky.top/db-in-multi-modules/ 欢迎移步至小站,关注更多技术分享,获得更佳阅读体验 (不保证所有技术文章都会同步发表到博客园) ...
- JAVA基础之多线程一期
一.并发与并行的区别 并发:指同一时间段,两个或多个事件交替进行 并行:指同一时间段,两个或多个事件同时进行 二.进程与线程的区别 进程:正在内存中运行的程序就是进程 线程:线程归属于进程,它是进程中 ...
- Junit单元测试的maven设置
maven 官方文档: https://maven.apache.org/surefire/maven-surefire-plugin/usage.html maven是通过插件 maven-sure ...