Transformers 文件

快速入門

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

快速入門

Transformers 旨在快速、易於使用,讓每個人都能開始學習或使用 Transformer 模型進行構建。

面向使用者的抽象數量僅限於三個用於例項化模型的類,以及兩個用於推理或訓練的 API。本快速入門將向您介紹 Transformers 的主要功能,並展示如何:

  • 載入預訓練模型
  • 使用 Pipeline 執行推理
  • 使用 Trainer 微調模型

設定

首先,我們建議您建立一個 Hugging Face 賬戶。一個賬戶可以讓您在 Hugging Face Hub(一個用於發現和構建的協作平臺)上託管和訪問版本控制的模型、資料集和 Spaces

建立一個使用者訪問令牌並登入到您的賬戶。

notebook
CLI

在提示登入時,將您的使用者訪問令牌貼上到 notebook_login 中。

from huggingface_hub import notebook_login

notebook_login()

安裝一個機器學習框架。

PyTorch
TensorFlow
!pip install torch

然後安裝最新版本的 Transformers 和一些來自 Hugging Face 生態系統的額外庫,用於訪問資料集和視覺模型、評估訓練以及最佳化大型模型的訓練。

!pip install -U transformers datasets evaluate accelerate timm

預訓練模型

每個預訓練模型都繼承自三個基類。

分類 描述
PretrainedConfig 一個指定模型屬性(如注意力頭數或詞彙表大小)的檔案。
PreTrainedModel 一個由配置檔案中的模型屬性定義的模型(或架構)。預訓練模型僅返回原始的隱藏狀態。對於特定任務,請使用適當的模型頭將原始隱藏狀態轉換為有意義的結果(例如,LlamaModelLlamaForCausalLM)。
Preprocessor 一個用於將原始輸入(文字、影像、音訊、多模態)轉換為模型數值輸入的類。例如,PreTrainedTokenizer 將文字轉換為張量,而 ImageProcessingMixin 將畫素轉換為張量。

我們建議使用 AutoClass API 載入模型和預處理器,因為它會根據預訓練權重和配置檔案的名稱或路徑,自動推斷出適合每個任務和機器學習框架的架構。

使用 from_pretrained() 將 Hub 上的權重和配置檔案載入到模型和預處理器類中。

PyTorch
TensorFlow

載入模型時,請配置以下引數以確保模型被最佳化載入。

  • device_map="auto" 會自動將模型權重分配到最快的裝置上,通常是 GPU。
  • torch_dtype="auto" 直接以權重儲存的資料型別初始化模型權重,這有助於避免重複載入權重(PyTorch 預設以 torch.float32 載入權重)。
from transformers import AutoModelForCausalLM, AutoTokenizer

model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-2-7b-hf", torch_dtype="auto", device_map="auto")
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-2-7b-hf")

使用分詞器對文字進行分詞,並返回 PyTorch 張量。如果 GPU 可用,請將模型移動到 GPU 上以加速推理。

model_inputs = tokenizer(["The secret to baking a good cake is "], return_tensors="pt").to("cuda")

模型現在已準備好進行推理或訓練。

對於推理,將分詞後的輸入傳遞給 generate() 以生成文字。使用 batch_decode() 將 token id 解碼迴文本。

generated_ids = model.generate(**model_inputs, max_length=30)
tokenizer.batch_decode(generated_ids)[0]
'<s> The secret to baking a good cake is 100% in the preparation. There are so many recipes out there,'

跳到 Trainer 部分,瞭解如何微調模型。

Pipeline

Pipeline 類是使用預訓練模型進行推理最便捷的方式。它支援多種任務,如文字生成、影像分割、自動語音識別、文件問答等。

請參閱 Pipeline API 參考,瞭解可用任務的完整列表。

建立一個 Pipeline 物件並選擇一個任務。預設情況下,Pipeline 會為給定任務下載並快取一個預設的預訓練模型。將模型名稱傳遞給 model 引數以選擇特定模型。

文字生成
影像分割
自動語音識別

設定 device="cuda" 以使用 GPU 加速推理。

from transformers import pipeline

pipeline = pipeline("text-generation", model="meta-llama/Llama-2-7b-hf", device="cuda")

Pipeline 提供一些初始文字以生成更多文字。

pipeline("The secret to baking a good cake is ", max_length=50)
[{'generated_text': 'The secret to baking a good cake is 100% in the batter. The secret to a great cake is the icing.\nThis is why we’ve created the best buttercream frosting reci'}]

Trainer

