Closed
[Bug-Report|缺陷反馈]: cann_ops_transformer_experimental重复注册报错 #6994
ZJ_230166Add on 14 days agoClosed at 5 days ago
周云飞
14 days ago Comments:
14 days ago Comments:
您好,感谢提供完整的编包命令和报错日志。
从日志看,编译和安装已经完成,失败发生在 Python 导入阶段:导入 cann_ops_transformer 时加载了 cann_ops_transformer_experimental,后者在初始化 indexer_prologue_qw 时调用 register_schema(),最终因重复定义 cann_ops_transformer::ds41.indexer_prologue_qw 而被 PyTorch 拒绝。因此,当前报错属于算子注册阶段的问题,尚未进入算子计算。
日志中的首次注册和重复注册都指向 experimental 包的同一处注册入口,但这还不能区分是导入链重复触发初始化,还是不同模块实例注册了相同的算子。主线包与 experimental 包同时出现在导入链中,也不能单凭这一点认定两者不兼容。
一个可行的排查方向是检查两个包的加载关系,以及 _ensure_initialized() 是否能在交叉导入时避免重复注册。若最终确认需要复用已有注册,还需核对算子定义和实现是否一致,不能简单忽略重复注册异常。
为对应到具体版本并进一步缩小原因,请补充以下信息:
- 本次编包使用的 ops-transformer 提交号,以及主线 CANN 包的完整版本或构建标识。
torch、torch_npu的版本,以及主线和 experimental 扩展包的安装版本;若安装过多个版本,也请说明。
这些信息有助于区分特定版本的初始化问题与多版本安装造成的加载冲突。


9 days ago Assign Leeshoujem as responsible person
9 days ago Associated pull request
5 days ago Close issue
5 days ago Added label: resolved
Describe the current behavior / 问题描述 (Mandatory / 必填)
安装主线后,在仓内执行:bash build.sh --torch_extension --experimental --vendor_name=experimental --ops="quant_sparse_lightning_indexer_dsl,quant_lightning_indexer_dsl,mixed_quant_sparse_flash_mla_dsl,indexer_prologue_qw_dsl,indexer_prologue_k_dsl,compressor_v2,engram_gate_dsl" 进行编包,编译成功并安装后,在终端执行python3 -c 'import torch, torch_npu; import cann_ops_transformer'出现以下重复注册报错:
Environment Information / 环境信息 (Mandatory / 必填)
950pr
主线cann包
python 3.12
Steps to reproduce the issue / 重现步骤 (Mandatory / 必填)
python3 -c 'import torch, torch_npu; import cann_ops_transformer'
Describe the expected behavior / 预期结果 (Mandatory / 必填)
出现重复注册报错
Related log / screenshot / 日志 / 截图 (Mandatory / 必填)
Traceback (most recent call last):", line 1, in
File "
File "/usr/local/Ascend/cann-9.3.0/python/site-packages/cann_ops_transformer/init.py", line 18, in
from . import ops # noqa: F401
^^^^^^^^^^^^^^^^^
File "/usr/local/Ascend/cann-9.3.0/python/site-packages/cann_ops_transformer/ops/init.py", line 110, in
_load_op(_name, _target)
File "/usr/local/Ascend/cann-9.3.0/python/site-packages/cann_ops_transformer/ops/init.py", line 76, in _load_op
gmod = importlib.import_module("%s.graph_convert%s" % (module_path, name))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/python3.12.14/lib/python3.12/importlib/init.py", line 90, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/python3.12.14/lib/python3.12/site-packages/cann_ops_transformer_experimental/init.py", line 18, in
from . import ops # noqa: F401
^^^^^^^^^^^^^^^^^
File "/usr/local/python3.12.14/lib/python3.12/site-packages/cann_ops_transformer_experimental/ops/init.py", line 110, in
_load_op(_name, _target)
File "/usr/local/python3.12.14/lib/python3.12/site-packages/cann_ops_transformer_experimental/ops/init.py", line 76, in _load_op
gmod = importlib.import_module("%s.graph_convert%s" % (module_path, name))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/python3.12.14/lib/python3.12/importlib/init.py", line 90, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/python3.12.14/lib/python3.12/site-packages/cann_ops_transformer_experimental/ops/attention/init.py", line 3, in
from .indexer_prologue_qw_dsl import *
File "/usr/local/python3.12.14/lib/python3.12/site-packages/cann_ops_transformer_experimental/ops/attention/indexer_prologue_qw_dsl/init.py", line 16, in
from .indexer_prologue_qw import indexer_prologue_qw as _indexer_prologue_qw_impl # noqa: F401
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/python3.12.14/lib/python3.12/site-packages/cann_ops_transformer_experimental/ops/attention/indexer_prologue_qw_dsl/indexer_prologue_qw.py", line 74, in
indexer_prologue_qw_op_builder._ensure_initialized()
File "/usr/local/python3.12.14/lib/python3.12/site-packages/cann_ops_transformer_experimental/op_builder/builder.py", line 57, in _ensure_initialized
self.register_schema(self.schema())
File "/usr/local/python3.12.14/lib/python3.12/site-packages/cann_ops_transformer_experimental/op_builder/builder.py", line 96, in register_schema
get_as_library().define(schema)
File "/usr/local/python3.12.14/lib/python3.12/site-packages/torch/library.py", line 163, in define
result = self.m.define(schema, alias_analysis, tuple(tags))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: Tried to register an operator (cann_ops_transformer::ds41.indexer_prologue_qw(Tensor x, Tensor qr, Tensor wqb, Tensor ww, Tensor descale_qr, Tensor descale_wqb, Tensor rope_sin, Tensor rope_cos, *, float softmax_scale, Tensor? q=None, Tensor? descale_q=None, Tensor? w=None) -> (Tensor, Tensor, Tensor)) with the same name and overload name multiple times. Each overload's schema should only be registered with a single call to def(). Duplicate registration: registered at /usr/local/python3.12.14/lib/python3.12/site-packages/cann_ops_transformer_experimental/op_builder/builder.py:36. Original registration: registered at /usr/local/python3.12.14/lib/python3.12/site-packages/cann_ops_transformer_experimental/op_builder/builder.py:36
Special notes for this issue/备注 (Optional / 选填)