自动调优 vLLM 服务器参数(实战指南)

1. 操作步骤

  • 该脚本能够自动搜索最优的vLLM服务器参数组合(包括max-num-seqs和max-num-batched-tokens),在满足端到端延迟和前缀缓存命中率等要求的同时,实现吞吐量最大化。

1.1 前提条件

  1. 克隆 vLLM 并切到目标分支
    git clone https://github.com/vllm-project/vllm.git
    cd vllm
    # git checkout <your-branch>
    
  2. 安装运行环境
    如果使用 TPU,请激活对应 conda 环境并安装匹配版本的 torchtorch_xla
  3. 模型准备
    若使用自定义模型,确保配置文件放置正确且可访问。

1.2 配置(脚本顶部必须设置)

变量说明示例
BASEvLLM 仓库所在目录的绝对路径"$HOME"
MODELHugging Face 模型名称"meta-llama/Llama-3.1-8B-Instruct"
SYSTEM硬件类型:TPUGPU"TPU"
TPTensor-parallelism 大小1
DOWNLOAD_DIR模型权重下载/缓存目录""(默认路径)
INPUT_LEN请求输入长度4000
OUTPUT_LEN请求输出长度16
MAX_MODEL_LEN模型最大长度4096
MIN_CACHE_HIT_PCT前缀缓存命中率要求,0–100;设为 0 禁用60
MAX_LATENCY_ALLOWED_MS允许的 P99 端到端延迟(ms);设极大值可忽略500
NUM_SEQS_LIST待测 max-num-seqs 列表"128 256"
NUM_BATCHED_TOKENS_LIST待测 max-num-batched-tokens 列表"1024 2048 4096"

短上下文场景可适当增大 max-num-seqs 值。

1.3 运行步骤

  1. 配置:按上表在脚本顶部修改变量。
  2. 执行
    cd <脚本所在目录>
    bash auto_tune.sh
    

注意:执行路径中不能包含字符串 vllm,否则 pkill -f vllm 会误杀脚本自身。


2. 要点提炼

2.1 核心目标

  • 自动遍历 max-num-seqsmax-num-batched-tokens 组合。
  • 在满足延迟或缓存命中率约束的前提下,找到最大吞吐

2.2 典型场景

目标关键配置示例
仅最大化吞吐MAX_LATENCY_ALLOWED_MS=1e11, MIN_CACHE_HIT_PCT=0
吞吐 + 延迟约束MAX_LATENCY_ALLOWED_MS=500
吞吐 + 延迟 + 前缀缓存MAX_LATENCY_ALLOWED_MS=500, MIN_CACHE_HIT_PCT=60

