Optimum 文档
加速推理
加入 Hugging Face 社区
并获得增强的文档体验
开始使用
加速推理
Intel Gaudi 提供了几种方法来加速推理。
惰性模式
支持以下执行模式:
- 惰性模式:操作累积在一个图中,其执行以惰性方式触发。这允许图编译器优化这些操作的设备执行。
- 急切模式:一次执行一个操作。
- 带 torch.compile 的急切模式:模型(或模型的一部分)封装在一个图中。
并非所有模型都支持急切模式和带 torch.compile 的急切模式(仍在开发中)。惰性模式是默认模式。
在惰性模式下,图编译器生成优化的二进制代码,该代码在 Gaudi 上实现给定模型拓扑。它执行运算符融合、数据布局管理、并行化、流水线和内存管理,以及图级优化。
要在惰性模式下执行推理,您必须提供以下参数
args = GaudiTrainingArguments(
# same arguments as in Transformers,
use_habana=True,
use_lazy_mode=True,
)
在惰性模式下,最后一个批次可能会触发额外的编译,因为它可能比之前的批次小。为避免这种情况,您可以使用 `dataloader_drop_last=True` 丢弃最后一个批次。
HPU 图
Gaudi 提供了一种使用 HPU 图运行快速推理的方法。它包括在 HPU 流中捕获一系列操作(即图),然后以优化的方式重放它们(更多信息此处)。因此,您可以将其应用于模型的 `forward` 方法,以在推理时高效运行它。
HPU 图已集成到 `GaudiTrainer` 和 `GaudiStableDiffusionPipeline` 中,以便可以非常轻松地使用它们。
- `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 图并在惰性模式下,前几次迭代可能会由于图编译而变慢。
自定义运算符
Intel Gaudi 提供了一些自定义运算符,它们比其 PyTorch 对应物具有更好的性能。您还可以在此处所述的方式为 Gaudi 定义自己的自定义运算符。
Gaudi 优化的 Flash Attention
惰性模式和急切模式都支持带有额外 Intel Gaudi AI 加速器优化的 Flash Attention 算法。请参阅使用融合缩放点积注意力 (FusedSDPA)。
< > 在 GitHub 上更新