Transformers 文档

快速入门

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

快速入门

Transformers 的设计旨在快速且易于使用,以便每个人都能开始学习或使用 transformer 模型进行构建。

面向用户的抽象数量被限制在仅三个用于实例化模型的类,以及两个用于推理或训练的 API。本快速入门将向您介绍 Transformers 的关键特性,并向您展示如何

  • 加载预训练模型
  • 使用 Pipeline 运行推理
  • 使用 Trainer 微调模型

设置

在开始之前,我们建议您创建一个 Hugging Face 账户。账户允许您在 Hugging Face Hub(一个用于发现和构建的协作平台)上托管并访问经过版本控制的模型、数据集和 Spaces

创建 用户访问令牌 (User Access Token) 并登录您的账户。

notebook
CLI

在提示登录时,将您的用户访问令牌粘贴到 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 由配置文件中的模型属性定义的一个模型(或架构)。预训练模型仅返回原始隐藏状态。对于特定任务,请使用相应的模型头将原始隐藏状态转换为有意义的结果(例如,LlamaModelLlamaForCausalLM 的区别)。
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)!
在 GitHub 上更新

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