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