2.3 输出结果

  • 位于 $BASE/auto-benchmark/YYYY_MM_DD_HH_MM/
    • vllm_log_*.txt:各参数组合的 vLLM 日志
    • bm_log_*.txt:对应 benchmark 日志
    • result.txt:最优参数及吞吐汇总
    • profile/:最佳运行的一次 profiler trace(TPU 为 .xplane.pb,GPU 为 .json

3. 如何调优 vLLM 运行参数(实战指南)

3.1 调优流程(脚本内部逻辑)

  1. 确定最大 GPU 内存利用率
    从 0.98 开始递减,防止 OOM。
  2. 双重循环遍历
    遍历所有 (max-num-seqs, max-num-batched-tokens) 组合。
  3. 延迟感知吞吐搜索
    • 先以无限请求速率跑一轮;若 P99 延迟满足,则记录吞吐。
    • 若延迟超限,则逐步降低请求速率,找到满足延迟的最高吞吐
  4. 记录最优值
    每次更新吞吐更高的有效组合。
  5. 保存性能画像
    对最佳组合保存 profiler trace,便于 TensorBoard 等工具深度分析。

3.2 手动微调建议

  • 长输入 / 长输出场景
    • 适当降低 max-num-seqs,提高 max-num-batched-tokens,减少 padding 浪费。
  • 短输入 / 短输出场景
    • 提高 max-num-seqs,降低 max-num-batched-tokens,充分利用并发。
  • 显存紧张
    • 降低 gpu-memory-utilizationmax-model-len
  • 延迟敏感
    • MAX_LATENCY_ALLOWED_MS 范围内,优先选择吞吐最高的组合,若仍超限,则降低 max-num-seqsmax-num-batched-tokens
  • 前缀缓存优化
    • 若业务有大量共享前缀,可设置 MIN_CACHE_HIT_PCT>0,脚本会过滤掉命中率不达标的结果。

脚本已自动化上述过程;如想手动实验,可直接用 vllm serve 启动并配合 vllm bench serve 进行基准测试。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/93503.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/93503.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【腾讯云】EdgeOne免费版实现网站加速与安全防护

作为一名个人站长&#xff0c;我深知在有限的预算下如何为网站提供稳定、快速的服务是关键。腾讯云推出了 EdgeOne免费版 https://edgeone.ai/zh/redemption已经有一段时间。结合我的实际体验&#xff0c;我想从国内备案域名的角度&#xff0c;分享一下如何利用这个工具提升网站…

修改gitlab默认的语言

文章目录网上的方法1. 采用数据库触发器的方法2. 登录pg库2.1 查看表2.2 创建function2.3 创建触发器2.4 修改历史数据网上的方法 网上修改/opt/gitlab/embedded/service/gitlab-rails/config/application.rb的方法&#xff0c;我试了&#xff0c;没生效&#xff0c;没进一步研…

ndk { setAbiFilters([‘armeabi-v7a‘, “arm64-v8a“]) }

deepseek回答&#xff1a; 好的&#xff0c;我现在需要解释build.gradle中这段ndk配置代码的含义。首先&#xff0c;用户提供的代码片段是&#xff1a; ndk { setAbiFilters([‘armeabi-v7a’, “arm64-v8a”]) } 我的第一步是理解每个部分的作用。ndk块在Android构建文件中用于…

k8s 1.30 通过helm部署ingress-controller-4.12.1

一、基本概念k8s集群中&#xff0c;ingress作为集群内服务对外暴漏的访问接入点&#xff0c;几乎承载着集群内服务访问的所有流量。ingress是k8s中的一个资源对象&#xff0c;用来管理集群外部访问集群内部服务的方式。可以通过ingress资源来配置不同的转发规则&#xff0c;从而…

Gitee:本土开发者生态的崛起与数字化转型新引擎

Gitee&#xff1a;本土开发者生态的崛起与数字化转型新引擎 在数字化转型浪潮席卷全球的当下&#xff0c;代码托管平台已从单纯的代码存储工具演变为企业技术创新的基础设施。作为中国领先的一站式DevOps平台&#xff0c;Gitee以其本地化优势和创新功能矩阵&#xff0c;正重新定…

Servlet HTTP 状态码详解

Servlet HTTP 状态码详解 引言 在Web开发中,HTTP状态码是服务器响应客户端请求时返回的状态信息。这些状态码有助于开发者了解请求处理的结果,并针对不同的状态码进行相应的处理。Servlet作为Java Web开发的重要技术之一,理解HTTP状态码对于开发高质量的Web应用至关重要。…

ubuntu qt环境下出现No suitable kits found解决方案

1. 清理 Qt Creator 缓存Qt Creator 会缓存项目配置、索引等数据&#xff0c;可能导致某些异常。清理方法&#xff1a;(1) 删除 Qt Creator 配置目录bashrm -rf ~/.config/QtProject/&#xff08;Ubuntu/Linux&#xff09; 或 Windows&#xff1a;cmdrmdir /s /q "%APPDAT…

【保姆级喂饭教程】Python依赖管理工具大全:Virtualenv、venv、Pipenv、Poetry、pdm、Rye、UV、Conda、Pixi等

目录前言1前言2一、包管理工具1. pip&#xff08;Python官方&#xff0c;2008&#xff09;二、虚拟环境工具1. virtualenv&#xff08;Ian Bicking&#xff0c;2007&#xff09;2. venv&#xff08;Python3.3&#xff0c;2012&#xff09;三、版本管理工具1. pyenv&#xff08;…

Linux进程概念(五)进程地址空间

地址空间排布这段空间中自上而下&#xff0c;地址是增长的&#xff0c;栈是向地址减小方向增长&#xff0c;里面存放函数中的临时变量&#xff0c;而堆是向地址增长方向增长&#xff0c;malloc开辟的地址空间存放在堆区&#xff0c;堆栈之间的共享区域&#xff0c;主要用来加载…

Go语言实战案例-判断二叉树是否对称

给定一棵二叉树&#xff0c;判断这棵树是否是对称的。对称的含义是&#xff1a;这棵树的左子树和右子树在结构上是镜像对称的&#xff0c;且对应节点的值相等。示例 1&#xff1a;1/ \2 2/ \ / \ 3 4 4 3输出&#xff1a;true示例 2&#xff1a;1/ \2 2\ \3 3输出&a…

【机器学习深度学习】为什么需要分布式训练?

目录 前言 一、模型规模爆炸&#xff1a;单卡GPU已难以承载 1.1 问题描述 1.2 面临挑战 1.3 解决方案&#xff1a;模型并行 (Model Parallelism) 1.4 类比理解&#xff1a;模型并行 1.5 模型并行的关键点 1.6 模型并行&#xff08;Model Parallelism&#xff09;的流程…

二十八、【Linux系统域名解析】DNS安装、子域授权、缓存DNS、分离解析、多域名解析

DNS服务深度解析&#xff1a;缓存、分离与多域名管理一、DNS服务架构全景DNS核心组件关系DNS服务器类型对比二、基础DNS服务配置1. Bind9核心配置文件2. 区域文件结构解析区域文件记录类型表三、子域授权与分层解析子域授权原理子域配置流程1. 父域配置2. 子域配置递归与迭代查…

【LeetCode】前缀表相关算法

目录1、介绍2、核心概念【1】前缀和后缀【2】最长公共前后缀&#xff08;LPS&#xff09;3、相关算法题【1】找出字符串中第一个匹配项的下标【2】重复的子字符串1、介绍 前缀表是一种在字符串匹配算法&#xff08;特别是KMP算法&#xff09;中使用的数据结构&#xff0c;用于…

(六) Spring AI 1.0版本 + 千问大模型+RAG

上篇文章我们大概讲了一下向量模型的知识&#xff0c;本篇文章&#xff0c;我们将会通过RAG实战的形式&#xff0c;来感受一下RAG。 项目准备 pom.xml 这里我们需要引入向量库和pdf相关的包<dependency><groupId>org.springframework.ai</groupId><artifa…

Spring Boot与Mybatis-Plus集成SQLServer的完整指南

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;本项目旨在演示如何将SQLServer与Spring Boot以及Mybatis-Plus框架进行整合&#xff0c;打造一个高效稳定的后端服务。详细介绍涉及了数据库连接、实体类定义、Mapper接口创建、Service层业务逻辑编写、Control…

【工作笔记】判断一条方法需不需要事务/AOP

① 看注解方法/类上有 Transactional → 需要事务&#xff0c;必须走代理方法/类上有自定义 AOP 注解&#xff08;如 Log、Retry、Cacheable 等&#xff09;→ 需要代理什么都没有 → 几乎肯定不需要示例需求Transactional public void generateDailyTask(...)✅ 需要事务publi…

Unity 的UI动画调节

在游戏开发中&#xff0c;精美的UI动画能极大提升用户体验。Unity提供了强大的动画系统&#xff0c;让开发者可以轻松创建流畅的界面动效。本文将介绍UI动画的核心概念、制作流程和实用技巧。一、核心动画组件Animation窗口 - 可视化创建关键帧动画Animator组件 - 控制动画状态…

26考研11408数据结构

数据结构 1.绪论1.1.1数据结构的基本概念 数据数据元素&#xff1a;数据的基本单位&#xff0c;一个数据元素由多个数据项组成&#xff0c;数据项是组成数据元素不可分割的最小单位数据对象&#xff1a;具有相同性质的数据元素的集合&#xff0c;是数据的一个子集数据类型&…

Solar月赛(应急响应)——攻击者使用什么漏洞获取了服务器的配置文件?

某某文化有限公司的运维小王刚刚搭建服务器发现cpu莫名的异常的升高请你帮助小王排查一下服务器。 文章目录事件介绍事件1&#xff1a;帮助小王找到是什么漏洞?事件2&#xff1a;系统每天晚上系统都会卡卡的帮小明找到问题出在了那&#xff1f;事件3&#xff1a;恶意域名是什么…

高频面试题

1.HashMap的底层原理JDK1.7版本之前&#xff0c;HashMap的底层数据结构是数组链表&#xff0c;HashMap通过哈希算法会将元素的key映射待数组的的槽位(Bucket)。如果多个键映射到同一个槽位&#xff0c;就会以链表的形式存储在同一个槽位上。但是链表的查询的复杂度O(n),所有冲突…