diff --git a/.github/workflows/build_and_push_ci_image.yml b/.github/workflows/build_and_push_ci_image.yml index 9021ad41..2c45b76a 100644 --- a/.github/workflows/build_and_push_ci_image.yml +++ b/.github/workflows/build_and_push_ci_image.yml @@ -11,7 +11,7 @@ on: workflow_dispatch: inputs: image_name: - description: 'image name (must choose from )' + description: 'image name (must choose from )' required: true default: 'grpc' tag: @@ -175,3 +175,42 @@ jobs: build-args: OCCLUM_VERSION=${{ env.OCCLUM_VERSION }} push: true tags: occlumbackup/occlum:${{ github.event.inputs.tag }}-ubuntu18.04-python + + Build_tf_serving_image: + runs-on: ubuntu-18.04 + if: github.event.inputs.image_name == 'tf_serving' + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Get occlum version + run: echo "OCCLUM_VERSION=$(grep 'Version =' src/pal/include/occlum_version.h | awk '{print $4}')" >> $GITHUB_ENV; + + # Because "Build and push" step `context` field can't be subdir, + # we need to copy files needed by dockerfile to root dir of the project + - name: Copy context for docker build + run: | + cp -r tools/docker . + + - name: Set up QEMU + uses: docker/setup-qemu-action@v1 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + + - name: Login to DockerHub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Build and push + uses: docker/build-push-action@v2 + with: + context: . + file: ./tools/docker/ci/Dockerfile.tf_serving + platforms: linux/amd64 + build-args: OCCLUM_VERSION=${{ env.OCCLUM_VERSION }} + push: true + tags: occlumbackup/occlum:${{ github.event.inputs.tag }}-ubuntu18.04-tf_serving diff --git a/.github/workflows/demo_test.yml b/.github/workflows/demo_test.yml index d55d0d1b..b21966cd 100644 --- a/.github/workflows/demo_test.yml +++ b/.github/workflows/demo_test.yml @@ -692,29 +692,24 @@ jobs: - name: Run Bash test run: docker exec bash_test bash -c "cd /root/occlum/demos/bash && SGX_MODE=SIM ./run_bash_demo.sh" - Tensorflow_serving_test: + # Tensorflow_serving requires binary tensorflow_serving PIC, here we compile tensorflow_model_server before workflow + tensorflow_serving_test: runs-on: ubuntu-18.04 steps: - uses: actions/checkout@v1 with: submodules: true - - - name: Get occlum version - run: echo "OCCLUM_VERSION=$(grep "Version =" src/pal/include/occlum_version.h | awk '{print $4}')" >> $GITHUB_ENV - - - name: Compile the tensorflow_serving with PIC - run: | - cd $GITHUB_WORKSPACE/demos/tensorflow/tensorflow_serving; - ./build_occlum_tf_serving.sh - - name: Create container - run: docker run -itd --name=tf_serving_test -v $GITHUB_WORKSPACE:/root/occlum occlum/occlum:${{ env.OCCLUM_VERSION }}-ubuntu18.04 + run: docker run -itd --name=tf_serving_test -v $GITHUB_WORKSPACE:/root/occlum occlumbackup/occlum:latest-ubuntu18.04-tf_serving - name: Build dependencies run: docker exec tf_serving_test bash -c "cd /root/occlum; make submodule" - name: Make install run: docker exec tf_serving_test bash -c "source /opt/intel/sgxsdk/environment; cd /root/occlum; OCCLUM_RELEASE_BUILD=1 make install" + + - name: Move tensorflow_model_server + run: docker exec tf_serving_test bash -c "mv /root/tensorflow_model_server /root/occlum/demos/tensorflow/tensorflow_serving" - name: Set up environment run: docker exec tf_serving_test bash -c "cd /root/occlum/demos/tensorflow/tensorflow_serving; ./prepare_model_and_env.sh" diff --git a/demos/README.md b/demos/README.md index 31ba0d9e..1da6d712 100644 --- a/demos/README.md +++ b/demos/README.md @@ -26,8 +26,9 @@ This set of demos shows how real-world apps can be easily run inside SGX enclave * [redis](redis/): A demo of [Redis](https://redis.io). * [sofaboot](sofaboot/): A demo of [SOFABoot](https://github.com/sofastack/sofa-boot), an open source Java development framework based on Spring Boot. * [sqlite](sqlite/) A demo of [SQLite](https://www.sqlite.org) SQL database engine. -* [tensorflow](tensorflow/): A demo of [TensorFlow](https://www.tensorflow.org/) MNIST classification training. +* [tensorflow](tensorflow/tensorflow_training): A demo of [TensorFlow](https://www.tensorflow.org/) MNIST classification training. * [tensorflow_lite](tensorflow_lite/): A demo and benchmark of [TensorFlow Lite](https://www.tensorflow.org/lite) inference engine. +* [tensorflow_serving](tensorflow/tensorflow_serving): A demo of [TensorFlow Serving](https://github.com/tensorflow/serving) * [vault](golang/vault/): A demo of [HashiCorp Vault](https://github.com/hashicorp/vault). * [xgboost](xgboost/): A demo of [XGBoost](https://xgboost.readthedocs.io/en/latest). diff --git a/tools/docker/ci/Dockerfile.tf_serving b/tools/docker/ci/Dockerfile.tf_serving new file mode 100644 index 00000000..b473c09b --- /dev/null +++ b/tools/docker/ci/Dockerfile.tf_serving @@ -0,0 +1,40 @@ +ARG OCCLUM_VERSION + +FROM tensorflow/serving:latest-devel as binary_build +WORKDIR /tensorflow-serving +# Build, and install TensorFlow Serving +ARG TF_SERVING_BUILD_OPTIONS="--config=nativeopt" +RUN echo "Building with build options: ${TF_SERVING_BUILD_OPTIONS}" +ARG TF_SERVING_BAZEL_OPTIONS="" +RUN echo "Building with Bazel options: ${TF_SERVING_BAZEL_OPTIONS}" + +RUN bazel build -j 8 --color=yes --curses=yes \ + ${TF_SERVING_BAZEL_OPTIONS} \ + --verbose_failures \ + --force_pic \ + --output_filter=DONT_MATCH_ANYTHING \ + ${TF_SERVING_BUILD_OPTIONS} \ + tensorflow_serving/model_servers:tensorflow_model_server && \ + cp bazel-bin/tensorflow_serving/model_servers/tensorflow_model_server \ + /usr/local/bin/ + +# Build and install TensorFlow Serving API +RUN bazel build -j 8 --color=yes --curses=yes \ + ${TF_SERVING_BAZEL_OPTIONS} \ + --force_pic \ + --verbose_failures \ + --output_filter=DONT_MATCH_ANYTHING \ + ${TF_SERVING_BUILD_OPTIONS} \ + tensorflow_serving/tools/pip_package:build_pip_package && \ + bazel-bin/tensorflow_serving/tools/pip_package/build_pip_package \ + /tmp/pip && \ + pip --no-cache-dir install --upgrade \ + /tmp/pip/tensorflow_serving_api-*.whl && \ + rm -rf /tmp/pip + +FROM occlum/occlum:$OCCLUM_VERSION-ubuntu18.04 as base +LABEL maintainer="Zehuan Li " + +WORKDIR /root +COPY --from=binary_build /usr/local/bin/tensorflow_model_server /root/tensorflow_model_server +