跳到内容

性能调优

了解配置设置如何影响系统行为对于有效的性能管理至关重要。本文档解释了如何调优和优化性能。

内存分配

HPU 图和 KV 缓存共享同一可用内存池,该内存池由 gpu_memory_utilization 确定。两者之间的内存分配必须平衡,以防止性能下降。您可以在日志中找到模型内存消耗信息。日志提供了模型权重加载期间、剖析运行(使用虚拟数据且不带 KV 缓存)期间的设备内存使用情况,以及预热阶段开始前可用的最终可用内存。您可以使用此信息来确定合适的预热分桶方案。以下示例显示了 Meta-Llama-3.1-8B 模型生成的服务器日志的初始部分

INFO 09-24 17:31:39 habana_model_runner.py:590] Pre-loading model weights on hpu:0 took 15.05 GiB of device memory (15.05 GiB/94.62 GiB used) and 1.067 GiB of host memory (8.199 GiB/108.2 GiB used)
INFO 09-24 17:31:39 habana_model_runner.py:636] Wrapping in HPU Graph took 0 B of device memory (15.05 GiB/94.62 GiB used) and -3.469 MiB of host memory (8.187 GiB/108.2 GiB used)
INFO 09-24 17:31:39 habana_model_runner.py:640] Loading model weights took in total 15.05 GiB of device memory (15.05 GiB/94.62 GiB used) and 1.056 GiB of host memory (8.188 GiB/108.2 GiB used)
INFO 09-24 17:31:40 habana_worker.py:153] Model profiling run took 355 MiB of device memory (15.4 GiB/94.62 GiB used) and 131.4 MiB of host memory (8.316 GiB/108.2 GiB used)
INFO 09-24 17:31:40 habana_worker.py:177] Free device memory: 79.22 GiB, 71.3 GiB usable (gpu_memory_utilization=0.9), 7.13 GiB reserved for HPUGraphs (VLLM_GRAPH_RESERVED_MEM=0.1), 64.17 GiB reserved for KV cache
INFO 09-24 17:31:40 habana_executor.py:85] # HPU blocks: 4107, # CPU blocks: 256
INFO 09-24 17:31:41 habana_worker.py:208] Initializing cache engine took 64.17 GiB of device memory (79.57 GiB/94.62 GiB used) and 1.015 GiB of host memory (9.329 GiB/108.2 GiB used)

您可以使用 VLLM_GRAPH_RESERVED_MEM 环境变量来控制 HPU 图和 KV 缓存之间的比例。增加 KV 缓存大小可以实现更大的批处理,从而提高整体吞吐量。启用 HPU 图有助于减少主机 开销,并可以降低延迟。

以下示例显示了预热阶段的日志

INFO 09-24 17:32:13 habana_model_runner.py:1477] Graph/Prompt captured:24 (100.0%) used_mem:67.72 MiB buckets:[(1, 128), (1, 256), (1, 384), (1, 512), (1, 640), (1, 768), (1, 896), (1, 1024), (2, 128), (2, 256), (2, 384), (2, 512), (2, 640), (2, 768), (2, 896), (2, 1024), (4, 128), (4, 256), (4, 384), (4, 512), (4, 640), (4, 768), (4, 896), (4, 1024)]
INFO 09-24 17:32:13 habana_model_runner.py:1477] Graph/Decode captured:1 (100.0%) used_mem:64 KiB buckets:[(4, 128)]
INFO 09-24 17:32:13 habana_model_runner.py:1620] Warmup finished in 32 secs, allocated 92.77 MiB of device memory
INFO 09-24 17:32:13 habana_executor.py:91] init_cache_engine took 64.26 GiB of device memory (79.66 GiB/94.62 GiB used) and 1.104 GiB of host memory (9.419 GiB/108.2 GiB used)

分析完这些日志后,您应该能够很好地了解剩余的可用设备内存以及通过增加 gpu_memory_utilization 还可以使用多少内存。您可以平衡预热分桶、HPU 图和 KV 缓存的内存分配,以适应您的工作负载需求。

分桶机制

分桶机制可以帮助优化不同工作负载的性能。vLLM 服务器预先配置为处理高请求并发的重解码场景,并使用默认的最大批处理大小策略(VLLM_GRAPH_DECODE_STRATEGY)。在低负载期间,此配置可能不是理想的,可以调整为较小的批处理大小。例如,通过 VLLM_DECODE_BS_BUCKET_{param} 修改分桶范围可以提高效率。有关控制分桶行为的环境变量列表,请参阅 环境变量 文档。

浮点 8 位

使用浮点 8 位 (FP8) 数据类型处理大型语言模型可将内存带宽要求减半,相比 BF16。此外,FP8 计算速度是 BF16 的两倍,即使对于计算密集型工作负载(如大批量离线推理)也能带来性能提升。有关更多信息,请参阅 浮点 8 位 文档。

预热

在开发阶段,当评估 vLLM 上的模型进行推理时,您可以使用 VLLM_SKIP_WARMUP=true 环境变量跳过服务器的预热阶段。这有助于实现更快的测试周转时间。然而,禁用预热仅可用于开发目的,我们强烈建议在生产环境中保持启用状态。在部署时保持预热启用,并使用最佳数量的 分桶

预热时间取决于许多因素,例如输入和输出序列长度、批处理大小、分桶数量和数据类型。根据配置,甚至可能需要几个小时。有关更多信息,请参阅 预热 文档。