0 前言
Transformers设计目标是简单易用,让每个人都能轻松上手学习和构建 Transformer 模型。
用户只需掌握三个主要的类和两个 API,即可实现模型实例化、推理和训练。本快速入门将带你了解 Transformers 的核心功能,包括:
1 设置
创建一个 Hugging Face 账号:
可助你托管和访问模型、数据集及Spaces(一个构建和分享AI应用的平台)。
创建一个User Access Tokens,再登录你的账号:
from huggingface_hub import notebook_login
notebook_login()
安装huggingface_hub:
(.venv) javaedge@JavaEdgedeMac-Studio AIAgent % huggingface-cli login
To log in, `huggingface_hub` requires a token generated from https://huggingface.co/settings/tokens .
Enter your token (input will not be visible):
Add token as git credential? (Y/n) Y
Token is valid (permission: fineGrained).
The token `JavaEdge-Mac-Studio-HF` has been saved to /Users/javaedge/.cache/huggingface/stored_tokens
Your token has been saved in your configured git credential helpers (osxkeychain).
Your token has been saved to /Users/javaedge/.cache/huggingface/token
Login successful.
The current active token is: `JavaEdge-Mac-Studio-HF`
安装深度学习框架
如PyTorch:
pip install torch
安装最新版 Transformers 及 Hugging Face 生态中的其他实用库,以访问数据集、评估模型、加速训练等:
pip install -U transformers datasets evaluate accelerate timm
2 预训练模型
每个预训练模型都继承自以下三个基础类:
类名 | 说明 |
---|---|
[PretrainedConfig] | 配置文件,定义模型的参数,比如注意力头数、词表大小等 |
[PreTrainedModel] | 模型结构本身,基于配置文件中的参数构建,返回的是原始隐藏状态。若用于具体任务,还需加上适配任务的输出头(例如:LlamaModel 与 LlamaForCausalLM )。 |
Preprocessor | 预处理器,用于将原始输入(文本、图片、音频、多模态等)转换成模型可接受的张量格式。例如 PreTrainedTokenizer 可将文本转为张量。 |
推荐使用 AutoClass 加载模型和预处理器,会根据模型权重和配置自动识别适配架构。
用 from_pretrained()
可从 Hub 加载权重和配置:
from transformers import AutoTokenizer, AutoModelForCausalLM
# 使用一个免费可访问模型
model_name = "Qwen/Qwen2-0.5B-Instruct"
# 加载 tokenizer 和模型
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
用 tokenizer 对文本编码,并将张量移至 GPU 以加快推理速度:
model_inputs = tokenizer(["The secret to baking a good cake is "], return_tensors="pt").to("cuda")
现在模型已准备好进行推理或训练。
进行文本生成推理:
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 部分。
3 Pipeline
Pipeline,最简单方便的推理接口,支持各种任务,如文本生成、图像分割、语音识别、文档问答。
创建 Pipeline 对象并指定任务类型。默认,Pipeline 会下载并缓存该任务的预训练模型。你也可以通过 model
参数指定模型名称。
如文本生成任务:
from transformers import pipeline
pipeline = pipeline("text-generation", model=model_name, device="cuda")
# Mac M芯片
pipeline = pipeline("text-generation", model=model_name, device="mps")
输入初始文本,让模型继续生成:
result = pipeline("The secret to baking a good cake is ", max_length=50,truncation=True)
print(result)
输出示例:
[
{
"generated_text": "The secret to baking a good cake is 1) the right flour, 2) the right sugar and 3) the right eggs. The best way to achieve these ingredients is to follow these steps:\n\n1. Measure out your ingredients.\n2"
}
]
4 Trainer
Trainer,用于 PyTorch 模型的完整训练与评估流程封装器,屏蔽大量重复代码,方便你专注设计模型训练。
只需提供模型、数据集、预处理器和数据整理器即可训练模型。
先加载模型、tokenizer 和数据集:
from transformers import AutoModelForSequenceClassification, AutoTokenizer
from datasets import load_dataset
model_name = "Qwen/Qwen2-0.5B-Instruct"
model = AutoModelForSequenceClassification.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)
dataset = load_dataset("rotten_tomatoes")
定义 tokenization 函数,并用 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)
设置训练参数:
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
并启动训练:
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()
训练完成后,可将模型上传至 Hub:
trainer.push_to_hub()
完成第一个 Transformers 模型的训练!
TensorFlow
并非所有预训练模型都提供 TensorFlow 版本,参考模型文档确认是否支持。
Trainer
不支持 TensorFlow 模型,但可通过 Keras 训练,Transformers 提供的 TensorFlow 模型兼容标准的 tf.keras.Model
接口。
加载模型、tokenizer 和数据集:
from transformers import TFAutoModelForSequenceClassification, AutoTokenizer
model = TFAutoModelForSequenceClassification.from_pretrained("distilbert/distilbert-base-uncased")
tokenizer = AutoTokenizer.from_pretrained("distilbert/distilbert-base-uncased")
定义 tokenization 函数,并处理数据集:
def tokenize_dataset(dataset):
return tokenizer(dataset["text"])
dataset = dataset.map(tokenize_dataset)
使用 prepare_tf_dataset()
生成训练用的 tf.data.Dataset:
tf_dataset = model.prepare_tf_dataset(
dataset["train"], batch_size=16, shuffle=True, tokenizer=tokenizer
)
用 Keras 的 compile
和 fit
进行训练:
from tensorflow.keras.optimizers import Adam
model.compile(optimizer="adam")
model.fit(tf_dataset)
5 下一步
掌握 Transformers 基础,探索感兴趣方向:
- 基础类:深入学习配置类、模型类、预处理类,有助于自定义模型、处理不同类型的输入(音频、图像、多模态)并上传模型
- 推理:深入了解 Pipeline,了解与 LLM 聊天、Agent 推理及在硬件上的推理优化
- 训练:深入研究 Trainer、分布式训练和硬件优化训练
- 量化:使用模型量化减少内存和存储需求,加快推理速度
- 资源:想找具体任务的完整训练和推理范例?查看 Hugging Face 提供的任务模板(task recipes)
本文已收录在Github,关注我,紧跟本系列专栏文章,咱们下篇再续!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。