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. 解决Mac M芯片 Wireshark 运行rvictl -s 后,出现Starting device failed

    前言 mac os big sur 之后,苹果系统的安全性能提升,导致 rvictl -s 创建虚拟网卡失败. $ rvictl -s 000348120-001621w21184C01E boots ...

  2. vscode如何退出/切换 github 账号

    退出/切换 github 账号 左下角点击头像按钮,选择注销,然后再重新登录

  3. Mac 干净彻底地卸载 MySQL

    前言 卸载MySQL,首先得知道MySQL的路径.默认的话是在/usr/local文件夹下的. 在系统偏好设置面板中可以看到之前安装的MySQL,此时若想卸载MySQL,可以按照如下步骤来. 之前安装 ...

  4. vue学习一(指令3.v-on,v-for)

    3.1.v-on 绑定事件  可以简写为@ ,按键修饰符    v-on:keyup    =    @keyup 事件修饰符:v-on提供了事件修饰符 修饰符是由点开头的指令后缀来表示的       ...

  5. bug|jest|vue|记录:关于【4-4 使用 TDD 的方式开发 Header 组件(1)】05:26时的运行测试用例出错的问题

    错误情景 提示 jest 配置错误 Configuration error Configuration error: Could not locate module @/components/Hell ...

  6. BUUCTF---checkln(ROT加密)

    题目 dikqTCpfRjA8fUBIMD5GNDkwMjNARkUwI0BFTg== 解题 1.看见有==,尝试base64解码,但解码失败 2.尝试其它Base加密均失败 3.重新思考有等于号的加 ...

  7. [每日算法 - 华为机试] leetcode345 :反转字符串中的元音字母「双指针」

    入口 力扣https://leetcode.cn/problems/reverse-vowels-of-a-string/submissions/ 题目描述 给你一个字符串 s ,仅反转字符串中的所有 ...

  8. 【虚拟机】在VMware中为Ubuntu虚拟机设置共享文件夹

    [虚拟机]在VMware中为Ubuntu虚拟机设置共享文件夹 零.需求 有些开发工具在Windows上没有,只能在Ubuntu上开发,但是自己电脑是Windows的,开发完成后需要通过Windows分 ...

  9. 在Linux终端管理你的密码!

    大家好,我是良许. 现在是互联网时代,我们每天都要跟各种 APP .网站打交道,而这些东西基本上都需要注册才可以使用. 但是账号一多,我们自己都经常记不清对应的密码了.有些小伙伴就一把梭,所有的账号密 ...

  10. 事务注解@Transactional

    目录 1.属性介绍 2.传播机制 准备例子 总结 3.原理 4.失效场景 一.属性介绍 1.isolation 属性 事务的隔离级别,默认值为 Isolation.DEFAULT.可选的值有: Iso ...