项目:huggingface/transformers | 星数:168333 | 语言:Python | 协议:Apache-2.0 | GitHub仓库
更新日期:2026-10-29 · 作者:CodeArts 编辑部
在没有 Transformers 之前,用 BERT 要自己抄 modeling 文件,用 LLaMA 要自己对 tokenizer 的 special token,换个模型就得重写一遍加载逻辑。HuggingFace 的 Transformers 把这件事标准化了:同一套 AutoModel / AutoTokenizer 接口能加载 100 万+ 模型,覆盖文本、视觉、音频、多模态四类任务。168333 星、Apache-2.0 协议,是当前 AI 工程里几乎绕不过去的基础设施。
from transformers import pipeline
clf = pipeline('sentiment-analysis', model='distilbert-base-uncased-finetuned-sst-2-english')
print(clf('Transformers makes model loading boring, in a good way.'))
pipeline 会自动下载模型、选择 tokenizer、处理输入、后处理输出。适合快速验证"这个模型能不能用"。可选的 task 名称覆盖很广:text-generation、summarization、question-answering、automatic-speech-recognition、image-classification、zero-shot-classification 等。
国内网络下载慢是最常见的拦路虎,设置镜像即可:export HF_ENDPOINT=https://hf-mirror.com,或用 hf download 命令预先缓存到本地再离线加载(local_files_only=True)。
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
tok = AutoTokenizer.from_pretrained('distilbert-base-uncased-finetuned-sst-2-english')
model = AutoModelForSequenceClassification.from_pretrained('distilbert-base-uncased-finetuned-sst-2-english')
batch = tok(['这条评论很好', 'This is terrible'], padding=True, truncation=True, return_tensors='pt')
with torch.no_grad():
logits = model(**batch).logits
print(logits.argmax(dim=-1))
三个要点值得记住:padding=True 按 batch 内最长补齐,truncation=True 超长自动截断(不设会直接抛错),return_tensors='pt' 转成 PyTorch 张量。换模型只需改一行字符串,这是整个框架最值钱的设计。
本地跑 7B 以上模型,先考虑显存。最省事的是自动分片:
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained(
'Qwen/Qwen2.5-7B-Instruct',
device_map='auto',
torch_dtype='auto',
load_in_4bit=True # 需安装 bitsandbytes
)
device_map='auto' 会按可用显存把层分到 GPU/CPU,load_in_4bit=True 用 bitsandbytes 做 NF4 量化,7B 模型显存占用可从约 14GB 降到 4GB 左右。量化后推理速度略有提升,但生成质量在多数任务上肉眼难辨下降。
| 方案 | 7B 显存占用 | 适用 |
|---|---|---|
| fp16 全精度 | 约 14GB | 显存充足、精度优先 |
| 8bit 量化 | 约 8GB | 通用折中 |
| 4bit 量化 | 约 4GB | 消费级显卡、本地部署 |
小规模数据(几千条以内)用 Trainer 最划算,它把训练循环、评估、checkpoint、日志都封装好了:
from transformers import Trainer, TrainingArguments
args = TrainingArguments(
output_dir='./out',
per_device_train_batch_size=8,
num_train_epochs=3,
learning_rate=2e-5,
eval_strategy='epoch',
save_strategy='epoch',
fp16=True,
logging_steps=50
)
Trainer(model=model, args=args, train_dataset=train_ds,
eval_dataset=val_ds, tokenizer=tok).train()
如果要做 LoRA 之类参数高效微调,配合 peft 库给模型套一层 LoraConfig,可训练参数能降到 0.1% 量级,单卡就能微调 7B。这也是当前个人开发者最常见的路线。
out = model.generate(
**inputs,
max_new_tokens=256,
do_sample=True,
temperature=0.7,
top_p=0.9,
repetition_penalty=1.1
)
几个实用判断:需要确定性输出就关掉 do_sample(贪心解码);需要多样性用 temperature + top_p 组合,一般不要同时大幅调这两个;repetition_penalty 超过 1.3 容易让输出变得生硬。真正追求吞吐时,直接用 vLLM 或 SGLang 替代原生 generate,这是数量级的差别。
from_pretrained('repo', revision='commit_hash'),否则上游更新可能悄悄改变输出。Transformers 把"用模型"的门槛降到了改一行字符串的水平,真正的功力体现在后面:量化压显存、LoRA 降微调成本、vLLM 提吞吐。把这三件事想清楚,比纠结用哪个模型更有价值。
设置环境变量 HF_ENDPOINT=https://hf-mirror.com 使用镜像,或用 hf download 命令提前拉取到本地缓存,之后加载时加 local_files_only=True 离线运行。企业内网环境建议自建缓存或使用内网模型仓库。
fp16 约需 14GB,8bit 量化约 8GB,4bit 量化约 4GB。显存不足时可加 device_map="auto" 自动把部分层放到 CPU,但会显著降低速度。消费级 8GB 显卡跑 4bit 量化的 7B 模型是可行的常见配置。
可以且推荐。用 Trainer 管训练流程,用 peft 的 get_peft_model 包一层 LoRA,可训练参数降到 0.1% 量级,单卡即可微调 7B 模型。目标是全参数微调或数据量很大时才考虑多卡分布式方案。