Add Intel OpenVINO demo
This demo shows how to run Intel OpenVINO Inference Engine on Occlum inside SGX enclaves
This commit is contained in:
parent
4ee3396152
commit
b9fa937504
@ -6,5 +6,6 @@ This directory contains sample projects that demonstrate how Occlum can be used
|
||||
* `hello_cc/`: A sample C++ project built with Makefile/CMake.
|
||||
* `hello_bazel/`: A sample C++ project built with [Bazel](https://bazel.build).
|
||||
* `https_server/`: A HTTPS file server based on [Mongoose Embedded Web Server Library](https://github.com/cesanta/mongoose).
|
||||
* `openvino/` A benchmark of [OpenVINO Inference Engine](https://docs.openvinotoolkit.org/2019_R3/_docs_IE_DG_inference_engine_intro.html).
|
||||
* `tensorflow_lite/`: A demo and benchmark of [Tensorflow Lite](https://www.tensorflow.org/lite) inference engine.
|
||||
* `xgboost/`: A demo of [XGBoost](https://xgboost.readthedocs.io/en/latest/).
|
||||
|
4
demos/openvino/.gitignore
vendored
Normal file
4
demos/openvino/.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
deps/
|
||||
openvino_src/
|
||||
model/
|
||||
occlum_context/
|
29
demos/openvino/README.md
Normal file
29
demos/openvino/README.md
Normal file
@ -0,0 +1,29 @@
|
||||
# Use OpenVINO Inference Engine in SGX with Occlum
|
||||
|
||||
This project demonstrates how Occlum enables [OpenVINO](https://github.com/opencv/dldt) in SGX enclaves.
|
||||
|
||||
Step 1: Install CMake(3.15.5), because OpenVINO depends on a newer version of CMake
|
||||
```
|
||||
./install_cmake.sh
|
||||
```
|
||||
|
||||
Step 2: Download OpenVINO and build the Inference Engine, it will also download and install OpenCV
|
||||
```
|
||||
./download_and_build_openvino.sh
|
||||
```
|
||||
When completed, the resulting OpenVINO can be found in `openvino_src` directory. Threading Building Blocks (TBB) is used by default. To use OpenMP, add option `--threading OMP` when invoking the script above.
|
||||
|
||||
Step 3: Download the example of OpenVINO models from [01.org](https://download.01.org/opencv/)
|
||||
```
|
||||
./download_openvino_model.sh
|
||||
```
|
||||
|
||||
Step 4: Run OpenVINO Inference Engine benchmark app inside SGX enclave with Occlum
|
||||
```
|
||||
./run_benchmark_on_occlum.sh
|
||||
```
|
||||
|
||||
Step 5 (Optional): Run OpenVINO Inference Engine benchmark app in Linux
|
||||
```
|
||||
./openvino_src/inference-engine/bin/intel64/Release/benchmark_app -m ./model/age-gender-recognition-retail-0013.xml
|
||||
```
|
119
demos/openvino/download_and_build_openvino.sh
Executable file
119
demos/openvino/download_and_build_openvino.sh
Executable file
@ -0,0 +1,119 @@
|
||||
#!/bin/bash
|
||||
PREFIX=/usr/local/occlum/x86_64-linux-musl
|
||||
THREADING=TBB
|
||||
set -e
|
||||
|
||||
show_usage() {
|
||||
echo
|
||||
echo "Usage: $0 [--threading <TBB/OMP>]"
|
||||
echo
|
||||
exit 1
|
||||
}
|
||||
|
||||
build_opencv() {
|
||||
rm -rf deps/zlib && mkdir -p deps/zlib
|
||||
pushd deps/zlib
|
||||
git clone https://github.com/madler/zlib .
|
||||
CC=occlum-gcc CXX=occlum-g++ ./configure --prefix=$PREFIX
|
||||
make
|
||||
sudo make install
|
||||
popd
|
||||
|
||||
rm -rf deps/opencv && mkdir -p deps/opencv
|
||||
pushd deps/opencv
|
||||
git clone https://github.com/opencv/opencv .
|
||||
git checkout tags/4.1.0 -b 4.1.0
|
||||
mkdir build
|
||||
cd build
|
||||
cmake ../ \
|
||||
-DCMAKE_BUILD_TYPE=RELEASE \
|
||||
-DCMAKE_INSTALL_PREFIX=$PREFIX \
|
||||
-DCMAKE_C_COMPILER=occlum-gcc -DCMAKE_CXX_COMPILER=occlum-g++ \
|
||||
-DENABLE_PRECOMPILED_HEADERS=OFF \
|
||||
-DOPENCV_PC_FILE_NAME=opencv.pc \
|
||||
-DOPENCV_GENERATE_PKGCONFIG=ON \
|
||||
-DBUILD_opencv_java=OFF -DBUILD_JAVA_SUPPORT=OFF \
|
||||
-DBUILD_opencv_python=OFF -DBUILD_PYTHON_SUPPORT=OFF \
|
||||
-DBUILD_EXAMPLES=OFF -DWITH_FFMPEG=OFF \
|
||||
-DWITH_QT=OFF -DWITH_CUDA=OFF
|
||||
make -j
|
||||
sudo make install
|
||||
popd
|
||||
}
|
||||
|
||||
build_tbb() {
|
||||
rm -rf deps/tbb_cmake && mkdir -p deps/tbb_cmake
|
||||
pushd deps/tbb_cmake
|
||||
git clone https://github.com/wjakob/tbb .
|
||||
git checkout 344fa84f34089681732a54f5def93a30a3056ab9
|
||||
mkdir cmake_build && cd cmake_build
|
||||
cmake ../ \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_CXX_COMPILER=occlum-g++ -DCMAKE_C_COMPILER=occlum-gcc \
|
||||
-DCMAKE_INSTALL_PREFIX=$PREFIX \
|
||||
-DTBB_BUILD_TESTS=OFF \
|
||||
-DTBB_BUILD_TBBMALLOC_PROXY=OFF
|
||||
make
|
||||
sudo make install
|
||||
popd
|
||||
}
|
||||
|
||||
# Build OpenVINO
|
||||
build_openvino() {
|
||||
rm -rf openvino_src && mkdir openvino_src
|
||||
pushd openvino_src
|
||||
git clone https://github.com/opencv/dldt .
|
||||
git checkout tags/2019_R3 -b 2019_R3
|
||||
cd inference-engine
|
||||
git submodule init
|
||||
git submodule update --recursive
|
||||
mkdir build && cd build
|
||||
# Substitute THREADING lib
|
||||
cmake ../ \
|
||||
-DTHREADING=$THREADING \
|
||||
-DENABLE_MKL_DNN=ON \
|
||||
-DENABLE_CLDNN=OFF \
|
||||
-DENABLE_MYRIAD=OFF \
|
||||
-DENABLE_GNA=OFF
|
||||
[ "$THREADING" == "OMP" ] && rm -rf ../temp/omp/lib/* && cp $PREFIX/lib/libgomp.so ../temp/omp/lib/libiomp5.so
|
||||
[ "$THREADING" == "TBB" ] && rm -rf ../temp/tbb/lib/* && cp $PREFIX/lib/libtbb.so ../temp/tbb/lib && cp $PREFIX/lib/libtbbmalloc.so ../temp/tbb/lib
|
||||
cd ../
|
||||
rm -rf build && mkdir build && cd build
|
||||
# Substitute OpenCV
|
||||
export OpenCV_DIR=$PREFIX/lib/cmake/opencv4
|
||||
cmake ../ \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_CXX_COMPILER=occlum-g++ -DCMAKE_CXX_FLAGS="-Wno-error=stringop-overflow=" \
|
||||
-DCMAKE_C_COMPILER=occlum-gcc -DCMAKE_C_FLAGS="-Wno-error=stringop-overflow=" \
|
||||
-DCMAKE_INSTALL_PREFIX=$PREFIX \
|
||||
-DTHREADING=$THREADING \
|
||||
-DENABLE_MKL_DNN=ON \
|
||||
-DENABLE_CLDNN=OFF \
|
||||
-DENABLE_OPENCV=OFF \
|
||||
-DENABLE_MYRIAD=OFF \
|
||||
-DENABLE_GNA=OFF
|
||||
make -j4
|
||||
popd
|
||||
}
|
||||
|
||||
while [ -n "$1" ]; do
|
||||
case "$1" in
|
||||
--threading) [ -n "$2" ] && THREADING=$2 ; shift 2 || show_usage ;;
|
||||
*)
|
||||
show_usage
|
||||
esac
|
||||
done
|
||||
|
||||
if [ "$THREADING" == "TBB" ] ; then
|
||||
echo "Build OpenVINO with TBB threading"
|
||||
build_opencv
|
||||
build_tbb
|
||||
build_openvino
|
||||
elif [ "$THREADING" == "OMP" ] ; then
|
||||
echo "Build OpenVINO with OpenMP threading"
|
||||
build_opencv
|
||||
build_openvino
|
||||
else
|
||||
echo "Error: invalid threading: $THREADING"
|
||||
show_usage
|
||||
fi
|
7
demos/openvino/download_openvino_model.sh
Executable file
7
demos/openvino/download_openvino_model.sh
Executable file
@ -0,0 +1,7 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
rm -rf model && mkdir model
|
||||
cd model
|
||||
wget https://download.01.org/opencv/2019/open_model_zoo/R3/20190905_163000_models_bin/age-gender-recognition-retail-0013/FP32/age-gender-recognition-retail-0013.bin
|
||||
wget https://download.01.org/opencv/2019/open_model_zoo/R3/20190905_163000_models_bin/age-gender-recognition-retail-0013/FP32/age-gender-recognition-retail-0013.xml
|
8
demos/openvino/install_cmake.sh
Executable file
8
demos/openvino/install_cmake.sh
Executable file
@ -0,0 +1,8 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
cd ~
|
||||
wget https://github.com/Kitware/CMake/releases/download/v3.15.5/cmake-3.15.5.tar.gz && tar xf cmake-3.15.5.tar.gz
|
||||
cd cmake-3.15.5
|
||||
./bootstrap
|
||||
make -j
|
||||
sudo make install
|
37
demos/openvino/run_benchmark_on_occlum.sh
Executable file
37
demos/openvino/run_benchmark_on_occlum.sh
Executable file
@ -0,0 +1,37 @@
|
||||
#!/bin/bash
|
||||
benchmark=benchmark_app
|
||||
inference_bin=openvino_src/inference-engine/bin/intel64/Release
|
||||
occlum_lib=/usr/local/occlum/x86_64-linux-musl/lib
|
||||
set -e
|
||||
|
||||
# 1. Init Occlum Workspace
|
||||
rm -rf occlum_context
|
||||
mkdir occlum_context
|
||||
cd occlum_context
|
||||
occlum init
|
||||
jq '.process.default_mmap_size = "192MB"' Occlum.json > temp_Occlum.json
|
||||
mv temp_Occlum.json Occlum.json
|
||||
|
||||
# 2. Copy files into Occlum Workspace and Build
|
||||
cp ../$inference_bin/$benchmark image/bin
|
||||
cp ../$inference_bin/lib/libinference_engine.so image/lib
|
||||
cp ../$inference_bin/lib/libformat_reader.so image/lib
|
||||
cp ../$inference_bin/lib/libcpu_extension.so image/lib
|
||||
cp ../$inference_bin/lib/libHeteroPlugin.so image/lib
|
||||
cp ../$inference_bin/lib/libMKLDNNPlugin.so image/lib
|
||||
cp ../$inference_bin/lib/plugins.xml image/lib
|
||||
cp $occlum_lib/libopencv_imgcodecs.so.4.1 image/lib
|
||||
cp $occlum_lib/libopencv_imgproc.so.4.1 image/lib
|
||||
cp $occlum_lib/libopencv_core.so.4.1 image/lib
|
||||
cp $occlum_lib/libopencv_videoio.so.4.1 image/lib
|
||||
cp $occlum_lib/libz.so.1 image/lib
|
||||
[ -e $occlum_lib/libtbb.so ] && cp $occlum_lib/libtbb.so image/lib
|
||||
[ -e $occlum_lib/libtbbmalloc.so ] && cp $occlum_lib/libtbbmalloc.so image/lib
|
||||
mkdir image/proc
|
||||
cp /proc/cpuinfo image/proc
|
||||
mkdir image/model
|
||||
cp -r ../model/* image/model
|
||||
occlum build
|
||||
|
||||
# 3. Run benchmark
|
||||
occlum run /bin/$benchmark -m /model/age-gender-recognition-retail-0013.xml
|
Loading…
Reference in New Issue
Block a user