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部署实战重难点的更多相关文章

  1. jenkins 自动化部署实战

    jenkins 作为一个自动化的集成工具,已经是必不可少的了.它里面提供各种插件,以及完备的基础流程设施,为大家的自动化集成之路提供了很多的方便.所以,我们有必要完整的实践一回.以切身体会到它的好处! ...

  2. 李洪强漫谈iOS开发[C语言-008]- C语言重难点

      C语言学习的重难点 写程序的三个境界: 照抄的境界,翻译的境界,创新的境界 1  伪代码: 描述C语言的编程范式 范式: 规范的一种表示 对于C的范式学会的话,C, C++ Java 都会了 2 ...

  3. FastDFS 分布式文件系统部署实战及基本使用

    FastDFS 分布式文件系统部署实战及基本使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. FastDFS是一个开源的高性能分布式文件系统.它的主要功能包括:文件存储,文件同步 ...

  4. Jenkins部署实战篇

    Jenkins部署实战篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.持续集成理论 1>.开发写代码的演变过程 1.1>.一个开发单打独斗,撸代码,开发网站,自由 ...

  5. Hadoop生态圈-Oozie部署实战

    Hadoop生态圈-Oozie部署实战 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Oozie简介 1>.什么是Oozie Oozie英文翻译为:驯象人.一个基于工作流 ...

  6. Tomcat部署实战

    Tomcat部署实战 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.登录官网下载tomcat软件包(http://tomcat.apache.org/) 1>.在安装to ...

  7. Hadoop生态圈-Azkaban部署实战

    Hadoop生态圈-Azkaban部署实战 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.  一.Azkaban部署流程 1>.上传azkaban程序并创建解压目录 [yinz ...

  8. Snort企业部署实战

    Snort企业部署实战 1 背景       我们知道企业网络目前威胁来自两个位置:一个是内部,一个是外部.来自外部的威胁都能被防火墙所阻止,但内部攻击都不好防范.因为公司内部人员对系统了解很深且有合 ...

  9. (十)RabbitMQ消息队列-高可用集群部署实战

    原文:(十)RabbitMQ消息队列-高可用集群部署实战 前几章讲到RabbitMQ单主机模式的搭建和使用,我们在实际生产环境中出于对性能还有可用性的考虑会采用集群的模式来部署RabbitMQ. Ra ...

  10. Kubernetes 应用部署实战

    Kubernetes 应用部署实战 2018-08-08 19:44:56 wuxiangping2017 阅读数 3084  收藏 更多 分类专栏: linux运维与架构师   简介 伙计们,请搬好 ...

随机推荐

  1. helm Error: INSTALLATION FAILED: cannot re-use a name that is still in use

    前言 使用helm安装服务报错,修改chat后重新安装报错:安装失败:无法重复使用仍在使用的名称 解决方法 1.查找安装失败的服务 helm -n {namespace} ls -a 2.删除安装失败 ...

  2. JdbcTemplate 自定义返回的结果集字段和实体类映射

    废话不多:抄袭代码 package com.webank.wedatasphere.qualitis.handler; import com.webank.wedatasphere.qualitis. ...

  3. ZKmall模版商城前后端分离秒级响应架构深度解析

    在当今的电商领域,用户体验和响应速度已成为决定平台竞争力的关键因素.ZKmall模版商城,作为一款高性能的电商平台解决方案,通过采用前后端分离架构,实现了秒级响应,为用户带来了极致的购物体验.本文将深 ...

  4. 2025年4月TIOBE指数

    4 月头条:编程语言 Kotlin.Ruby 和 Swift 直到最近在 TIOBE 指数排名中都一直稳居前 20 的稳定位置.但如今它们似乎失去了发展动力,且很可能会逐渐过时.Kotlin 和 Sw ...

  5. 使用 Go 构建一个最小的 API 应用

    最近有项目要使用 Go 开发,作为一个. NET Core 选手,准备先撸一个包含 CRUD 的最小 MVP 项目练手. 要创建一个 TODO 应用,会创建下面这些接口: API Descriptio ...

  6. C# Delegate 委托及事件

    1.委托Delegate实质 由一个修饰符+  delegate,跟方法的定义比较类似,也需要声明参数和返回值.声明一个委托,就是声明一种方法签名(参数+返回值),只要是和声明委托方法签名相同的方法, ...

  7. python-docx styles(样式)的用法

    doc=Document()#创建一个空白文档 p=doc.add_paragraph()#给文档增加一个段落 p.paragraph_format.space_before=Pt(0)#设置段落 段 ...

  8. Spring AOP面向切面编程 通知类型

    Spring AOP面向切面编程 通知类型 通知分为: 前置通知 执行方法之前通知 后置通知 执行方法之后通知 异常通知 相当于cache里面的内容 最终通知 相当于finally 环绕通知 前四种通 ...

  9. HarmonyOS运动开发:如何集成百度地图SDK、运动跟随与运动公里数记录

    前言 在开发运动类应用时,集成地图功能以及实时记录运动轨迹和公里数是核心需求之一.本文将详细介绍如何在 HarmonyOS 应用中集成百度地图 SDK,实现运动跟随以及运动公里数的记录. 一.集成百度 ...

  10. 莫想到有一天得重新写个 etcd client

    莫想到有一天得重新写个 etcd client 其实8年前搞过一个, 不过经过8年时间,etcd 多了很多功能 ,原来的多半不行了 虽然暂时我也没啥需求,但是怕kv和watch有变化 而且其实通过 g ...