如何基于 ACK Serverless 快速部署 AI 推理服务

作者:元毅

随着 AI 浪潮的到来,各种 AI 应用层出不穷,众所周知 AI 应用对 GPU 资源强烈依赖,但 GPU 很昂贵,如何降低 GPU 资源使用成本成为用户首要问题。而 AI 与 Serverless 技术结合,完全可以达到按需使用资源,降低资源成本的目的。

那么在云原生场景下,是否有这样开箱即用、标准、开放的方案呢?答案是有。我们在 ACK Serverless 中提供 Knative + KServe 的方案,可以帮助用户快速部署 AI 推理服务, 按需使用,在无请求时支持 GPU 资源自动缩容到 0,大幅节省 AI 应用场景下资源使用成本。

关于 ACK Serverless

容器服务 Serverless 版 ACK Serverless 是一款基于阿里云弹性计算基础架构之上,同时完全兼容 Kubernetes 生态,安全、可靠的容器产品。通过 ACK Serverless,您无需管理和维护 k8s 集群即可快速创建 Kubernetes 容器应用,支持多种 GPU 资源规格,并且根据应用实际使用的资源量进行按需付费。

image

Knative 与 KServe

Knative 是一款基于 Kubernetes 之上的开源 Serverless 应用架构,提供基于请求的自动弹性、缩容到 0 以及灰度发布等功能。通过 Knative 部署 Serverless 应用可以做到专注于应用逻辑开发,资源按需使用。

而 KServe 提供了一个简单的 Kubernetes CRD,可以将单个或多个经过训练的模型部署到模型服务运行时,例如 TFServing、TorchServe、Triton 等推理服务器。这些模型服务运行时能够提供开箱即用的模型服务,KServe 提供基本 API 原语,让您轻松构建自定义模型服务运行时。基于 Knative 使用 InferenceService 部署推理模型后,您将获得以下 Serverless 能力:

  • 缩容到 0
  • 基于 RPS、并发数、CPU/GPU 指标自动弹性
  • 多版本管理
  • 流量管理
  • 安全认证
  • 开箱即用可观测性

KServe 模型服务控制面主要由 KServe Controller 负责,用于协调 InferenceService 自定义资源并创建 Knative Service 服务,可以实现根据请求流量实现自动缩放,以及在未收到流量时缩小到零。

image

基于 KServe 快速部署第一个推理服务

在本文中,我们将部署一个带有预测能力的 InferenceService 推理服务,该推理服务将使用 iris(鸢尾花)数据集训练的 scikit-learn 模型。该数据集具有三个输出类别:Iris Setosa(山鸢尾,索引:0)、Iris Versicolour(杂色鸢尾花,索引:1)和 Iris Virginica(弗吉尼亚鸢尾,索引:2)。最后您可以向部署的模型发送推理请求,以便预测对应的鸢尾植物类别。

前提条件

  • 已开通 ACK Serverless [ 1]
  • 部署 KServe [ 2]

当前阿里云 Knative 支持一键部署 KServe。支持 ASM、ALB、MSE 以及 Kourier 等网关能力。

创建 InferenceService 推理服务

yaml 复制代码
kubectl apply -f - <<EOF
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"
EOF

检查服务状态:

arduino 复制代码
kubectl get inferenceservices sklearn-iris

预期输出:

vbnet 复制代码
NAME           URL                                                         READY   PREV   LATEST   PREVROLLEDOUTREVISION   LATESTREADYREVISION                    AGE
sklearn-iris   http://sklearn-iris-predictor-default.default.example.com   True           100                              sklearn-iris-predictor-default-00001   51s

服务访问

  1. 获取服务访问地址
arduino 复制代码
$ kubectl get albconfig knative-internet
NAME               ALBID                    DNSNAME                                              PORT&PROTOCOL   CERTID   AGE
knative-internet   alb-hvd8nngl0lsdra15g0   alb-hvd8nngl0lsdra15g0.cn-beijing.alb.aliyuncs.com                            24m
  1. 在文件中准备您的推理输入请求

iris 数据集是由三种鸢尾花,各 50 组数据构成的数据集。每个样本包含 4 个特征,分别为萼片(sepals)的长和宽、花瓣(petals)的长和宽。

