mmdeploy/tools/scripts/build_ubuntu_x64_torchscrip...

129 lines
3.9 KiB
Python

# Copyright (c) OpenMMLab. All rights reserved.
import os
import sys
import time
from pathlib import Path
from ubuntu_utils import (cmd_result, cu_version_name, ensure_base_env,
get_job, pytorch_version)
g_jobs = 2
def install_libtorch(dep_dir):
print('-' * 10 + 'install libtorch' + '-' * 10)
time.sleep(2)
os.chdir(dep_dir)
unzipped_name = 'libtorch'
if os.path.exists(unzipped_name):
return os.path.join(dep_dir, unzipped_name)
torch_version = pytorch_version()
if torch_version is None:
print('torch version is None, try 1.11.0')
torch_version = '1.11.0'
version_name = None
# first check `nvcc` version, if failed, use `nvidia-smi`
cuda = cmd_result(
" nvcc --version | grep release | awk '{print $5}' | awk -F , '{print $1}' " # noqa: E501
)
if cuda is None or len(cuda) < 1:
cuda = cmd_result(" nvidia-smi | grep CUDA | awk '{print $9}' ")
if cuda is not None and len(cuda) > 0:
version_name = cu_version_name(cuda)
else:
version_name = 'cpu'
filename = 'libtorch-shared-with-deps-{}%2B{}.zip'.format(
torch_version, version_name)
url = 'https://download.pytorch.org/libtorch/{}/{}'.format(
version_name, filename)
os.system('wget -q --show-progress {} -O libtorch.zip'.format(url))
os.system('unzip libtorch.zip')
if not os.path.exists(unzipped_name):
print(
'download or unzip libtorch from {} failed, please check https://pytorch.org/get-started/locally/' # noqa: E501
.format(url))
return None
return os.path.join(dep_dir, unzipped_name)
def install_mmdeploy(work_dir, libtorch_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 && Torch_DIR={} cmake ..'.format(libtorch_dir)
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=torchscript '
cmd += ' -DTORCHSCRIPT_DIR={} '.format(libtorch_dir)
os.system(cmd)
os.system('cd build && make -j {} && make install'.format(g_jobs))
os.system('python3 -m pip install -e .')
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 ort. 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_torchscript.py`
Returns:
_type_: _description_
"""
global g_jobs
g_jobs = get_job(sys.argv)
print('g_jobs {}'.format(g_jobs))
work_dir = os.path.abspath(os.path.join(__file__, '..', '..', '..'))
dep_dir = os.path.abspath(os.path.join(work_dir, '..', 'mmdeploy-dep'))
if not os.path.exists(dep_dir):
if os.path.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
libtorch_dir = install_libtorch(dep_dir)
if libtorch_dir is None:
return -1
if install_mmdeploy(work_dir, libtorch_dir) != 0:
return -1
if os.path.exists(Path('~/mmdeploy.env').expanduser()):
print('Please source ~/mmdeploy.env to setup your env !')
os.system('cat ~/mmdeploy.env')
if __name__ == '__main__':
main()