Transformers 文档
快速入门
并获得增强的文档体验
开始使用
快速入门
Transformers 的设计旨在快速且易于使用,以便每个人都能开始学习或使用 transformer 模型进行构建。
面向用户的抽象数量被限制在仅三个用于实例化模型的类,以及两个用于推理或训练的 API。本快速入门将向您介绍 Transformers 的关键特性,并向您展示如何
设置
在开始之前,我们建议您创建一个 Hugging Face 账户。账户允许您在 Hugging Face Hub(一个用于发现和构建的协作平台)上托管并访问经过版本控制的模型、数据集和 Spaces。
创建 用户访问令牌 (User Access Token) 并登录您的账户。
在提示登录时,将您的用户访问令牌粘贴到 notebook_login 中。
from huggingface_hub import notebook_login
notebook_login()安装 PyTorch。
# remove ! if installing from the CLI
!pip install torch然后安装最新版本的 Transformers 以及 Hugging Face 生态系统中的一些其他库,用于访问数据集和视觉模型、评估训练以及为大型模型优化训练。
# remove ! if installing from the CLI
!pip install -U transformers datasets evaluate accelerate timm预训练模型
每个预训练模型都继承自三个基类。
| 分类 | 描述 |
|---|---|
| PreTrainedConfig | 一个指定模型属性的文件,例如注意力头数或词汇表大小。 |
| PreTrainedModel | 由配置文件中的模型属性定义的一个模型(或架构)。预训练模型仅返回原始隐藏状态。对于特定任务,请使用相应的模型头将原始隐藏状态转换为有意义的结果(例如,LlamaModel 与 LlamaForCausalLM 的区别)。 |
| Preprocessor | 一个用于将原始输入(文本、图像、音频、多模态)转换为模型数值输入的类。例如,PreTrainedTokenizer 将文本转换为张量,而 ImageProcessingMixin 将像素转换为张量。 |
我们建议使用 AutoClass API 来加载模型和预处理器,因为它会根据预训练权重和配置文件的名称或路径,为每个任务和机器学习框架自动推断合适的架构。
使用 from_pretrained() 将权重和配置文件从 Hub 加载到模型和预处理器类中。
加载模型时,请配置以下参数以确保模型得到最优加载。
device_map="auto"会自动将模型权重首先分配到最快的设备上。dtype="auto"直接以存储时的数据类型初始化模型权重,这有助于避免重复加载权重(PyTorch 默认以torch.float32加载权重)。
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-2-7b-hf", dtype="auto", device_map="auto")
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-2-7b-hf")使用分词器对文本进行分词并返回 PyTorch 张量。如果可用,将模型移动到加速器以加速推理。
model_inputs = tokenizer(["The secret to baking a good cake is "], return_tensors="pt").to(model.device)现在模型已准备好进行推理或训练。
对于推理,将分词后的输入传递给 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 参数传递模型名称来选择特定模型。
使用 Accelerator 自动检测可用于推理的加速器。
from transformers import pipeline
from accelerate import Accelerator
device = Accelerator().device
pipeline = pipeline("text-generation", model="meta-llama/Llama-2-7b-hf", device=device)向 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 模型的完整训练和评估循环。它抽象掉了手动编写训练循环时通常涉及的大量样板代码,因此您可以更快地开始训练并专注于训练设计的选择。您只需要一个模型、数据集、一个预处理器以及一个用于从数据集构建数据批次的数据整理器 (data collator)。
使用 TrainingArguments 类来定制训练过程。它为训练、评估等提供了许多选项。尝试调整训练超参数和特性,如批次大小 (batch size)、学习率、混合精度、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"],
processing_class=tokenizer,
data_collator=data_collator,
)
trainer.train()使用 push_to_hub() 将您的模型和分词器共享到 Hub。
trainer.push_to_hub()
恭喜,您刚刚使用 Transformers 训练了您的第一个模型!
后续步骤
现在您对 Transformers 及其提供的功能有了更深入的了解,是时候继续探索和学习您最感兴趣的内容了。
- 基类:详细了解配置 (configuration)、模型 (model) 和处理器 (processor) 类。这将帮助您理解如何创建和定制模型、预处理不同类型的输入(音频、图像、多模态)以及如何共享您的模型。
- 推理:进一步探索 Pipeline、与 LLM 的推理和对话、智能体 (agents),以及如何利用您的机器学习框架和硬件优化推理。
- 训练:更详细地研究 Trainer,以及分布式训练和在特定硬件上优化训练。
- 量化:通过量化减少内存和存储需求,并通过使用更少的位数表示权重来加快推理速度。
- 资源:正在寻找针对特定任务如何训练和推理模型的端到端方案?请查看任务方案 (task recipes)!