我尝试在 python 3.9.7 中导入 functorch 和 torch
import torch
from functorch import vmap, grad
遇到循环导入问题。
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
/var/folders/4p/5v2n8wpn58v6xw674tjlss680000gn/T/ipykernel_64234/1530828949.py in <module>
1 import torch
----> 2 from functorch import vmap, grad
/usr/local/lib/python3.11/site-packages/functorch/__init__.py in <module>
5 # LICENSE file in the root directory of this source tree.
6 import torch
----> 7 from . import _C
8
9 # Top-level APIs. Please think carefully before adding something to the
ImportError: cannot import name '_C' from partially initialized module 'functorch' (most likely due to a circular import) (/usr/local/lib/python3.11/site-packages/functorch/__init__.py)
有什么办法吗?这是软件包中的错误吗? 在这里提交这个,因为我找不到一个简单的修复方法
我多次尝试重新安装 torch 和 functorch。无济于事。
这很可能是因为
functorch
自 PyTorch 2.0 起已被弃用。他们网站上的公告说:
我们已经将 functorch 集成到 PyTorch 中。作为集成的最后一步,从 PyTorch 2.0 开始不推荐使用 functorch API。请改用 torch.func API,并查看 迁移指南 和 docs 了解更多详情。
由于您还导入了
torch
,这很可能导致循环导入错误,因为该包也在尝试导入functorch
。由于它已被弃用,强烈建议您改用torch.func
。
如果你想使用
vmap
和grad
,你可以删除functorch
的导入并改用以下内容。
代替:
functorch.grad
用途:
torch.func.grad()
代替:
functorch.vmap
使用:
torch.vmap() # or you can use torch.func.vmap()
查看他们的文档以获取其他迁移技巧。上面贴了链接。