NPU 환경에서 mmcv 설치 방법
Source: Dev.to
설명
오늘 Ascend GPU에서 musetalk 모델을 실행하려고 했지만, mmcv 때문에 많은 문제가 발생했습니다. 경험을 정리해서 여기서 공유하고자 합니다.
내 환경
- NPU: 910b2
- OS: aarch64 Ubuntu 22.04.5 LTS
이야기
pip으로 mmcv를 설치하려고 시도했을 때 No module named mmcv._ext 오류가 발생했습니다. 이 오류는 소스 코드를 직접 컴파일해야만 해결할 수 있었습니다. 컴파일은 CPU 환경에서는 성공했지만 NPU 환경에서는 실패했습니다.
CPU로 컴파일하기
GitHub에서 mmcv 코드를 다운로드하고, npu-dev 브랜치를 사용합니다:
https://github.com/open-mmlab/mmcv/tree/npu-dev

setup.py 수정하기
21번째 줄
# cmd_class = {'build_ext': BuildExtension}
cmd_class = {'build_ext': BuildExtension.with_options(use_ninja=False)}
273‑300번째 줄
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']
빌드 명령어
전제 조건: 명령을 실행하기 전에
torch와torchvision을 설치하십시오.
MMCV_WITH_OPS=1 MAX_JOBS=40 python setup.py build_ext
운이 좋다면 다음도 시도해 볼 수 있습니다:
MMCV_WITH_OPS=1 MAX_JOBS=40 python setup.py develop
참고: develop은 site‑packages 폴더에 심볼릭 링크를 생성합니다.
mmcv 모듈을 확인합니다:
from mmcv.ops import MultiScaleDeformableAttention
실제 설치 명령어:
MMCV_WITH_OPS=1 MAX_JOBS=40 python setup.py install
주의 사항
_ext.cpython-310-aarch64-linux-gnu.so 파일이 mmcv 디렉터리에 있지 않을 수 있으며, 대신 빌드 디렉터리에 존재합니다. 이 경우 직접 심볼릭 링크를 만들어 주어야 합니다.