Transformers pipeline 怎样指定推理设备
Transformers pipeline 的推理设备应在创建对象时通过 device 指定。强制 CPU 可写 device="cpu" 或 -1;单张 CUDA 卡可写 device="cuda:0",需要另一张可用卡时使用对应编号。普通单设备模型由 pipeline 放到目标设备,文本等原始输入也由它完成预处理和张量移动。使用 device_map 分派的模型则不应同时设置 device。
官方地址:https://huggingface.co/docs/transformers/
先明确设备名称和当前进程可见范围
本文以 PyTorch 文本分类 pipeline 为例。环境需要安装相互兼容的 torch、transformers,并准备一个可用于文本分类的模型。机器存在 GPU,不等于当前 Python 环境就有可用 CUDA;容器、环境和驱动配置也会影响设备可见性。判断当前进程能否使用 CUDA,可以从 torch.cuda.is_available() 开始。
| 写法 | 适用意图 | 注意点 |
|---|---|---|
| device="cpu" | 明确使用 CPU | 适合基线或 CPU 环境 |
| device="cuda:0" | 指定当前环境的 CUDA 设备 | 要求该编号确实可用 |
| device="mps" | 使用受支持环境中的 MPS 后端 | 需后端、模型及算子支持 |
| device_map="auto" | 由加载与分派机制安排模型 | 不与 device 混用,不保证全在 GPU |
省略 device 的默认行为应以所用版本为准;需要固定部署位置时,显式写明目标比依赖默认值更清楚。device 是对象初始化参数,不能把它当作每次文本推理调用时临时切卡的通用开关。
创建单设备 pipeline 并执行一次推理
下面代码使用已经准备好的本地模型目录,避免把网络下载和设备问题混在一起。目录必须是真正的文本分类模型及对应分词器;如果文件缺失,local_files_only 会让加载失败,应先补齐本地资源。示例不在本机运行,也不预设分类标签或分数。
import torch
from transformers import AutoModelForSequenceClassification, AutoTokenizer, pipeline
# 换成已经准备好的文本分类模型目录,包含权重、配置和分词器文件。
model_dir = "./models/text-classifier"
tokenizer = AutoTokenizer.from_pretrained(model_dir, local_files_only=True)
model = AutoModelForSequenceClassification.from_pretrained(
model_dir, local_files_only=True
)
# 无 CUDA 时明确使用 CPU,不依赖不同版本的默认设备选择行为。
target = "cuda:0" if torch.cuda.is_available() else "cpu"
classifier = pipeline(
task="text-classification",
model=model,
tokenizer=tokenizer,
device=target,
)
# 普通文本输入交给 pipeline 预处理与设备移动。
try:
print("pipeline device:", classifier.device)
print("parameter device:", next(classifier.model.parameters()).device)
print(classifier("The delivery arrived earlier than expected.", truncation=True))
finally:
# 释放本例持有的模型引用;长驻服务应复用模型而非逐次销毁。
del classifier
del model
读者运行时,应先看 pipeline device 和 parameter device 是否与 target 对应,再看实际分类结果。这里的参数位置检查只适合普通单设备模型;分派模型的一项参数所在位置,不能代表整个模型。若选择 cuda:1,除了 CUDA 可用,还需确认有足够的可见设备。

同一服务通常在启动时创建 pipeline,并在请求间复用。代码中的 finally 只是演示对象引用的生命周期,不表示 GPU 缓存必定立即归还给操作系统,也不建议每处理一条文本就重新加载模型。
区分模型放置和输入张量移动
把字符串交给 classifier 时,分词器通常仍在主机侧生成输入张量,pipeline 再把需要的张量送到推理设备。设置 device="cuda:0" 不代表分词、文件读取和 Python 后处理全部在 GPU 上完成;看到 CPU 有活动不能直接判断设备参数失效。
如果绕过 pipeline,直接使用 classifier.model,就需要自己负责张量设备。下面片段应放在前例 finally 清理之前,使用相同的单设备模型;它不是接在整段清理代码之后直接运行的独立脚本。
# 与前例是两种调用方式;本段在前例清理之前使用同一个单设备模型。
encoded = tokenizer("The delivery arrived earlier than expected.", return_tensors="pt")
# 直接调用模型时,由调用方把各张量放到模型所在设备。
encoded = {name: value.to(target) for name, value in encoded.items()}
with torch.inference_mode():
logits = classifier.model(**encoded).logits
print(logits.shape)
错误地只把模型放到 GPU,却把 tokenizer 产生的 CPU 张量直接传给模型,容易出现设备不匹配。反过来,普通字符串本身没有 .to("cuda") 这种张量移动语义。先确定调用的是 pipeline 还是原始模型,再选择谁来移动输入。

