跳到内容

Intel® Neural Compressor

vLLM 硬件插件,适用于 Intel® Gaudi®,支持在 Intel® Gaudi® 2 和 Intel® Gaudi® 3 AI 加速器上使用 Intel® Neural Compressor 进行 8 位浮点 (FP8) 权重和激活量化。Intel® Gaudi® 支持对各种模块和函数进行量化,包括 LinearKVCacheMatmulSoftmax。有关更多信息,请参阅 自定义补丁模块。目前,量化仅在 Llama 模型上进行了验证。

本指南介绍了量化和推理的步骤。由于推理依赖于先前的校准,因此过程从校准您的模型开始。校准会生成运行量化模型所需的必要测量、量化文件和配置数据。这些校准输出至关重要,因为它们提供了特定于模型的指标并定义了推理过程中应用的量化参数。要校准您的模型,请遵循 校准 指南。校准完成后,您可以继续执行本文档中描述的离线或在线推理。

有关将 BF16 Llama 3.1 模型量化为 FP8,然后进行推理的端到端示例教程,请参阅 此指南

建议

  • 在运行推理之前,请确保您的测量是在用于推理的同一设备类型上生成的。测量值是设备依赖的,因此在 Intel® Gaudi® 3 上校准期间收集的量表无法在 Intel® Gaudi® 2 上重复使用,反之亦然。使用在不同设备类型上生成的测量值可能会导致准确性问题。

  • 对于使用 FP8 进行模型原型设计或测试,您可以设置环境变量 VLLM_SKIP_WARMUP=true 来禁用耗时的预热阶段。但是,我们不建议在生产环境中禁用它,因为它可能导致性能显着下降。

  • 在使用 FP8 模型时,您可能会因为 FP8 操作所需的长时间编译时间而遇到超时。要解决此问题,您可以配置以下环境变量

    可变 描述
    VLLM_ENGINE_ITERATION_TIMEOUT_S 调整 vLLM 服务器超时。值以秒为单位。
    VLLM_RPC_TIMEOUT 调整 OpenAI 兼容 API 使用的 RPC 协议超时。值以微秒为单位。

    设置更高的超时值有助于防止模型编译期间的中断,并提高运行 FP8 模型时的稳定性。

  • 使用 scale_format=const 对 FP8 模型进行基准测试时,VLLM_DISABLE_MARK_SCALES_AS_CONST=true 设置可以帮助加快预热阶段。

  • 当使用 scale_format=scalar 和惰性模式 (PT_HPU_LAZY_MODE=1) 运行 FP8 模型时,您可以设置 RUNTIME_SCALE_PATCHING=1 来显着减少预热时间。但是,它可能会引入轻微的性能下降。运行时量表补丁默认情况下对 Torch 编译启用。

运行在线推理

要使用 vLLM 运行 FP8 推理,请使用以下命令

export QUANT_CONFIG=/path/to/quant/config/inc/meta-llama-3.1-405b-instruct/maxabs_quant_g3.json
vllm serve meta-llama/Llama-3.1-405B-Instruct --dtype bfloat16 --max-model-len  2048 --block-size 128 --max-num-seqs 32 --quantization inc --kv-cache-dtype fp8_inc --tensor-parallel-size 8

其中

  • QUANT_CONFIG:环境变量,指定在校准过程中生成的量化配置文件路径。

  • --quantization inc--kv-cache-dtype fp8_inc 参数使用 INC 和 QUANT_CONFIG 启用 FP8 量化。

运行离线推理

要运行离线推理,请遵循以下步骤

  1. QUANT_CONFIG 环境变量设置为校准期间生成的 JSON 配置文件路径。

    export QUANT_CONFIG=/path/to/quant/config/inc/meta-llama-3.1-405b-instruct/maxabs_quant_g3.json
    
  2. quantization="inc"kv_cache_dtype="fp8_inc" 作为参数传递给 LLM 对象。

    from vllm import LLM
    
    llm = LLM("llama3.1/Meta-Llama-3.1-8B-Instruct", quantization="inc", kv_cache_dtype="fp8_inc")
    

模型权重加载过程

未量化的权重首先加载到 CPU,然后在 CPU 上进行量化,之后再传输到目标设备 (HPU) 执行模型。此过程减少了模型在设备上的内存占用,因为只有量化后的权重存储在设备内存中。