2022-12-12 21:19:40 +08:00
|
|
|
# Copyright (c) OpenMMLab. All rights reserved.
|
|
|
|
import os
|
|
|
|
import os.path as osp
|
|
|
|
import sys
|
|
|
|
import time
|
|
|
|
|
|
|
|
from ubuntu_utils import cmd_result, ensure_base_env, get_job
|
|
|
|
|
|
|
|
|
|
|
|
def install_llvm(dep_dir):
|
|
|
|
print('-' * 10 + 'install llvm' + '-' * 10)
|
|
|
|
|
|
|
|
os.chdir(dep_dir)
|
|
|
|
os.system(
|
|
|
|
'wget --no-check-certificate -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -' # noqa: E501
|
|
|
|
)
|
|
|
|
|
|
|
|
ubuntu = cmd_result(
|
|
|
|
""" lsb_release -a 2>/dev/null | grep "Release" | tail -n 1 | awk '{print $NF}' """ # noqa: E501
|
|
|
|
)
|
|
|
|
|
|
|
|
nickname_dict = {
|
|
|
|
'18.04': 'bionic',
|
|
|
|
'20.04': 'focal',
|
|
|
|
'22.04': 'jammy',
|
|
|
|
'22.10': 'kinetic'
|
|
|
|
}
|
|
|
|
nickname = nickname_dict.get(ubuntu, None)
|
|
|
|
if nickname is None:
|
|
|
|
raise NotImplementedError(f'Unsupported ubuntu version {ubuntu}.')
|
|
|
|
os.system(
|
|
|
|
f"add-apt-repository 'deb http://apt.llvm.org/{nickname}/ llvm-toolchain-{nickname}-10 main'" # noqa: E501
|
|
|
|
)
|
|
|
|
os.system('sudo apt update')
|
|
|
|
os.system(
|
|
|
|
'sudo apt-get install llvm-10 lldb-10 llvm-10-dev libllvm10 llvm-10-runtime' # noqa: E501
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
def install_tvm(dep_dir):
|
|
|
|
print('-' * 10 + 'build and install tvm' + '-' * 10)
|
|
|
|
time.sleep(2)
|
|
|
|
|
|
|
|
os.system('sudo apt-get update')
|
|
|
|
os.system(
|
|
|
|
'sudo apt-get install -y python3 python3-dev python3-setuptools gcc libtinfo-dev zlib1g-dev build-essential cmake libedit-dev libxml2-dev' # noqa: E501
|
|
|
|
)
|
|
|
|
|
|
|
|
# generate unzip and build dir
|
|
|
|
os.chdir(dep_dir)
|
|
|
|
|
|
|
|
# git clone
|
|
|
|
if not osp.exists('tvm'):
|
|
|
|
os.system(
|
|
|
|
'git clone --branch v0.10.0 --depth 1 --recursive https://github.com/apache/tvm tvm' # noqa: E501
|
|
|
|
)
|
|
|
|
|
|
|
|
tvm_dir = osp.join(dep_dir, 'tvm')
|
|
|
|
os.chdir(tvm_dir)
|
|
|
|
|
|
|
|
# build
|
|
|
|
if not osp.exists('build'):
|
|
|
|
os.system('mkdir build')
|
|
|
|
os.system('cp cmake/config.cmake build')
|
|
|
|
|
|
|
|
os.chdir(osp.join(tvm_dir, 'build'))
|
|
|
|
|
|
|
|
os.system(
|
|
|
|
""" sed -i "s@set(USE_LLVM OFF)@set(USE_LLVM /usr/bin/llvm-config-10)@g" config.cmake """ # noqa: E501
|
|
|
|
)
|
|
|
|
|
|
|
|
os.system('cmake .. && make -j {} && make runtime'.format(g_jobs))
|
|
|
|
|
|
|
|
# set env
|
|
|
|
os.system(
|
|
|
|
""" echo 'export LD_LIBRARY_PATH={}:$LD_LIBRARY_PATH' >> ~/mmdeploy.env """ # noqa: E501
|
|
|
|
.format(os.path.join(tvm_dir, 'build')))
|
|
|
|
|
|
|
|
# install python package
|
|
|
|
os.chdir(osp.join(tvm_dir, 'python'))
|
|
|
|
os.system(""" python3 setup.py install --user """)
|
|
|
|
|
|
|
|
# install dependency
|
|
|
|
os.system(
|
2023-01-20 00:19:37 +08:00
|
|
|
""" python3 -m pip install xgboost decorator psutil scipy attrs tornado --user """ # noqa: E501
|
2022-12-12 21:19:40 +08:00
|
|
|
)
|
|
|
|
|
|
|
|
return tvm_dir
|
|
|
|
|
|
|
|
|
|
|
|
def install_mmdeploy(work_dir, tvm_dir):
|
|
|
|
print('-' * 10 + 'build and install mmdeploy' + '-' * 10)
|
|
|
|
time.sleep(3)
|
|
|
|
|
|
|
|
os.chdir(work_dir)
|
|
|
|
os.system('git submodule init')
|
|
|
|
os.system('git submodule update')
|
|
|
|
|
|
|
|
if not os.path.exists('build'):
|
|
|
|
os.system('mkdir build')
|
|
|
|
|
|
|
|
os.system('rm -rf build/CMakeCache.txt')
|
|
|
|
|
|
|
|
cmd = 'cd build && cmake ..'
|
|
|
|
cmd += ' -DMMDEPLOY_BUILD_SDK=ON '
|
|
|
|
cmd += ' -DMMDEPLOY_BUILD_EXAMPLES=ON '
|
|
|
|
cmd += ' -DMMDEPLOY_BUILD_SDK_PYTHON_API=ON '
|
|
|
|
cmd += ' -DMMDEPLOY_TARGET_DEVICES=cpu '
|
|
|
|
cmd += ' -DMMDEPLOY_TARGET_BACKENDS=tvm '
|
|
|
|
cmd += ' -DTVM_DIR={} '.format(tvm_dir)
|
|
|
|
os.system(cmd)
|
|
|
|
|
|
|
|
os.system('cd build && make -j {} && make install'.format(g_jobs))
|
|
|
|
os.system('python3 -m pip install -v -e .')
|
|
|
|
os.system(""" echo 'export PATH={}:$PATH' >> ~/mmdeploy.env """.format(
|
|
|
|
os.path.join(work_dir, 'mmdeploy', 'backend', 'tvm')))
|
|
|
|
try:
|
|
|
|
import mmcv
|
|
|
|
print(mmcv.__version__)
|
|
|
|
os.system('python3 tools/check_env.py')
|
|
|
|
except Exception:
|
|
|
|
print('Please install torch & mmcv later...')
|
|
|
|
return 0
|
|
|
|
|
|
|
|
|
|
|
|
def main():
|
|
|
|
"""Auto install mmdeploy with tvm. To verify this script:
|
|
|
|
|
|
|
|
1) use `sudo docker run -v /path/to/mmdeploy:/root/mmdeploy -v /path/to/Miniconda3-latest-Linux-x86_64.sh:/root/miniconda.sh -it ubuntu:18.04 /bin/bash` # noqa: E501
|
|
|
|
2) install conda and setup python environment
|
|
|
|
3) run `python3 tools/scripts/build_ubuntu_x64_tvm.py`
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
_type_: _description_
|
|
|
|
"""
|
|
|
|
global g_jobs
|
|
|
|
g_jobs = get_job(sys.argv)
|
|
|
|
print('g_jobs {}'.format(g_jobs))
|
|
|
|
|
|
|
|
work_dir = osp.abspath(osp.join(__file__, '..', '..', '..'))
|
|
|
|
dep_dir = osp.abspath(osp.join(work_dir, '..', 'mmdeploy-dep'))
|
|
|
|
if not osp.exists(dep_dir):
|
|
|
|
if osp.isfile(dep_dir):
|
|
|
|
print('{} already exists and it is a file, exit.'.format(work_dir))
|
|
|
|
return -1
|
|
|
|
os.mkdir(dep_dir)
|
|
|
|
|
|
|
|
success = ensure_base_env(work_dir, dep_dir)
|
|
|
|
if success != 0:
|
|
|
|
return -1
|
|
|
|
|
|
|
|
install_llvm(dep_dir)
|
|
|
|
tvm_dir = install_tvm(dep_dir)
|
|
|
|
if install_mmdeploy(work_dir, tvm_dir) != 0:
|
|
|
|
return -1
|
|
|
|
|
|
|
|
if osp.exists('~/mmdeploy.env'):
|
|
|
|
print('Please source ~/mmdeploy.env to setup your env !')
|
|
|
|
os.system('cat ~/mmdeploy.env')
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
main()
|