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_cc/`: A sample C++ project built with Makefile/CMake.
|
||||||
* `hello_bazel/`: A sample C++ project built with [Bazel](https://bazel.build).
|
* `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).
|
* `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.
|
* `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/).
|
* `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