跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

Transformers 库模型推理与微调实战教程

详细讲解了如何利用 Hugging Face Transformers 库实现大语言模型的推理与微调。内容涵盖环境搭建、AutoModel 推理流程、Pipeline 多任务处理、基于 Trainer 的微调全流程(数据加载、预处理、训练配置、评估)。同时补充了常见网络代理配置、显存优化及训练参数调优建议,适合希望快速落地 NLP 项目的开发者参考。

t ag发布于 2025/2/7更新于 2026/7/2440 浏览
Transformers 库模型推理与微调实战教程

Transformers 库模型推理与微调实战教程

概述

Transformers 是由 Hugging Face 和社区共同维护的开源自然语言处理(NLP)库,广泛应用于机器学习和深度学习领域。它提供了丰富的预训练模型和工具,使得开发者和研究人员能够轻松调用最新的大模型进行推理或针对特定任务进行微调。

在 Hugging Face 官网的模型详情页,点击 "Use this model" 可查看该模型的使用方式,通常包括 Pipeline 和 Directly(直接加载)两种模式。

环境准备

在使用 Transformers 之前,需要安装必要的依赖库。推荐使用 Python 虚拟环境以隔离项目依赖。

# 创建并激活虚拟环境
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# 安装核心库
pip install transformers datasets accelerate torch

若需使用 GPU 加速,请确保已安装对应版本的 CUDA 驱动及 PyTorch 版本。

使用 AutoModel 类进行推理

Transformers 库中的 AutoClass 系列提供了自动加载预训练模型和分词器的功能,简化了模型的使用过程。我们可以通过 from_pretrained() 方法快速加载所需的模型和分词器。

核心步骤

  1. 加载模型:使用 AutoModelForCausalLM 加载因果语言模型。
  2. 加载分词器:使用 AutoTokenizer 加载配套的分词器。
  3. 构建消息:定义包含系统角色和用户角色的对话列表。
  4. 格式化输入:使用 apply_chat_template 将对话格式化为模型可接受的字符串。
  5. 生成文本:调用 model.generate 生成回复,可设置最大长度、温度等参数。
  6. 解码输出:提取生成的 token 并解码为文本。

代码示例

import os
import time
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

# 配置设备
device = "cuda" if torch.cuda.is_available() else "cpu"

# 网络代理配置(国内用户访问 HuggingFace 可能需要)
os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"

# ① 加载模型
model = AutoModelForCausalLM.from_pretrained(
    "Qwen/Qwen1.5-0.5B-Chat",
    device_map=,  
    torch_dtype=torch.float16,  
)


tokenizer = AutoTokenizer.from_pretrained()


messages = [
    {: , : },
    {: , : }
]


text = tokenizer.apply_chat_template(
    messages,
    tokenize=,
    add_generation_prompt=
)


model_inputs = tokenizer([text], return_tensors=).to(device)


start_time = time.time()
generated_ids = model.generate(
    model_inputs.input_ids,
    max_new_tokens=,
    temperature=,      
    top_p=,            
    do_sample=        
)
end_time = time.time()
()


generated_ids = [
    output_ids[(input_ids):]  input_ids, output_ids  (model_inputs.input_ids, generated_ids)
]


response = tokenizer.batch_decode(generated_ids, skip_special_tokens=)[]
(response)
"auto"
# 自动选择 CPU 或 GPU
# 使用半精度节省显存
# ② 加载分词器
"Qwen/Qwen1.5-0.5B-Chat"
# ③ 构建消息列表
"role"
"system"
"content"
"You are a helpful assistant."
"role"
"user"
"content"
"Give me a short introduction to large language model."
# ④ 格式化对话模板
False
True
# ⑤ 转换为张量
"pt"
# ⑥ 生成文本
512
0.7
# 控制随机性
0.9
# 核采样
True
# 启用采样
print
f"推理耗时:{end_time - start_time:.2f} 秒"
# ⑦ 提取输出
len
for
in
zip
# ⑧ 解码响应
True
0
print

