vllm atuo tune源码分析
auto_tune.sh脚本分析
-
start_server 函数
-
实现原理与方法说明:此函数负责启动一个vLLM推理服务器实例。其核心原理是根据传入的服务器配置参数(如GPU内存利用率、最大序列数、最大批处理令牌数),构造一个完整的vLLM服务启动命令,并在后台运行。函数通过循环检查
/health接口的HTTP状态码(等待最多10分钟)来判断服务器是否成功启动。它支持两种启动模式:一种是普通模式,仅启动服务;另一种是性能剖析模式(当profile_dir参数非空时),会通过设置环境变量VLLM_SERVER_DEV_MODE=1和--profiler-config参数来启用PyTorch Profiler,并将性能数据输出到指定目录,以便进行后续的性能分析。 -
run_benchmark 函数
-
实现原理与方法说明:此函数是自动调优的核心,用于对一组给定的服务器参数(
max_num_seqs和max_num_batched_tokens)进行性能评估。其工作流程是:首先调用start_server启动一个配置好的服务器,然后使用vllm bench serve命令对该服务器发起基准测试。测试采用“延迟感知的吞吐量搜索”策略:首先以无限请求速率(--request-rate inf)进行测试,获取该配置下的潜在最高吞吐量和对应的P99端到端延迟(e2el)。如果此延迟满足预设的MAX_LATENCY_ALLOWED_MS约束,则此吞吐量即为该配置的有效吞吐量。如果不满足,则进入一个while循环,逐步降低请求速率(每次减1),直到找到满足延迟约束的最高请求速率,此速率对应的吞吐量即为该配置的有效吞吐量。最后,函数会记录本次测试的结果(包括吞吐量、延迟、goodput),并与当前记录的最佳结果进行比较和更新。每次测试后,都会停止当前服务器进程,为下一轮测试做准备。 -
主脚本执行流程(从
# first find out the max gpu-memory-utilization without HBM OOM.到结尾) -
实现原理与方法说明:这是脚本的主要控制逻辑,并非一个独立的函数,但实现了完整的调优算法。其原理是网格搜索与最佳配置验证相结合。首先,它会通过一个
while循环动态探测在当前硬件和模型下可安全使用的最大gpu-memory-utilization值(从0.98开始递减),以防止在后续测试中出现内存不足(OOM)错误。然后,使用两层嵌套的for循环,遍历用户通过NUM_SEQS_LIST和NUM_BATCHED_TOKENS_LIST定义的所有参数组合,针对每个组合调用run_benchmark函数进行测试和评估。在遍历完所有组合后,如果找到了满足延迟要求的最佳配置,脚本会最后一次启动服务器并运行基准测试,但此次会启用性能剖析(Profiling),将详细的性能跟踪数据(如TPU的.xplane.pb文件)保存到PROFILE_PATH目录中,以供像TensorBoard这样的工具进行深入分析。整个流程确保了在给定的参数空间和约束条件下,系统性地找到能最大化吞吐量的最优服务器配置。
batch_auto_tune.sh脚本分析
-
主脚本执行流程(从
json_content=$(cat “$INPUT_JSON”)到done之间的for循环) -
实现原理与方法说明:此脚本本身没有定义显式的函数,其核心逻辑是一个遍历JSON配置数组的
for循环,实现了批量任务调度与结果聚合的功能。其原理是:读取一个外部的JSON配置文件,该文件包含一个由多个调优任务配置对象组成的数组。脚本使用jq工具解析JSON,并循环处理每个配置对象。在每次循环中,脚本会提取当前配置对象的所有键值对,并将键名转换为大写(以符合环境变量命名惯例),然后通过env命令将这些键值对作为环境变量传递给auto_tune.sh脚本执行。这实现了动态参数注入,使得单个配置对象就能驱动一次完整的自动调优过程。脚本会捕获每次运行的输出和退出状态,判断任务成功与否。对于成功的任务,它会从输出日志中解析出结果文件的路径,读取结果内容,并可选择性地将整个结果目录(包含日志和性能剖析数据)同步到指定的Google Cloud Storage路径。最后,脚本会将每次运行的结果(包括运行状态、结果文本、GCS路径等)作为新字段添加回原始的JSON配置对象中,实现结果的原位更新,从而生成一份包含所有实验输入参数和输出结果的完整报告。
夜雨聆风