How to install mmcv in an Npu Enviroment
Description ## My Environment ## Compile with CPU ## Notice I want to run musetalk model in Ascend GPU today, but the mmcv caused a lot of trouble.I summarized some experience and would like to share it here. When I attempted to install mmcv with pip, an error No module named mmcv._ext error will be thrown. This error could only be resolved by compiling it from source code.However, the compilation succeeded in Cpu environment but failed when attempted to compiled it for npu environment. From 273 line to 300 line You must install torch and torchvision before run the following command. MMCV_WITH_OPS=1 MAX_JOBS=40 python setup.py build_ext Try to run following command if you`re luncky. MMCV_WITH_OPS=1 MAX_JOBS=40 python setup.py develop Note that this is just a test setup, since it will generate a symbolic link to site-packages folder. And run the command blow to verify the mmcv module. from mmcv.ops import MultiScaleDeformableAttention This is the actual installation command. MMCV_WITH_OPS=1 MAX_JOBS=40 python setup.py install The file _ext.cpython-310-aarch64-linux-gnu.so may not be located in the mmcv directory, instead, it resides in the build directory.You must create symbolic link manually. Templates let you quickly answer FAQs or store snippets for re-use. as well , this person and/or CODE_BLOCK:
#cmd_class = {'build_ext': BuildExtension}
cmd_class={'build_ext': BuildExtension.with_options(use_ninja=False)} CODE_BLOCK:
#cmd_class = {'build_ext': BuildExtension}
cmd_class={'build_ext': BuildExtension.with_options(use_ninja=False)} CODE_BLOCK:
#cmd_class = {'build_ext': BuildExtension}
cmd_class={'build_ext': BuildExtension.with_options(use_ninja=False)} COMMAND_BLOCK:
elif (os.getenv('FORCE_NPU', '0') == '1'): print(f'Compiling {ext_name} only with CPU and NPU') try: from torch_npu.utils.cpp_extension import NpuExtension define_macros += [('MMCV_WITH_NPU', None)] extension = NpuExtension except Exception: raise ImportError('can not find any torch_npu') # src op_files = glob.glob('./mmcv/ops/csrc/pytorch/*.cpp') + \ glob.glob('./mmcv/ops/csrc/pytorch/cpu/*.cpp') + \ glob.glob('./mmcv/ops/csrc/common/npu/*.cpp') + \ glob.glob('./mmcv/ops/csrc/pytorch/npu/*.cpp') include_dirs.append(os.path.abspath('./mmcv/ops/csrc/common')) include_dirs.append(os.path.abspath('./mmcv/ops/csrc/common/npu')) if 'cxx' not in extra_compile_args: extra_compile_args['cxx'] = {} extra_compile_args['cxx'] += ['-std=c++17', '-Wall'] else: print(f'Compiling {ext_name} only with CPU') op_files = glob.glob('./mmcv/ops/csrc/pytorch/*.cpp') + \ glob.glob('./mmcv/ops/csrc/pytorch/cpu/*.cpp') extension = CppExtension include_dirs.append(os.path.abspath('./mmcv/ops/csrc/common')) if 'cxx' not in extra_compile_args: extra_compile_args['cxx'] = {} extra_compile_args['cxx'] += ['-std=c++17', '-Wall'] COMMAND_BLOCK:
elif (os.getenv('FORCE_NPU', '0') == '1'): print(f'Compiling {ext_name} only with CPU and NPU') try: from torch_npu.utils.cpp_extension import NpuExtension define_macros += [('MMCV_WITH_NPU', None)] extension = NpuExtension except Exception: raise ImportError('can not find any torch_npu') # src op_files = glob.glob('./mmcv/ops/csrc/pytorch/*.cpp') + \ glob.glob('./mmcv/ops/csrc/pytorch/cpu/*.cpp') + \ glob.glob('./mmcv/ops/csrc/common/npu/*.cpp') + \ glob.glob('./mmcv/ops/csrc/pytorch/npu/*.cpp') include_dirs.append(os.path.abspath('./mmcv/ops/csrc/common')) include_dirs.append(os.path.abspath('./mmcv/ops/csrc/common/npu')) if 'cxx' not in extra_compile_args: extra_compile_args['cxx'] = {} extra_compile_args['cxx'] += ['-std=c++17', '-Wall'] else: print(f'Compiling {ext_name} only with CPU') op_files = glob.glob('./mmcv/ops/csrc/pytorch/*.cpp') + \ glob.glob('./mmcv/ops/csrc/pytorch/cpu/*.cpp') extension = CppExtension include_dirs.append(os.path.abspath('./mmcv/ops/csrc/common')) if 'cxx' not in extra_compile_args: extra_compile_args['cxx'] = {} extra_compile_args['cxx'] += ['-std=c++17', '-Wall'] COMMAND_BLOCK:
elif (os.getenv('FORCE_NPU', '0') == '1'): print(f'Compiling {ext_name} only with CPU and NPU') try: from torch_npu.utils.cpp_extension import NpuExtension define_macros += [('MMCV_WITH_NPU', None)] extension = NpuExtension except Exception: raise ImportError('can not find any torch_npu') # src op_files = glob.glob('./mmcv/ops/csrc/pytorch/*.cpp') + \ glob.glob('./mmcv/ops/csrc/pytorch/cpu/*.cpp') + \ glob.glob('./mmcv/ops/csrc/common/npu/*.cpp') + \ glob.glob('./mmcv/ops/csrc/pytorch/npu/*.cpp') include_dirs.append(os.path.abspath('./mmcv/ops/csrc/common')) include_dirs.append(os.path.abspath('./mmcv/ops/csrc/common/npu')) if 'cxx' not in extra_compile_args: extra_compile_args['cxx'] = {} extra_compile_args['cxx'] += ['-std=c++17', '-Wall'] else: print(f'Compiling {ext_name} only with CPU') op_files = glob.glob('./mmcv/ops/csrc/pytorch/*.cpp') + \ glob.glob('./mmcv/ops/csrc/pytorch/cpu/*.cpp') extension = CppExtension include_dirs.append(os.path.abspath('./mmcv/ops/csrc/common')) if 'cxx' not in extra_compile_args: extra_compile_args['cxx'] = {} extra_compile_args['cxx'] += ['-std=c++17', '-Wall'] - os: aarch64 Ubuntu 22.04.5 LTS - Download mmcv code from github and the branch is npu-dev. - Modify setup.py - Run compile command