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,以及分布式训练和在特定硬件上优化训练。
- 量化:通过量化减少内存和存储需求,并通过使用更少的比特表示权重来加速推理。
- 资源:正在寻找关于如何为特定任务训练和推理模型的端到端配方?请查看任务配方!