优化下载速度

如果无法直接连接 HuggingFace,可以提前下载模型到本地,并在 from_pretrained 中指定路径。也可以配置环境变量使用国内镜像地址。

from huggingface_hub import snapshot_download

snapshot_download(
    repo_id="Qwen/Qwen1.5-0.5B-Chat",
    local_dir="./models/Qwen1.5-0.5B-Chat",
    max_workers=8,
    endpoint="https://hf-mirror.com"
)

使用 Pipeline 进行推理

HuggingFace 的 Pipeline 是一种高级工具,封装了常用 NLP 任务的流程,无需深入了解模型细节即可快速上手。

1. 文本生成 Pipeline

from transformers import pipeline

# 初始化生成器
generator = pipeline(model="openai-community/gpt2")

# 单句生成
generator("I can't believe you did such a ", do_sample=False)

# 多序列生成
outputs = generator("My tart needs some", num_return_sequences=4, return_full_text=False)

参数说明:

  • do_sample=True:采用采样策略,增加多样性但可能不稳定。
  • do_sample=False:贪婪解码,选择概率最高的词,结果更连贯。

2. 情感分类 Pipeline

from transformers import pipeline

classifier = pipeline(model="distilbert/distilbert-base-uncased-finetuned-sst-2-english")
result = classifier("This movie is disgustingly good !")
print(result)  # [{'label': 'POSITIVE', 'score': 0.99...}]

3. 图像描述 Pipeline

captioner = pipeline(model="ydshieh/vit-gpt2-coco-en", task="image-to-text", device=0)
result = captioner("https://example.com/image.jpg")
print(result)

模型微调

Transformers 支持在特定数据集上对预训练模型进行微调(Fine-tuning),以适应特定任务。推荐使用 Trainer API 简化训练流程。

第一步:准备数据集

以 Yelp 评论数据为例,适用于文本分类任务。

from datasets import load_dataset

os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"
dataset = load_dataset("yelp_review_full")
print(dataset["train"][0])

第二步:数据集预处理

使用分词器处理文本,统一长度并进行填充或截断。

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("google-bert/bert-base-cased")

def tokenize_function(examples):
    return tokenizer(
        examples["text"],
        padding="max_length",
        truncation=True,
        max_length=128
    )

tokenized_datasets = dataset.map(tokenize_function, batched=True)

# 可选:缩小数据集用于调试
small_train = tokenized_datasets["train"].shuffle(seed=42).select(range(1000))
small_eval = tokenized_datasets["test"].shuffle(seed=42).select(range(1000))

第三步:配置训练参数

加载模型并指定标签数量,配置 TrainingArguments。

from transformers import AutoModelForSequenceClassification, TrainingArguments

model = AutoModelForSequenceClassification.from_pretrained(
    "google-bert/bert-base-cased",
    num_labels=5  # Yelp 数据集有 5 个类别
)

training_args = TrainingArguments(
    output_dir="./results",
    evaluation_strategy="epoch",
    save_strategy="epoch",
    per_device_train_batch_size=8,
    learning_rate=2e-5,
    num_train_epochs=3,
    weight_decay=0.01,
    logging_steps=10,
    load_best_model_at_end=True,
    metric_for_best_model="accuracy"
)

第四步:设置评估函数

计算准确率等指标。

import numpy as np
import evaluate

metric = evaluate.load("accuracy")

def compute_metrics(eval_pred):
    logits, labels = eval_pred
    predictions = np.argmax(logits, axis=-1)
    return metric.compute(predictions=predictions, references=labels)

第五步:开始训练

from transformers import Trainer

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=small_train,
    eval_dataset=small_eval,
    compute_metrics=compute_metrics,
)

trainer.train()
trainer.save_model("./fine_tuned_model")

