From ad4aa9a85f4199948732ded65207270f996fea40 Mon Sep 17 00:00:00 2001 From: Wang Ning Date: Thu, 29 Oct 2020 11:33:49 +0800 Subject: [PATCH] Update build script to enable running tensorflow workload in linux-sgx (#435) --- .../enclave-sample/Enclave/Enclave.config.xml | 4 +- samples/workload/tensorflow/README.md | 9 ++- samples/workload/tensorflow/build.sh | 64 ++++++++++++++----- 3 files changed, 58 insertions(+), 19 deletions(-) diff --git a/product-mini/platforms/linux-sgx/enclave-sample/Enclave/Enclave.config.xml b/product-mini/platforms/linux-sgx/enclave-sample/Enclave/Enclave.config.xml index 6a48563e..5b7387b5 100644 --- a/product-mini/platforms/linux-sgx/enclave-sample/Enclave/Enclave.config.xml +++ b/product-mini/platforms/linux-sgx/enclave-sample/Enclave/Enclave.config.xml @@ -3,8 +3,8 @@ 0 0 0x100000 - 0x1000000 - 0x400000 + 0x2000000 + 0x1000000 1 10 1 diff --git a/samples/workload/tensorflow/README.md b/samples/workload/tensorflow/README.md index d34f51ec..8883a57e 100644 --- a/samples/workload/tensorflow/README.md +++ b/samples/workload/tensorflow/README.md @@ -11,7 +11,14 @@ And set up ensdk environment: ```bash source emsdk_env.sh ``` -Then run ./build.sh to build tensorflow and run it with iwasm, which basically contains the following steps: +Then run +```bash +./build.sh +# for linux platform, or +./build.sh --sgx +# for linux-sgx platform +``` +to build tensorflow and run it with iwasm, which basically contains the following steps: - hack emcc to delete some objects in libc.a - build tf-lite with emcc compiler - build iwasm with pthread enable and include libiary under libc-emcc diff --git a/samples/workload/tensorflow/build.sh b/samples/workload/tensorflow/build.sh index d1fdde04..d519ec5b 100755 --- a/samples/workload/tensorflow/build.sh +++ b/samples/workload/tensorflow/build.sh @@ -3,15 +3,15 @@ #################################### # build tensorflow-lite sample # #################################### -set -x -set -e +set -xe EMSDK_WASM_DIR="$EM_CACHE/wasm" BUILD_SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -OUT_DIR=${BUILD_SCRIPT_DIR}/out +OUT_DIR="${BUILD_SCRIPT_DIR}/out" TENSORFLOW_DIR="${BUILD_SCRIPT_DIR}/tensorflow" -TF_LITE_BUILD_DIR=${TENSORFLOW_DIR}/tensorflow/lite/tools/make -WAMR_DIR="${BUILD_SCRIPT_DIR}/../../../product-mini/platforms/linux" +TF_LITE_BUILD_DIR="${TENSORFLOW_DIR}/tensorflow/lite/tools/make" +WAMR_PLATFORM_DIR="${BUILD_SCRIPT_DIR}/../../../product-mini/platforms" +WAMRC_DIR="${BUILD_SCRIPT_DIR}/../../../wamr-compiler" function Clear_Before_Exit { @@ -64,34 +64,66 @@ fi if [ -d "${TF_LITE_BUILD_DIR}/gen" ]; then rm -fr ${TF_LITE_BUILD_DIR}/gen fi -make -j 4 -C "${TENSORFLOW_DIR}" -f ${TF_LITE_BUILD_DIR}/Makefile $@ +make -j 4 -C "${TENSORFLOW_DIR}" -f ${TF_LITE_BUILD_DIR}/Makefile # 2.5 copy /make/gen target files to out/ rm -rf ${OUT_DIR} mkdir ${OUT_DIR} cp -r ${TF_LITE_BUILD_DIR}/gen/linux_x86_64/bin/. ${OUT_DIR}/ -# 3. build iwasm with pthread and libc_emcc enable -cd ${WAMR_DIR} +# 3. compile tf-model.wasm to tf-model.aot with wamrc +# 3.1 build wamr-compiler +cd ${WAMRC_DIR} +./build_llvm.sh rm -fr build && mkdir build -cd build && cmake .. -DWAMR_BUILD_LIB_PTHREAD=1 -DWAMR_BUILD_LIBC_EMCC=1 +cd build && cmake .. make +# 3.2 compile tf-mode.wasm to tf-model.aot +WAMRC_CMD="$(pwd)/wamrc" +cd ${OUT_DIR} +if [[ $1 == '--sgx' ]]; then + ${WAMRC_CMD} -sgx -o benchmark_model.aot benchmark_model.wasm +else + ${WAMRC_CMD} -o benchmark_model.aot benchmark_model.wasm +fi -# 4. run tensorflow with iwasm +# 4. build iwasm with pthread and libc_emcc enable +# platform: +# linux by default +# linux-sgx if $1 equals '--sgx' +if [[ $1 == '--sgx' ]]; then + cd ${WAMR_PLATFORM_DIR}/linux-sgx + rm -fr build && mkdir build + cd build && cmake .. -DWAMR_BUILD_LIB_PTHREAD=1 -DWAMR_BUILD_LIBC_EMCC=1 + make + cd ../enclave-sample + make +else + cd ${WAMR_PLATFORM_DIR}/linux + rm -fr build && mkdir build + cd build && cmake .. -DWAMR_BUILD_LIB_PTHREAD=1 -DWAMR_BUILD_LIBC_EMCC=1 + make +fi + +# 5. run tensorflow with iwasm cd ${BUILD_SCRIPT_DIR} -# 4.1 download tf-lite model +# 5.1 download tf-lite model if [ ! -f mobilenet_quant_v1_224.tflite ]; then wget "https://storage.googleapis.com/download.tensorflow.org/models/tflite/mobilenet_v1_224_android_quant_2017_11_08.zip" unzip mobilenet_v1_224_android_quant_2017_11_08.zip fi -# 4.2 run tf-lite model with iwasm +# 5.2 run tf-lite model with iwasm echo "---> run tensorflow benchmark model with iwasm" -${WAMR_DIR}/build/iwasm --heap-size=10475860 \ - ${OUT_DIR}/benchmark_model.wasm \ +if [[ $1 == '--sgx' ]]; then + IWASM_CMD="${WAMR_PLATFORM_DIR}/linux-sgx/enclave-sample/iwasm" +else + IWASM_CMD="${WAMR_PLATFORM_DIR}/linux/build/iwasm" +fi + +${IWASM_CMD} --heap-size=10475860 \ + ${OUT_DIR}/benchmark_model.aot \ --graph=mobilenet_quant_v1_224.tflite --max_secs=300 Clear_Before_Exit - -