使用SentenceTransformer遇AttributeError:torch无get_default_device属性
解决Sentence-Transformers 4.1.0与PyTorch 2.2.2的兼容性问题
问题场景
运行以下代码时触发AttributeError: module 'torch' has no attribute 'get_default_device'错误:
from sentence_transformers import SentenceTransformer, util from transformers import AutoTokenizer, AutoModelForSeq2SeqLM t5_tokenizer = AutoTokenizer.from_pretrained("ramsrigouthamg/t5_paraphraser") t5_model = AutoModelForSeq2SeqLM.from_pretrained("ramsrigouthamg/t5_paraphraser") embedder = SentenceTransformer('all-MiniLM-L6-v2')
使用的库版本:PyTorch 2.2.2、Transformers 4.52.3、Sentence-Transformers 4.1.0
问题解答
是否有人遇到过该问题?
- 是的,大量用户在社区讨论和项目Issue中反馈过该问题,本质是Sentence-Transformers新版本依赖了PyTorch未提供的API导致的版本不兼容。
Sentence-Transformers 4.1.0兼容的PyTorch版本是多少?
- Sentence-Transformers 4.1.0的依赖要求PyTorch版本≥2.3.0,因为
torch.get_default_device()是PyTorch 2.3.0才新增的API,你的PyTorch 2.2.2不包含该方法,因此触发报错。
无需降级PyTorch的修复方案?
- 方案一:降级Sentence-Transformers到兼容版本
安装Sentence-Transformers 4.0.0及以下版本(这些版本未使用torch.get_default_device()),执行命令:pip install sentence-transformers==4.0.0 - 方案二:手动补充缺失的API实现
在代码最开头添加以下代码,模拟PyTorch 2.3.0中get_default_device()的功能:
这段代码会自动检测并补全缺失的方法,逻辑与官方实现一致。import torch if not hasattr(torch, 'get_default_device'): def get_default_device(): return 'cuda' if torch.cuda.is_available() else 'cpu' torch.get_default_device = get_default_device
get_default_device是SentenceTransformer要求的新方法吗?
- 不是,该方法是PyTorch 2.3.0新增的官方API。Sentence-Transformers 4.1.0开始调用了这个API,因此当PyTorch版本低于2.3.0时,会出现属性找不到的错误。
内容的提问来源于stack exchange,提问作者user30687709
相关产品推荐
相关产品推荐

