Transformers 库加载预训练模型的 4 种方式
Hugging Face Transformers 库提供了 4 种核心代码范式用于加载预训练大语言模型(LLM),具体分类如下:
- 通用模型加载(无任务头)
使用 AutoModel 加载基础架构,适用于自定义下游任务:
from transformers import AutoModel, AutoTokenizer
# 加载纯Transformer架构
model = AutoModel.from_pretrained("Meta-Llama-3-8B-Instruct")
tokenizer = AutoTokenizer.from_pretrained("Meta-Llama-3-8B-Instruct")
用途:获取隐藏状态(hidden states),用于自定义任务(如特征提取)。
这里的模型的输出就是隐藏状态,不包含最后的线性层转换为词表概率
- 任务专用加载(带预置任务头)
通过AutoModelFor[Task]
加载任务优化模型:
# 自回归生成(如GPT)
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained("Meta-Llama-3-8B-Instruct")
# 序列分类
from transformers import AutoModelForSequenceClassification
model = AutoModelForSequenceClassification.from_pretrained("bert-base-uncased")
# 文本生成(如T5)
from transformers import AutoModelForSeq2SeqLM
model = AutoModelForSeq2SeqLM.from_pretrained("google/flan-t5-large")
特点:自动附加任务相关输出层(如分类头、LM 头)
比如 AutoModelForCausalLM
就是 hidden states 后多加载一个线性层转换为词表的概率分布
- 自定义模型扩展
继承 PreTrainedModel 并自定义前向逻辑,适配特殊需求:
from transformers import PretrainedModel, AutoConfig
class CustomModel(PretrainedModel):
def __init__(self, config):
super().__init__(config)
self.llama = AutoModel.from_config(config) # 加载预训练配置
self.custom_layer = nn.Linear(config.hidden_size, 10)
def forward(self, inputs):
outputs = self.llama(**inputs)
return self.custom_layer(outputs.last_hidden_state)
config = AutoConfig.from_pretrained("Meta-Llama-3-8B-Instruct")
model = CustomModel(config) # 可加载预训练权重
适用场景:修改模型结构或添加自定义模块
- 快速推理 Pipeline
使用 pipeline API 一键加载模型和分词器:
from transformers import pipeline
generator = pipeline("text-generation", model="Meta-Llama-3-8B-Instruct")
result = generator("DeepSeek-R1 is")
优势:自动处理预处理(tokenize)和后处理(decode)