R中Reticulate调用transformers无法识别已安装的PyTorch如何解决
问题根因说明
你能正常调用torch的方法说明
torch包本身已经正确安装,出现该报错的核心原因是2种:
- 使用
py_install("PyTorch")安装时,pip源下的PyTorch是无实际功能的占位包,干扰了transformers的依赖检测- 安装顺序错误:先安装transformers再安装torch,transformers安装时没有记录torch依赖,运行时检测失败
解决方案
1. 清理并重新安装依赖
统一使用pip安装,避免conda和pip混合安装导致的路径冲突,先卸载旧的错误包再重新安装:
use_virtualenv("r-reticulate", required = TRUE) # 卸载旧的无效包 py_run_string("import pip; try: pip.main(['uninstall', '-y', 'torch', 'transformers', 'PyTorch']) except: pass") # 先安装torch,再安装transformers reticulate::py_install("torch", pip = TRUE) reticulate::py_install("transformers", pip = TRUE)
2. 调整代码执行顺序
导入时先初始化torch,再导入transformers,确保transformers检测时torch已经完成环境加载;调用预训练模型时添加from_tf = FALSE参数强制加载PyTorch格式权重:
# 先导入并验证torch torch = reticulate::import('torch') print(torch$__version__) # 输出版本号即说明torch正常可用 # 再导入transformers transformer = reticulate::import('transformers') tokenizer = transformer$AutoTokenizer$from_pretrained("gagan3012/keytotext-small") # 注意该模型为文本生成模型,使用AutoModelForSeq2SeqLM适配性更好 model = transformer$AutoModelForSeq2SeqLM$from_pretrained("gagan3012/keytotext-small", from_tf = FALSE)
3. 强制跳过依赖检测(兜底方案)
如果上述操作后依然报错,可以手动修改transformers的检测标记,跳过torch校验:
py_run_string("import transformers.utils.import_utils; transformers.utils.import_utils._is_torch_available = lambda: True")
内容的提问来源于stack exchange,提问作者brucezepplin
相关产品推荐
相关产品推荐

