NPU对pytorch,想将检测模型在NPU上训练,存在编译MultiScaleDeformableAttention的需求。
然而,原dino模型https://github.com/IDEA-Research/DINO/tree/main/models/dino/ops/src
仅包含CPU版本和GPU版本:
是不是就真的无法解决了呢?
好在mmcv支持了NPU版本,可以通过编译NPU版本的mmcv实现(参考:https://mmcv.readthedocs.io/en/master/get_started/build.html):
https://github.com/open-mmlab/mmcvd
通过以上链接下载源码,或git:
git pull https://github.com/open-mmlab/mmcv.git
到下载的文件夹下执行:
# 编译
MMCV_WITH_OPS=1 MAX_JOBS=8 FORCE_NPU=1 python setup.py build_ext# 安装
MMCV_WITH_OPS=1 FORCE_NPU=1 python setup.py develop
该方法大概率会出现错误:
“subprocess.CalledProcessError: Command ‘[‘ninja‘, ‘-v‘]‘ returned non-zero exit status 1”
解决方法:禁用默认的backend: ninjia
修改mmcv文件夹下的setup.py第21行:
cmd_class={'build_ext': BuildExtension.with_options(use_ninja=False)}
修改后,发现可以正常编译!
或者也可以直接安装:
pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/ascend/torch2.0.1/index.html
可能还需要安装一下mmengine:
pip install mmengine