You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 00:22:40