使用 device_map 时交给统一分派管理
device_map 面向模型加载和模块分派,可以按模型与资源条件把模块放在不同位置;device="cuda:0" 则表达普通单设备目标。不要既用 device_map="auto",又给同一个 pipeline 指定 device。若传入模型已经带有 hf_device_map,也应保留分派机制管理,而不是再强行把整模型移动到某张卡。
需要 device_map="auto" 时,应按该模式准备 Accelerate 等相应依赖,并查看实际的 hf_device_map。它可能包含 GPU 与 CPU 的组合,不是“自动把所有层塞进一张显卡”的承诺。对于量化或带卸载钩子的模型,后续整体 .to() 也可能不受支持,不能套用普通模型迁移方法。
初次排查可以先让一个小的普通模型在单设备上跑通,再进入分派方案。遇到显存不足时,先看模型体积、输入长度和批大小;这类资源问题与设备名称写错是不同原因。这里不把精度、量化或分布式部署混入同一个最小示例。
常见问题
device=0 就能使用所有显卡吗?
不能。它选择一个设备,不会自动建立数据并行或模型分片。多设备模型放置属于另一套部署配置。
为什么 CPU 仍然占用明显?
分词、读取和后处理仍可能使用 CPU。应观察实际模型放置与计算过程,不能只看单一 CPU 利用率。
为什么传入现成模型后指定 device 报冲突?
先确认模型是否已由 Accelerate 等机制分派并带有设备映射。普通单设备移动与已分派模型不能用同一种强制迁移方式处理。
明确选一个设备、在初始化时固定位置、让输入遵守同一放置约定,是最小单设备推理闭环。模型改用 device_map 后,则应把放置责任统一交给分派机制。
Datasets shard 怎样切分数据集做并行处理
- 上一篇
- Datasets shard 怎样切分数据集做并行处理
- 下一篇
- Evaluate 怎样加载指标并处理批量预测
-
- 科技周边 · 人工智能 | 18分钟前 | python · 人工智能 · 并行处理 index Hugging Face Datasets Datasets shard num_shards contiguous
- Datasets shard 怎样切分数据集做并行处理
- 417浏览 收藏
-
- 科技周边 · 人工智能 | 19分钟前 | 人工智能 · 显存 Transformers 量化模型 bitsandbytes device_map
- Transformers 量化加载时如何选择 device_map
- 280浏览 收藏
-
- 科技周边 · 人工智能 | 20分钟前 | python · Transformers TextIteratorStreamer 流式生成 AsyncTextIteratorStreamer StoppingCriteria
- Transformers streamer 怎样处理生成停止信号
- 198浏览 收藏
-
- 科技周边 · 人工智能 | 22分钟前 | map Datasets batch_size batched 批量映射
- Datasets map 的 batched 参数怎样改变函数输入
- 279浏览 收藏
-
- 科技周边 · 人工智能 | 25分钟前 |
- Transformers GenerationConfig 保存生成参数与复用配置的方法
- 161浏览 收藏
-
- 科技周边 · 人工智能 | 26分钟前 | python · 人工智能 · Hugging Face padding Transformers attention_mask 注意力掩码
- Transformers attention_mask 缺失会有什么影响
- 453浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 1029次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 1030次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 1173次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 1133次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 973次使用
-
- 量化模型本地推理的显存估算方法
- 2026-10-17 501浏览
-
- 本地大模型反复输出同一句话怎么调整生成参数
- 2026-09-06 501浏览
-
- Python 调用大模型时如何用结构化输出校验 JSON:从解析失败到可重试
- 2026-08-29 501浏览
-
- AI写作工具免费版安装教程(含豆包Clawdbot)
- 2026-05-30 501浏览
-
- WPS AI能自动生成PPT吗?输入主题一键制作演示文稿
- 2026-05-27 501浏览