常见问题与优化建议

  1. 显存不足:

    • 使用 device_map="auto" 自动分配。
    • 开启混合精度训练 (fp16=True)。
    • 减小 batch_size。
  2. 网络超时:

    • 配置 HF_ENDPOINT 使用镜像站。
    • 提前下载模型至本地目录。
  3. 推理延迟:

    • 使用 torch.compile 加速(PyTorch 2.0+)。
    • 量化模型(如 INT8)以减少显存占用。
  4. 保存模型:

    • 微调完成后,使用 trainer.save_model() 保存最佳权重。
    • 后续推理时可直接加载本地路径。

总结

Transformers 库极大地降低了大模型的应用门槛。通过 AutoModel 可实现灵活的推理控制,Pipeline 适合快速原型验证,而 Trainer 则提供了标准化的微调方案。开发者可根据实际需求选择合适的工具链,结合数据预处理与参数调优,高效完成 NLP 任务落地。

在实际项目中,建议关注模型版本兼容性,定期更新依赖库以获取性能优化和安全补丁。对于生产环境,还需考虑模型部署服务化(如 ONNX Runtime, TensorRT)以提升并发处理能力。

目录

  1. Transformers 库模型推理与微调实战教程
  2. 概述
  3. 环境准备
  4. 创建并激活虚拟环境
  5. 安装核心库
  6. 使用 AutoModel 类进行推理
  7. 核心步骤
  8. 代码示例
  9. 配置设备
  10. 网络代理配置(国内用户访问 HuggingFace 可能需要)
  11. ① 加载模型
  12. ② 加载分词器
  13. ③ 构建消息列表
  14. ④ 格式化对话模板
  15. ⑤ 转换为张量
  16. ⑥ 生成文本
  17. ⑦ 提取输出
  18. ⑧ 解码响应
  19. 优化下载速度
  20. 使用 Pipeline 进行推理
  21. 1. 文本生成 Pipeline
  22. 初始化生成器
  23. 单句生成
  24. 多序列生成
  25. 2. 情感分类 Pipeline
  26. 3. 图像描述 Pipeline
  27. 模型微调
  28. 第一步:准备数据集
  29. 第二步:数据集预处理
  30. 可选:缩小数据集用于调试
  31. 第三步:配置训练参数
  32. 第四步:设置评估函数
  33. 第五步:开始训练
  34. 常见问题与优化建议
  35. 总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 大型语言模型作为裁判的机遇与挑战:从生成到判决
  • Spring Cloud Gateway 网关实战:路由配置、过滤器与限流鉴权
  • UI UX Pro Max:AI 辅助专业级 UI 设计工具
  • 前端兼容策略:优雅降级与渐进增强的核心差异
  • CAN 报文信号矩阵与 DBC 解析异常排查
  • 渗透测试实战指南:核心流程与常见漏洞防御
  • 新版 llama.cpp 本地部署与使用指南
  • 使用 Python 和 AI 搭建智能害虫识别助手
  • cx_Freeze 打包 Python:setup.py 配置与资源管理要点
  • Java 入门前的计算机基础知识
  • OpenClaw 在 Windows 与 macOS 上的安装体验对比
  • 腾讯云轻量应用服务器部署 OpenClaw 并接入 QQ 与飞书机器人
  • C++ 类与对象实战:从零实现日期类
  • AI 大模型 API 中转平台选择与接入指南
  • 基于 Bright Data AI Studio 的企业级招聘数据自动采集实践
  • AI 辅助钱包开发:智能生成合约交互与监控脚本
  • 在 Ubuntu 22.04 上部署 llama.cpp 和 llama-server
  • 阿里 QoderWork 上线:本地运行、自主规划的 AI 工作搭子
  • RAG 知识库搭建实战:基于 Word2Vec 与 ChatGLM 的本地部署
  • 人工智能嵌入(Embedding)概念详解与语义映射原理

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online