bash 复制代码
cat <<EOF > "./iris-input.json"
{
  "instances": [
    [6.8,  2.8,  4.8,  1.4],
    [6.0,  3.4,  4.5,  1.6]
  ]
}
EOF
  1. 访问
bash 复制代码
INGRESS_DOMAIN=$(kubectl get albconfig knative-internet -o jsonpath='{.status.loadBalancer.dnsname}')
SERVICE_HOSTNAME=$(kubectl get inferenceservice sklearn-iris -o jsonpath='{.status.url}' | cut -d "/" -f 3)
curl -v -H "Host: ${SERVICE_HOSTNAME}" "http://${INGRESS_DOMAIN}/v1/models/sklearn-iris:predict" -d @./iris-input.json

预期输出:

yaml 复制代码
*   Trying 39.104.203.214:80...
* Connected to 39.104.203.214 (39.104.203.214) port 80 (#0)
> POST /v1/models/sklearn-iris:predict HTTP/1.1
> Host: sklearn-iris-predictor-default.default.example.com
> User-Agent: curl/7.84.0
> Accept: */*
> Content-Length: 76
> Content-Type: application/x-www-form-urlencoded
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< content-length: 21
< content-type: application/json
< date: Wed, 21 Jun 2023 03:17:23 GMT
< server: envoy
< x-envoy-upstream-service-time: 4
<
* Connection #0 to host 39.104.203.214 left intact
{"predictions":[1,1]}

您应该看到返回了两个预测(即 {"predictions": [1, 1]}),该结果为推理发送的两组数据点对应于索引为 1 的花,模型预测这两种花都是 "Iris Versicolour(杂色鸢尾花)"。

小结

当前 ACK Serverless 已全新升级,顺应了 AI 等新场景爆发下催生的新需求,以标准、开放、灵活的方式帮助企业更简单、平滑地向 Serverless 业务架构演进。基于ACK Serverless 结合 KServe 可以给你带来 AI 模型推理场景下极致的 Serverless 体验。

相关链接:

1\] 开通 ACK Serverless *[help.aliyun.com/zh/ack/serv...](https://link.juejin.cn?target=https%3A%2F%2Fhelp.aliyun.com%2Fzh%2Fack%2Fserverless-kubernetes%2Fuser-guide%2Fcreate-an-ask-cluster-2 "https://help.aliyun.com/zh/ack/serverless-kubernetes/user-guide/create-an-ask-cluster-2")* \[2\] 部署 KServe *[help.aliyun.com/zh/ack/ack-...](https://link.juejin.cn?target=https%3A%2F%2Fhelp.aliyun.com%2Fzh%2Fack%2Fack-managed-and-ack-dedicated%2Fuser-guide%2Fknative-support-kserve "https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/knative-support-kserve")* 点击[**此处**](https://link.juejin.cn?target=https%3A%2F%2Fedu.aliyun.com%2Flearning%2Ftopic%2Fseries%2Fserverlessask "https://edu.aliyun.com/learning/topic/series/serverlessask"),完成"ACK Serverless 快速入门"活动任务,**获得阿里云限量定制鸭舌帽,** 快来参加吧!

相关推荐
YMWM_6 分钟前
docker在jetson thor的应用
运维·docker·容器·jetson thor
木子欢儿1 小时前
使用 Docker 快速搭建 MinIO 文件存储服务
运维·docker·容器
杭州杭州杭州2 小时前
Docker实验5
运维·docker·容器
czlczl200209253 小时前
Zookeeper原理
分布式·zookeeper·云原生
pip install USART3 小时前
容器化场景常用kubectl命令
后端·容器·kubernetes
sky wide3 小时前
[特殊字符] Docker Compose 安装指南
运维·docker·容器
国医中兴3 小时前
数据稠密计算的内存优化:从理论到实践
微服务·云原生·容器·kubernetes·k8s
新缸中之脑4 小时前
AntSpace:Anthropic的秘密PaaS
云原生·云计算·paas
nvd114 小时前
GCP 无服务器事件驱动实战:使用 Terraform 构建 Pub/Sub 推送至 Cloud Run 的微型调度中心
云原生·serverless·terraform
song8546011344 小时前
为啥windows中使用docker部署需要启动 Docker Desktop
windows·docker·容器