Transformers 文件
快速入門
並獲得增強的文件體驗
開始使用
快速入門
Transformers 旨在快速、易於使用,讓每個人都能開始學習或使用 Transformer 模型進行構建。
面向使用者的抽象數量僅限於三個用於例項化模型的類,以及兩個用於推理或訓練的 API。本快速入門將向您介紹 Transformers 的主要功能,並展示如何:
設定
首先,我們建議您建立一個 Hugging Face 賬戶。一個賬戶可以讓您在 Hugging Face Hub(一個用於發現和構建的協作平臺)上託管和訪問版本控制的模型、資料集和 Spaces。
建立一個使用者訪問令牌並登入到您的賬戶。
在提示登入時,將您的使用者訪問令牌貼上到 notebook_login 中。
from huggingface_hub import notebook_login
notebook_login()
安裝一個機器學習框架。
!pip install torch
然後安裝最新版本的 Transformers 和一些來自 Hugging Face 生態系統的額外庫,用於訪問資料集和視覺模型、評估訓練以及最佳化大型模型的訓練。
!pip install -U transformers datasets evaluate accelerate timm
預訓練模型
每個預訓練模型都繼承自三個基類。
分類 | 描述 |
---|---|
PretrainedConfig | 一個指定模型屬性(如注意力頭數或詞彙表大小)的檔案。 |
PreTrainedModel | 一個由配置檔案中的模型屬性定義的模型(或架構)。預訓練模型僅返回原始的隱藏狀態。對於特定任務,請使用適當的模型頭將原始隱藏狀態轉換為有意義的結果(例如,LlamaModel 與 LlamaForCausalLM)。 |
Preprocessor | 一個用於將原始輸入(文字、影像、音訊、多模態)轉換為模型數值輸入的類。例如,PreTrainedTokenizer 將文字轉換為張量,而 ImageProcessingMixin 將畫素轉換為張量。 |
我們建議使用 AutoClass API 載入模型和預處理器,因為它會根據預訓練權重和配置檔案的名稱或路徑,自動推斷出適合每個任務和機器學習框架的架構。
使用 from_pretrained() 將 Hub 上的權重和配置檔案載入到模型和預處理器類中。
載入模型時,請配置以下引數以確保模型被最佳化載入。
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 的 compile 和 fit 方法相容。
載入一個模型、分詞器和資料集進行訓練。
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,以及分散式訓練和在特定硬體上最佳化訓練。
- 量化:透過量化減少記憶體和儲存需求,並透過使用更少的位元表示權重來加速推理。
- 資源:正在尋找關於如何為特定任務訓練和推理模型的端到端配方?請檢視任務配方!