Optimum 文件

如何使用 optimum 和 BetterTransformer?

您正在檢視的是需要從原始碼安裝。如果您想進行常規的 pip 安裝,請檢視最新的穩定版本 (v1.27.0)。
Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

如何使用 optimum 和 BetterTransformer?

安裝依賴項

您可以輕鬆地將 BetterTransformer 與 🤗 Optimum 整合,首先按如下方式安裝依賴項

pip install transformers accelerate optimum

此外,請務必按照 PyTorch 官方網站 上的指南安裝最新版本的 PyTorch。請注意,BetterTransformer API 僅相容 torch>=1.13,因此請確保在開始之前已在您的環境中安裝此版本。如果您想從 scaled_dot_product_attention 函式(用於基於解碼器的模型)中受益,請確保至少使用 torch>=2.0

步驟 1:載入您的模型

首先,使用 🤗 Transformers 載入您的 Hugging Face 模型。請確保下載受 BetterTransformer API 支援的模型之一

>>> from transformers import AutoModel

>>> model_id = "roberta-base"
>>> model = AutoModel.from_pretrained(model_id)
有時,您可以使用 `accelerate` 庫直接將模型載入到 GPU 裝置上,因此您可以選擇嘗試以下命令
>>> from transformers import AutoModel

>>> model_id = "roberta-base"
>>> model = AutoModel.from_pretrained(model_id, device_map="auto")

步驟 2:在您偏好的裝置上設定模型

如果您沒有使用 device_map="auto" 載入模型(或者如果您的模型不支援 device_map="auto"),您可以手動將模型設定到 GPU 上

>>> model = model.to(0) # or model.to("cuda:0")

步驟 3:將您的模型轉換為 BetterTransformer!

現在是時候使用 BetterTransformer API 轉換您的模型了!您可以執行以下命令

>>> from optimum.bettertransformer import BetterTransformer

>>> model = BetterTransformer.transform(model)

預設情況下,BetterTransformer.transform 將覆蓋您的模型,這意味著您之前的原生模型將無法再使用。如果您想出於某種原因保留它,只需新增標誌 keep_original_model=True

>>> from optimum.bettertransformer import BetterTransformer

>>> model_bt = BetterTransformer.transform(model, keep_original_model=True)

如果您的模型不支援 BetterTransformer API,則會顯示錯誤跟蹤。另請注意,基於解碼器的模型(OPT、BLOOM 等)尚不受支援,但這已在 PyTorch 的未來路線圖中。

Pipeline 相容性

Transformer 的 pipeline 也與此整合相容,您可以將 BetterTransformer 用作 pipeline 的加速器。以下程式碼片段演示瞭如何操作

>>> from optimum.pipelines import pipeline

>>> pipe = pipeline("fill-mask", "distilbert-base-uncased", accelerator="bettertransformer")
>>> pipe("I am a student at [MASK] University.")

如果您想在 GPU 裝置上執行 pipeline,請執行

>>> from optimum.pipelines import pipeline

>>> pipe = pipeline("fill-mask", "distilbert-base-uncased", accelerator="bettertransformer", device=0)
>>> ...

您也可以像往常一樣使用 transformers.pipeline 並直接傳入轉換後的模型

>>> from transformers import pipeline

>>> pipe = pipeline("fill-mask", model=model_bt, tokenizer=tokenizer, device=0)
>>> ...

有關進一步使用,請參閱 pipeline 的官方文件。如果您遇到任何問題,請隨時在 GitHub 上提出問題!

訓練相容性

您現在可以從 BetterTransformer API 中受益,用於您的訓練指令碼。只需確保在儲存模型之前透過呼叫 BetterTransformer.reverse 將模型轉換回其原始版本。以下程式碼片段演示瞭如何操作

from optimum.bettertransformer import BetterTransformer
from transformers import AutoModelForCausalLM

with torch.device(“cuda”):
    model = AutoModelForCausalLM.from_pretrained(“gpt2-large”, torch_dtype=torch.float16)

model = BetterTransformer.transform(model)

# do your inference or training here

# if training and want to save the model
model = BetterTransformer.reverse(model)
model.save_pretrained("fine_tuned_model")
model.push_to_hub("fine_tuned_model")
< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.