跳到内容

管理和减少预热时间

本文档提供了在 Intel® Gaudi® 加速器上使用 vLLM 模型部署时减少预热时间的指南。它概述了 HPU 图缓存、分桶策略以及实验性功能的使用,以提高模型性能。

通过 HPU 图缓存减少预热时间

Intel Gaudi 软件支持使用 PT_HPU_RECIPE_CACHE_CONFIG 环境变量缓存已编译的 HPU 图。通过重用先前编译的图,可以显著缩短启动时间。

设置此变量需要使用以下格式

export PT_HPU_RECIPE_CACHE_CONFIG=<RECIPE_CACHE_PATH>,<RECIPE_CACHE_DELETE>,<RECIPE_CACHE_SIZE_MB>

其中

  • RECIPE_CACHE_PATH:用于存储已编译的图谱配方的目录。
  • RECIPE_CACHE_DELETE:一个布尔值,控制缓存行为:当设置为 true 时,在存储新的图谱编译配方之前会清除现有内容;当设置为 false 时,会重用存储在 RECIPE_CACHE_PATH 中的图谱编译配方,从而加快预热速度。
  • RECIPE_CACHE_SIZE_MB:设置缓存目录的最大大小(以 MB 为单位)。如果达到缓存大小限制,PyTorch bridge 会根据文件的创建时间自动删除最旧的配方。我们建议根据模型和用例需求调整缓存目录大小。

图编译过程包括两个阶段:GC 图编译和 HPU 图编译。当启用了 PT_HPU_RECIPE_CACHE_CONFIG 时,通过重用缓存的图谱可以跳过 GC 阶段,从而显著减少总编译时间。然而,HPU 图谱编译步骤仍然会被执行。在以下情况下,图谱需要重新生成

  • PyTorch 容器或 Intel® Gaudi® 软件版本发生更改。
  • 平台发生更改,例如从 Intel® Gaudi® 2 更改为 Intel® Gaudi® 3。
  • 模型张量并行性或数据类型发生更改,例如,从 BF16 更改为 FP8 或从 FP8 更改为 BF16。

存储建议

对于跨进程共享缓存的横向扩展场景,我们建议使用本地磁盘。应避免使用 NFS 等远程文件系统,因为它们不支持文件锁定。

在 Kubernetes 环境中,缓存可以存储在 PVC 或 NFS 上,但在使用之前应将其复制到本地磁盘。

有关使用示例,请参阅 Intel Gaudi 教程

使用 vLLM 进行部署

要缓存已编译的 HPU 图谱并减少启动时间,请使用以下方法之一。

服务命令

将缓存参数添加到服务命令中,如下例所示,适用于 Llama 3.1 8B

# Store in cache
export PT_HPU_RECIPE_CACHE_CONFIG='/tmp/llama3_8b_recipe_cache/',True,8192
# Replay from cache
export PT_HPU_RECIPE_CACHE_CONFIG='/tmp/llama3_8b_recipe_cache/',False,8192
VLLM_PROMPT_BS_BUCKET_MAX=256 \
VLLM_DECODE_BS_BUCKET_MIN=128 \
VLLM_DECODE_BS_BUCKET_STEP=128 \
VLLM_DECODE_BS_BUCKET_MAX=128 \
VLLM_PROMPT_SEQ_BUCKET_MAX=1024 \
VLLM_DECODE_BLOCK_BUCKET_MAX=1024 \
PT_HPU_WEIGHT_SHARING=0 PT_HPU_MAX_COMPOUND_OP_SIZE=30 PT_HPU_LAZY_MODE=1 PT_HPU_ENABLE_LAZY_COLLECTIVES=true vllm serve meta-llama/Llama-3.1-8B-instruct -tp 1 --weights-load-device cpu --max-model-len 8192

这会产生以下结果

精度 无缓存 有缓存 时间缩减
BF16 66 秒 23 秒 提速约 65%
FP8 504 秒 34 秒 提速约 93%

Docker

Dockerfile 中无需进行任何更改,因为配方缓存特定于模型和用例。使用 -e 标志设置环境变量

-e PT_HPU_RECIPE_CACHE_CONFIG='/tmp/llama3_8b_recipe_cache/',True,8192

桶管理

vLLM 的预热时间取决于必须编译以支持动态形状的 HPU 图的数量。这些形状受 batch_sizequery_lengthnum_context_blocks 的影响。将它们根据 max_num_batched_tokens 进行设置,可确保运行时不会编译额外的图谱。

指数桶

VLLM_EXPONENTIAL_BUCKETING=True 标志(自 vLLM 1.21.0-post1 版本起默认启用)将分桶策略从线性更改为指数。这可以将桶的数量和预热时间减少高达 80%,同时通常保持可比的推理性能。然而,在某些配置中,由于填充增加,可能会导致性能略有下降。此设置对于 BF16 和 FP8 模型尤其有效。要使用线性分桶,请将 VLLM_EXPONENTIAL_BUCKETING=False 设置为 False