步骤二:部署vSGX端来运行TensorFlow Serving推理服务

客户端部署完成后,需要部署vSGX端。vSGX端用来运行TensorFlow Serving推理服务。

背景信息

vSGX端提供vSGX机密计算环境,TensorFlow Serving推理服务运行在SGX环境中。当推理服务启动时,会向客户端发送远程认证请求,证明当前vSGX环境的可行性和AI推理服务的完整性。验证成功后,推理服务会拿到客户端发送的密钥,并对加密的模型和TLS证书进行解密,至此,运行在vSGX环境中的推理服务成功运行,并等待远程访问请求以获取推理结果。

操作步骤

  1. 创建安全增强型实例并构建所需环境。

    1. 创建安全增强型实例。

      具体操作,请参见创建可信实例

      请注意以下参数:

      • 实例规格:加密内存≥8 GiB,本操作选用的实例规格为ecs.g7t.xlarge

      • 镜像:Alibaba Cloud Linux 3.2104 LTS 64位 UEFI版

      • 公网IP:分配公网IPv4地址

      • 安全组:安全组需开通8500~8501端口

      说明

      当客户端与vSGX端部署在同一台ECS实例时,安全组无需开通8500~8501端口。

    2. 构建SGX加密计算环境。

      具体操作,请参见构建SGX机密计算环境

    3. 安装Docker CE。

      具体操作,请参见安装Docker并使用(Linux)

      安装后,如您的用户为非root用户,则可以执行sudo usermod -aG docker $USER将当前用户添加到docker用户组,并重新登录当前账户,以允许非root账户使用docker。

      说明

      需安装社区版Docker CE,使用podman-docker可能会出现潜在的兼容性问题。

  2. 登录ECS实例。

  3. 切换到使用的工作目录下,下载本实践所用的TensorFlow Serving脚本代码。

    git clone https://gitee.com/cloud_cc/confidential-computing.git
    export CC_DIR=$(realpath ./confidential-computing)
  4. 复制客户端的ssl_configure和models目录到vSGX中的tf_serving目录中。

    scp -r user_name@192.168.XX.XX:{models} {tf_serving}
    scp -r user_name@192.168.XX.XX:{ssl_configure} {tf_serving}

    user_name为客户端用户名,192.168.XX.XX为客户端IP,{models}为客户端models目录,{ssl_configure}为客户端ssl_configure目录,{tf_serving}为vSGX端tf_serving,请将以上参数修改为实际使用的参数,本实践示例如下:

    scp -r tf@192.168.XX.XX:${REMOTE_PATH_OF_CONFIDENTIAL_COMPUTING}/Tensorflow_Serving/client/models  ${CC_DIR}/Tensorflow_Serving/docker/tf_serving
    scp -r tf@192.168.XX.XX:${REMOTE_PATH_OF_CONFIDENTIAL_COMPUTING}/Tensorflow_Serving/client/ssl_configure ${CC_DIR}/Tensorflow_Serving/docker/tf_serving
  5. 获取TensorFlow Serving镜像。

    您可以通过以下任意一种方式获取TensorFlow Serving镜像。

    • 下载TensorFlow Serving容器镜像。

      cd ${CC_DIR}/Tensorflow_Serving/docker/tf_serving
      docker pull registry.cn-beijing.aliyuncs.com/tee_sgx/tf_serving:latest
    • 创建TensorFlow Serving镜像。

      您可以通过/Tensorflow_Serving/docker目录下的build_gramine_tf_serving.sh脚本创建镜像。

      cd ${CC_DIR}/Tensorflow_Serving/docker/tf_serving
      image_tag=v1
      ./build_gramine_tf_serving_image.sh ${image_tag}    #image_tag可自定义

      Dockerfile为gramine_tf_serving.dockerfile,主要的内容包括:

      • 容器中安装需要的依赖库

      • 容器中安装TensorFlow Serving

      • 容器中安装Gramine

      • 从主机复制文件到容器中,主要包括:

        • Makefile:Gramine编译TensorFlow Serving

        • tensorflow_model_server.manifest.template:Gramine配置TensorFlow Serving模板

          tensorflow_model_server.manifest.attestation.template中几项配置说明:

          • Gramine支持SGX RA-TLS远程认证,使能远程认证的功能需要在模板文件中进行配置。本实践使用到的模板配置如下:

            其中,SECRET_PROVISION_SERVERS指向的是远程申请验证的服务地址,SECRET_PROVISION_SET_PF_KEY代表当前认证需要远端返回保护文件解密需要的密钥。

            sgx.remote_attestation = 1
            loader.env.LD_PRELOAD = "libsecret_prov_attest.so"
            loader.env.SECRET_PROVISION_CONSTRUCTOR = "1"
            loader.env.SECRET_PROVISION_SET_PF_KEY = "1"
            loader.env.SECRET_PROVISION_CA_CHAIN_PATH ="certs/test-ca-sha256.crt"
            loader.env.SECRET_PROVISION_SERVERS ="attestation.service.com:4433"
          • 关于保护文件的配置,Gramine提供了sgx.protected_file属性设置,用户自定义需要保护的文件,该保护的文件是指加密后的文件。本实践配置如下:

            sgx.protected_files.model= "file:models/resnet50-v15-fp32/1/saved_model.pb"

            用户侧生成的加密模型文件和TLS配置文件后,通过网络传输放到TensorFlow_Serving目录下。

        • sgx_default_qcnl.conf:配置阿里云PCCS访问地址

        • tf_serving_entrypoint.sh:容器启动后执行脚本

  6. 配置域名访问。

    sudo sh -c 'echo "remote_ip attestation.service.com" >> /etc/hosts'   #remote_ip请修改为客户端IP
    说明

    当客户端与vSGX端部署在同一台ECS实例上,remote_ip为客户端内网IP。

  7. 运行TensorFlow Serving。

    TensorFlow Serving启动成功后便等待远端访问请求。

    cd ${CC_DIR}/Tensorflow_Serving/docker/tf_serving
    cp ssl_configure/ssl.cfg .
    image_tag="registry.cn-beijing.aliyuncs.com/tee_sgx/tf_serving:latest"
    ./run_gramine_tf_serving.sh -i ${image_tag} -p 8500-8501 -m resnet50-v15-fp32 -s ssl.cfg -a attestation.service.com:remote_ip
    说明
    • ${image_tag}需修改为TensorFlow Serving的image id,您可以通过docker images查询。

    • -p 8500-8501为TensorFlow Serving对应主机的端口。

    • remote_ip需修改为secret_prov_server所在机器的IP或者客户端内网IP(TensorFlow Serving与secret_prov_server位于同一台机器)。

    运行TensorFlow Serving

后续步骤

TensorFlow Serving启动成功后,会等待远程访问请求。远端访问的具体操作,请参见步骤三:远端访问推理结果