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运维与架构师 简介 伙计们,请搬好 ...
随机推荐
- 华为平板+Zotero+Xodo+坚果云+Zotfile+Zotero OCR,实现论文笔记平板手写+Win自动生成,补充官方教程
需要的硬件,软件,插件和实现的最终效果,rt. 1. Win,下载Zotero,坚果云 下载网址:https://www.zotero.org/download/ 版本:Zotero 6.如果是其他版 ...
- docker login harbor x509: certificate signed by unknown authority
前言 docker login harbor x509: certificate signed by unknown authority 解决 打开 /etc/docker/daemon.json,如 ...
- Windows 系统授权服务信息
cmd 中输入命令 slmgr.vbs /dlv 后查看输出信息 据说,OEM和RETAIL可以正常升级到Windows10,并永久激活
- ZKmall开源商城iOS 与安卓双端开发:如何平衡 B2B2C 商城的代码复用与性能
在ZKmall开源商城的iOS与安卓双端开发中,平衡B2B2C商城的代码复用与性能是一个关键考量.以下是一些建议和实践方法,以实现这一目标: 一.架构分层设计:解耦与复用 1. 分层架构模型 merm ...
- 深入理解 C++ 条件变量:为何 `wait` 钟爱 `std::unique_lock`?
深入理解 C++ 条件变量:为何 wait 钟爱 std::unique_lock?在 C++ 多线程编程中,线程间的协调是一个核心挑战.我们经常需要一个线程等待某个条件满足(例如,等待任务队列非空, ...
- SpringAI vs JBoltAI:Java企业级AI开发的框架之争与实战选型
「SpringAI vs JBoltAI:Java企业级AI开发的框架之争与实战选型」 一.Java生态的AI困局:工具碎片化与工程化缺失 1. 技术断层:从API调用到全生命周期管理多数企业仍停留在 ...
- 大模型微调实战:通过 LoRA 微调修改模型自我认知
本文主要分享如何使用 LLaMAFactory 实现大模型微调,基于 Qwen1.5-1.8B-Chat 模型进行 LoRA 微调,修改模型自我认知. 本文的一个目的:基于 Qwen1.5-1.8B- ...
- [开源] Layouter(桌面助手)开源发布
Layouter(桌面助手)是一款简洁.易用.美观的桌面整理软件,基于.net 6开发,支持Windows 7及以上操作系统.以 Apache-2.0 license 进行开源. 开源地址 https ...
- 聊聊四种实时通信技术:长轮询、短轮询、WebSocket 和 SSE
这篇文章,我们聊聊 四种实时通信技术:短轮询.长轮询.WebSocket 和 SSE . 1 短轮询 浏览器 定时(如每秒)向服务器发送 HTTP 请求,服务器立即返回当前数据(无论是否有更新). 优 ...
- git 更新和强制更新失败
Your local changes to the following files would be overwritten by mergeerror: Your local changes to ...