Trainer 是一個用於 PyTorch 模型的完整訓練和評估迴圈。它抽象了手動編寫訓練迴圈時通常涉及的大量樣板程式碼,因此您可以更快地開始訓練,並專注於訓練設計選擇。您只需要一個模型、一個數據集、一個預處理器和一個數據整理器來從資料集中構建批次資料。

使用 TrainingArguments 類來自定義訓練過程。它為訓練、評估等提供了許多選項。嘗試使用訓練超引數和功能(如批次大小、學習率、混合精度、torch.compile 等)來滿足您的訓練需求。您也可以使用預設的訓練引數快速生成一個基線。

載入一個模型、分詞器和資料集進行訓練。

from transformers import AutoModelForSequenceClassification, AutoTokenizer
from datasets import load_dataset

model = AutoModelForSequenceClassification.from_pretrained("distilbert/distilbert-base-uncased")
tokenizer = AutoTokenizer.from_pretrained("distilbert/distilbert-base-uncased")
dataset = load_dataset("rotten_tomatoes")

建立一個函式來對文字進行分詞並將其轉換為 PyTorch 張量。使用 map 方法將此函式應用於整個資料集。

def tokenize_dataset(dataset):
    return tokenizer(dataset["text"])
dataset = dataset.map(tokenize_dataset, batched=True)

載入一個數據整理器以建立資料批次,並將分詞器傳遞給它。

from transformers import DataCollatorWithPadding

data_collator = DataCollatorWithPadding(tokenizer=tokenizer)

接下來,使用訓練特性和超引數設定 TrainingArguments

from transformers import TrainingArguments

training_args = TrainingArguments(
    output_dir="distilbert-rotten-tomatoes",
    learning_rate=2e-5,
    per_device_train_batch_size=8,
    per_device_eval_batch_size=8,
    num_train_epochs=2,
    push_to_hub=True,
)

最後,將所有這些獨立的元件傳遞給 Trainer 並呼叫 train() 開始訓練。

from transformers import Trainer

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=dataset["train"],
    eval_dataset=dataset["test"],
    tokenizer=tokenizer,
    data_collator=data_collator,
)

trainer.train()

使用 push_to_hub() 將您的模型和分詞器分享到 Hub。

trainer.push_to_hub()

恭喜,您剛剛用 Transformers 訓練了您的第一個模型!

TensorFlow

並非所有預訓練模型都在 TensorFlow 中可用。請參閱模型的 API 文件以檢查是否支援 TensorFlow 實現。

Trainer 不適用於 TensorFlow 模型,但您仍然可以使用 Keras 訓練在 TensorFlow 中實現的 Transformers 模型。Transformers TensorFlow 模型是標準的 tf.keras.Model,與 Keras 的 compilefit 方法相容。

載入一個模型、分詞器和資料集進行訓練。

from transformers import TFAutoModelForSequenceClassification, AutoTokenizer

model = TFAutoModelForSequenceClassification.from_pretrained("distilbert/distilbert-base-uncased")
tokenizer = AutoTokenizer.from_pretrained("distilbert/distilbert-base-uncased")

建立一個函式來對文字進行分詞並將其轉換為 TensorFlow 張量。使用 map 方法將此函式應用於整個資料集。

def tokenize_dataset(dataset):
    return tokenizer(dataset["text"])
dataset = dataset.map(tokenize_dataset)

Transformers 提供了 prepare_tf_dataset() 方法來整理和批處理資料集。

tf_dataset = model.prepare_tf_dataset(
    dataset["train"], batch_size=16, shuffle=True, tokenizer=tokenizer
)

最後,呼叫 compile 來配置模型進行訓練,並呼叫 fit 來開始訓練。

from tensorflow.keras.optimizers import Adam

model.compile(optimizer="adam")
model.fit(tf_dataset)

下一步

現在您對 Transformers 及其功能有了更好的瞭解,是時候繼續探索和學習您最感興趣的內容了。

  • 基類:瞭解更多關於配置、模型和處理器類的資訊。這將幫助您理解如何建立和自定義模型,預處理不同型別的輸入(音訊、影像、多模態),以及如何分享您的模型。
  • 推理:進一步探索 Pipeline、使用 LLM 進行推理和聊天、代理,以及如何利用您的機器學習框架和硬體最佳化推理。
  • 訓練:更詳細地學習 Trainer,以及分散式訓練和在特定硬體上最佳化訓練。
  • 量化:透過量化減少記憶體和儲存需求,並透過使用更少的位元表示權重來加速推理。
  • 資源:正在尋找關於如何為特定任務訓練和推理模型的端到端配方?請檢視任務配方!
< > 在 GitHub 上更新

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