提交 8e4c3c53 编写于 作者: M Megvii Engine Team

feat(imperative/opr): fix extern c opr mace example md

GitOrigin-RevId: b83fa4568b4659e539c827378f9a02e5161ea1af
上级 27f2ecc4
...@@ -15,7 +15,8 @@ endif ...@@ -15,7 +15,8 @@ endif
TARGET := libmace_loader.so TARGET := libmace_loader.so
all: $(TARGET) all: $(TARGET)
CXX = aarch64-linux-android-g++ # can be find at NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin/
CXX = aarch64-linux-android21-clang++
CXXFLAGS = -std=c++14 -I$(SDKPATH)/include \ CXXFLAGS = -std=c++14 -I$(SDKPATH)/include \
-Dmgb_mace_loader_init=mgb_c_opr_init -Dmgb_mace_loader_init=mgb_c_opr_init
...@@ -27,12 +28,7 @@ else ...@@ -27,12 +28,7 @@ else
CXXFLAGS += -O2 CXXFLAGS += -O2
endif endif
LDFLAGS = -L$(SDKPATH)/lib \ LDFLAGS = -L$(SDKPATH)/lib -lmace -llog
-lmace_static -lcore -lgenerated_version \
-lport_android -lport_linux_base -lport_posix -lport_base \
-lproto -lutils -lgenerated_opencl_kernel \
-lops -lcore -lprotobuf-lite -llog \
-lpthread -l:rpcmem.a
LDLIBS = -shared -fPIC LDLIBS = -shared -fPIC
......
# Extern-C-Opr with MACE # Extern-C-Opr with MACE
### Build MegEngine `load_and_run` for arm64-v8a ### Build MegEngine `load_and_run` for arm64-v8a
NOTICE: build depends on [NDK](https://developer.android.com/ndk/downloads)
after download, please config env by:
```bash
export NDK_ROOT=path/to/ndk
export ANDROID_NDK_HOME=${NDK_ROOT}
export PATH=${NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin/:$PATH
```
```bash ```bash
cd $MEGENGINE_HOME cd $MEGENGINE_HOME
git checkout v1.0.0 (we only test v1.0.0 version)
./scripts/cmake-build/cross_build_android_arm_inference.sh -a arm64-v8a -r ./scripts/cmake-build/cross_build_android_arm_inference.sh -a arm64-v8a -r
``` ```
After successfully built, load_and_run should be in `$MEGENGINE_HOME/build_dir/android/arm64-v8a/Release/install/bin` After successfully built:
* load_and_run should be in `$MEGENGINE_HOME/build_dir/android/arm64-v8a/Release/install/bin`
* libmegengine.so should be in `$MEGENGINE_HOME/build_dir/android/arm64-v8a/Release/install/lib`
### Build MACE libraries for arm64-v8a with GPU runtime ### Build MACE libraries for arm64-v8a with GPU runtime
```bash ```bash
cd $MACE_HOME cd $MACE_HOME
RUNTIME=GPU bash tools/cmake/cmake-build-arm64-v8a.sh RUNTIME=GPU bash tools/cmake/cmake-build-arm64-v8a.sh
export SDKPATH=${MACE_HOME}/build/cmake-build/arm64-v8a/install
cp -r $MACE_HOME/build/cmake-build/arm64-v8a/install $MEGENGINE_HOME/sdk/c-opr-loaders/mace/arm64-v8a
``` ```
After successfully libmace.so should be in `$MACE_HOME/build/cmake-build/arm64-v8a/install/lib/libmace.so`
### Build MACE loader for MegEngine ### Build MACE loader for MegEngine
``` If `SDKPATH` is not set, by default it's `./arm64-v8a`
SDK_PATH=/path/to/mace-sdk make
```
If `SDK_PATH` is not set, by default it's `./arm64-v8a`
You can run with debug mode(by adding `DEBUG=1` to make command), which will show more running information You can run with debug mode(by adding `DEBUG=1` to make command), which will show more running information
### Prepare a MACE model(for example: resnet_50), wrap it with MegEngine extern c opr ### Prepare a MACE model(for example: resnet_50), wrap it with MegEngine extern c opr
``` ```
python3 dump_model.py path/to/resnet_50.pb path/to/resnet_50.data path/to/resnet_50.mdl path/to/resnet_50.yml python3 dump_model.py --input path/to/resnet_50.pb --param path/to/resnet_50.data --output resnet_50.mdl --config path/to/resnet_50.yml
``` ```
`*.pb` file denotes the model structure, `*.data` denotes the model parameters `*.pb` file denotes the model structure, `*.data` denotes the model parameters
...@@ -40,14 +46,22 @@ Check [here](https://github.com/XiaoMi/mace-models) to learn how to write yml fi ...@@ -40,14 +46,22 @@ Check [here](https://github.com/XiaoMi/mace-models) to learn how to write yml fi
### Run with load-and-run ### Run with load-and-run
First of all, send all files to the executed device: First of all, send all files to the executed device(for example: /data/local/tmp/test/):
- load_and_run - load_and_run
- resnet_50.mdl - resnet_50.mdl
- libmace_loader.so - libmace_loader.so
- libmegengine.so
- libmace.so
As mace build with `c++_shared` by default, but old AOSP device do not have `libc++_shared.so` by default, if you use this class devices
also need send it to devices, which always can be found at `${NDK_ROOT}/sources/cxx-stl/llvm-libc++/libs/arm64-v8a/libc++_shared.so`
``` ```
MGB_MACE_RUNTIME=GPU MGB_MACE_OPENCL_CACHE_PATH=/path/to/opencl MGB_MACE_LOADER_FORMAT=NCHW /path/to/load_and_run /path/to/resnet_50.mdl --c-opr-lib /path/to/libmace_loader.so login to device
cd /path/to/ (for example: /data/local/tmp/test/)
MGB_MACE_RUNTIME=GPU MGB_MACE_OPENCL_CACHE_PATH=./ MGB_MACE_LOADER_FORMAT=NCHW LD_LIBRARY_PATH=. ./load_and_run resnet_50.mdl --c-opr-lib libmace_loader.so --input input-bs1.npy
``` ```
RUNTIME candidates: RUNTIME candidates:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册