Optimum 文档

加速推理

您正在查看 main 版本,该版本需要从源代码安装. 如果您想要常规 pip 安装,请查看最新的稳定版本 (v1.24.0)。
Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

加速推理

Intel Gaudi 提供了几种加快推理速度的可能性。

Lazy 模式

支持以下执行模式

  • Lazy 模式,其中操作累积在一个图中,该图的执行以延迟方式触发。这允许图编译器优化这些操作的设备执行。
  • Eager 模式,其中一次执行一个操作。
  • 使用 torch.compileEager 模式,其中模型(或模型的一部分)被封装到一个图中。

并非所有模型都支持 Eager 模式和使用 torch.compile 的 Eager 模式(仍在开发中)。Lazy 模式是默认模式。

在 Lazy 模式下,图编译器生成优化的二进制代码,该代码在 Gaudi 上实现给定的模型拓扑。它执行运算符融合、数据布局管理、并行化、流水线化和内存管理,以及图级优化。

要在 Lazy 模式下执行推理,您必须提供以下参数

args = GaudiTrainingArguments(
    # same arguments as in Transformers,
    use_habana=True,
    use_lazy_mode=True,
)

在 Lazy 模式下,最后一个批次可能会触发额外的编译,因为它可能小于之前的批次。为了避免这种情况,您可以使用 dataloader_drop_last=True 丢弃最后一个批次。

HPU Graphs

Gaudi 提供了一种使用 HPU Graphs 运行快速推理的方法。它包括在 HPU 流中捕获一系列操作(即图),然后以优化的方式重放它们(更多信息请参见此处)。因此,您可以将其应用于模型的 forward 方法,以便在推理时高效运行。

HPU Graphs 已集成到 GaudiTrainerGaudiStableDiffusionPipeline 中,因此可以非常容易地使用它们

  • GaudiTrainer 需要将训练参数 use_hpu_graphs_for_inference 设置为 True,如下所示
from optimum.habana import GaudiTrainer, GaudiTrainingArguments

# define the training arguments
training_args = GaudiTrainingArguments(
    use_habana=True,
    use_lazy_mode=True,
    use_hpu_graphs_for_inference=True,
    gaudi_config_name=gaudi_config_name,
    ...
)

# Initialize our Trainer
trainer = GaudiTrainer(
    model=model,
    args=training_args,
    train_dataset=train_dataset
    ... # other arguments
)
  • GaudiStableDiffusionPipeline 需要将其参数 use_hpu_graphs 设置为 True,例如
from optimum.habana.diffusers import GaudiDDIMScheduler, GaudiStableDiffusionPipeline

model_name = "CompVis/stable-diffusion-v1-4"

scheduler = GaudiDDIMScheduler.from_pretrained(model_name, subfolder="scheduler")

pipeline = GaudiStableDiffusionPipeline.from_pretrained(
    model_name,
    scheduler=scheduler,
    use_habana=True,
    use_hpu_graphs=True,
    gaudi_config="Habana/stable-diffusion",
)

outputs = generator(
    ["An image of a squirrel in Picasso style"],
    num_images_per_prompt=16,
    batch_size=4,
)

使用 HPU Graphs 和 Lazy 模式,前几次迭代 可能会由于图编译而变慢。

自定义运算符

Intel Gaudi 提供了一些自定义运算符,它们比 PyTorch 对应的运算符具有更好的性能。您还可以为 Gaudi 定义自己的自定义运算符,如此处所述。

Gaudi 优化 Flash Attention

Lazy 和 Eager 模式均支持采用额外的 Intel Gaudi AI 加速器优化的 Flash attention 算法。请参阅使用融合缩放点积注意力 (FusedSDPA)

< > 在 GitHub 上更新