ASM集成KServe实现云原生AI模型推理服务

KServe(原KFServing)是云原生环境的一个模型服务器和推理引擎,具备自动缩放、零缩放和金丝雀部署等能力。通过ASM集成KServe,开发人员可以在云原生应用程序中快速部署和管理机器学习模型的推理服务,减少手动配置和维护的工作量,提高开发效率。

前提条件

KServe介绍

KServe作为模型服务器,为大规模服务机器学习和深度学习模型提供了基础。KServe可以部署为传统的Kubernetes Deployment方式,也可以部署为支持归零的Serverless方式,提供基于流量的自动扩缩功能以及模型的蓝绿和金丝雀部署等。更多信息,请参见KServe

KServe

步骤一:安装KServe组件

  1. 登录ASM控制台,在左侧导航栏,选择服务网格 > 网格管理

  2. 网格管理页面,单击目标实例名称,然后在左侧导航栏,选择生态集成中心 > KServe on ASM

  3. KServe on ASM页面,单击开启KServe on ASM

    KServe依赖于CertManager,安装KServe会自动安装CertManager组件。如需使用自建CertManager,请关闭在集群中自动安装CertManager组件

步骤二:获取ASM网关地址

  1. 登录ASM控制台,在左侧导航栏,选择服务网格 > 网格管理

  2. 网格管理页面,单击目标实例名称,然后在左侧导航栏,选择ASM网关 > 入口网关

  3. 入口网关页面,查看并记录目标网关的服务地址。

步骤三:创建推理服务

本文使用scikit-learn的训练模型进行测试。

  1. 使用kubectl连接到数据面集群,执行以下命令,创建用于部署KServe资源的命名空间。

    kubectl create namespace kserve-test
  2. 创建InferenceService。

    1. 使用以下内容,创建isvc.yaml文件。

      apiVersion: "serving.kserve.io/v1beta1"
      kind: "InferenceService"
      metadata:
        name: "sklearn-iris"
      spec:
        predictor:
          model:
            modelFormat:
              name: sklearn
            storageUri: "gs://kfserving-examples/models/sklearn/1.0/model"
    2. 执行以下命令,在kserve-test命名空间中创建InferenceService。

      kubectl apply -f isvc.yaml -n kserve-test
  3. 执行以下命令,查询InferenceService sklearn-iris的安装状态。

    kubectl get inferenceservices sklearn-iris -n kserve-test

    预期输出:

    NAME           URL                                           READY   PREV   LATEST   PREVROLLEDOUTREVISION   LATESTREADYREVISION            AGE
    sklearn-iris   http://sklearn-iris.kserve-test.example.com   True           100                              sklearn-iris-predictor-00001   3h26m

    READYTrue,表明InferenceService sklearn-iris安装成功。

  4. 可选:查看虚拟服务和网关规则。

    InferenceService sklearn-iris安装成功后,会自动创建对应模型配置的虚拟服务和网关规则。您可以执行以下步骤进行查看。

    1. 登录ASM控制台,在左侧导航栏,选择服务网格 > 网格管理

    2. 网格管理页面,单击目标实例名称,然后在左侧导航栏,选择流量管理中心 > 虚拟服务

    3. 虚拟服务页面上方,单击命名空间右侧的刷新图标,选择命名空间kserve-test,查看新建的虚拟服务。

    4. 在左侧导航栏,选择ASM网关 > 网关规则

    5. 网关规则页面上方,选择命名空间knative-serving,查看新建的网关规则。

步骤四:访问模型服务

下文以Linux和Mac环境为例进行说明。

  1. 执行以下命令,创建模型输入文件。

    cat <<EOF > "./iris-input.json"
    {
      "instances": [
        [6.8,  2.8,  4.8,  1.4],
        [6.0,  3.4,  4.5,  1.6]
      ]
    }
    EOF
  2. 通过ASM网关进行访问测试。

    1. 执行以下命令,获取SERVICE_HOSTNAME。

      SERVICE_HOSTNAME=$(kubectl get inferenceservice sklearn-iris -n kserve-test -o jsonpath='{.status.url}' | cut -d "/" -f 3)
      echo $SERVICE_HOSTNAME

      预期输出:

      sklearn-iris.kserve-test.example.com
    2. 执行以下命令,使用步骤二获取的ASM网关地址,访问模型服务。

      ASM_GATEWAY="XXXX" # 请将XXXX替换为ASM网关地址。
      curl  -H "Host: ${SERVICE_HOSTNAME}" http://${ASM_GATEWAY}:80/v1/models/sklearn-iris:predict -d @./iris-input.json

      预期输出:

      {"predictions": [1, 1]}
  3. 对模型服务进行性能测试。

    1. 执行以下命令,部署测试端的应用进行压测。

      kubectl create -f https://alibabacloudservicemesh.oss-cn-beijing.aliyuncs.com/kserve/v0.7/loadtest.yaml
    2. 执行以下命令,查看Pod名称。

      kubectl get pod

      预期输出:

      NAME                                                       READY   STATUS      RESTARTS   AGE
      load-testxhwtq-pj9fq                                       0/1     Completed   0          3m24s
      sklearn-iris-predictor-00001-deployment-857f9bb56c-vg8tf   2/2     Running     0          51m
    3. 执行以下命令,查看测试的日志结果。

      kubectl logs load-testxhwtq-pj9fq # 请替换Pod名称为实际的测试应用Pod名称。

      预期输出:

      Requests      [total, rate, throughput]         30000, 500.02, 500.01
      Duration      [total, attack, wait]             59.999s, 59.998s, 1.352ms
      Latencies     [min, mean, 50, 90, 95, 99, max]  1.196ms, 1.463ms, 1.378ms, 1.588ms, 1.746ms, 2.99ms, 18.873ms
      Bytes In      [total, mean]                     690000, 23.00
      Bytes Out     [total, mean]                     2460000, 82.00
      Success       [ratio]                           100.00%
      Status Codes  [code:count]                      200:30000
      Error Set:

相关文档