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 上更新