作者:元毅、坤仑
数禾科技 AI 模型服务基于云原生架构,为不同业务环节提供智能决策反对。随着业务的疾速倒退,摆在数禾背后的难题是撑持模型计算的底层利用资源无奈依据申请量来调整机器资源反对运算能力。同时,随着模型在线推理服务数量的减少,数禾的模型服务也变得越来越宏大、臃肿,难以治理。这种情况不仅导致了资源节约,还减少了保护和降级的老本。
为了解决这些“顽疾”,数禾科技采纳阿里云 ASK 部署线上模型,无需 K8s 节点治理,依据实时流量动静应用 POD,资源老本节俭 60%;通过 ASK Knative 服务,解决了数禾模型的灰度公布和多版本并存问题;得益于 ASK 主动伸缩和缩容到 0 的劣势,升高运行老本,大幅晋升服务可用性。
目前,该零碎已上线部署 500+AI 模型服务,每天可能提供上亿次查问决策服务,具备有限横向扩大的能力。同时,数禾科技 AI 模型服务反对主动调整容量,满足不同业务压力下的需要,从而保障业务的稳固运行。不仅如此,采纳云原生架构计划,均匀部署周期由之前的 1 天缩短至 0.5 天,大幅晋升了研发迭代效率,从而减速商业化利用的过程,为金融业务提供新的增长能源。
对于 Serverless Kubernetes(ASK)
Kubernetes(K8s)作为一个开源容器编排零碎,被宽泛使用于云原生利用的开发与治理。其劣势在于升高运维老本,进步运维效率,造成了以 K8s 为外围的云原生生态。然而应用 K8s 经常须要用户面对的问题较多,例如资源布局、容量布局、Node 与 Pod 的亲和关系、容器网络布局、节点生命周期治理、操作系统版本、容器运行时版本兼容性等,这些问题显然不是用户所心愿关怀的,用户冀望做的事件是专一在本身的业务逻辑,尽可能不关怀这些基础设施。Serverless 的核心理念在于让开发者更聚焦业务逻辑,缩小对基础设施的关注。因而咱们将 K8s 复杂性下沉,提供 Serverless Kubernetes 的产品能力。
那么 Serverless Kubernetes 有哪些劣势呢?次要包含以下三个方面:免运维、主动弹性、按需付费。
首先,Serverless Kubernetes 组件全托管免运维,反对主动降级 k8s 版本。其次,该产品具备极致弹性能力。能够依据业务需要,主动弹性、秒级扩容,从而在满足业务增长时主动容量布局。最初,应用 Serverless Kubernetes 的用户,只需依据理论使用量按需计费。除此之外,ASK 还提供了新增的 U 实例规格反对,对立反对多款处理器,相比上一代主售实例提价高达 40%。
为了让更多用户体验最佳实际,咱们顺便将其打造成了一个体验场景,配合热门开源的 AI 我的项目 Stable Diffusion,用户能够通过实在的云上环境,轻松体验容器化部署具备企业级弹性能力的 AI 模型。
在 ASK 中部署 Stable Diffusion
随着生成型 AI 技术的能力晋升,越来越多的注意力放在了通过 AI 模型晋升研发效率上。作为 AIGC(AI Generated Content)畛域的出名我的项目 Stable Diffusion,能够帮忙用户疾速、精确地生成想要的场景及图片。不过以后间接在 K8s 应用 Stable Diffusion 面临如下问题:
- 单个 Pod 解决申请的吞吐率无限,如果多个申请转发到同一个 Pod,会导致服务端过载异样,因而须要精准的管制单个 Pod 申请并发解决数。
- GPU 资源很宝贵,冀望做到按需应用资源,在业务低谷及时开释 GPU 资源
基于下面两个问题,咱们提供 ASK + Knative 解决方案,能够做到基于并发精准弹性,缩容到 0,资源按需应用,打造生产可用的 Stable Diffusion 服务。
计划
这里咱们在 ASK 中提供 Knative + MSE 形式解决上述问题:
- 基于 MSE 网关,扩大 Knative 弹性插件机制,实现基于并发数精准弹性
- 反对缩容到 0,按需应用主动弹性
- 多版本治理、镜像减速,助力模型疾速公布迭代
实际
接下来咱们介绍如何在 ASK 中部署 Stable Diffusion 服务。
服务部署
- 在 集群列表 页面,单击指标集群 knative-sd-demo 进入集群信息页面,而后在左侧导航栏,抉择 利用 >Knative。
- 在 Knative 页面,单击 服务治理 页签,而后单击 应用模板创立。
- 在 命名空间 下拉列表中,抉择 default,在 示例模板 下拉列表中,抉择 Resouce-Knative Service,将以下音讯解决服务的 YAML 示例粘贴至模板,而后单击 创立。
默认创立一个名为 knative-sd-demo 的服务。
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: knative-sd-demo
annotations:
serving.knative.dev.alibabacloud/affinity: "cookie"
serving.knative.dev.alibabacloud/cookie-name: "sd"
serving.knative.dev.alibabacloud/cookie-timeout: "1800"
spec:
template:
metadata:
annotations:
autoscaling.knative.dev/class: mpa.autoscaling.knative.dev
autoscaling.knative.dev/maxScale: '10'
autoscaling.knative.dev/targetUtilizationPercentage: "100"
k8s.aliyun.com/eci-use-specs: ecs.gn5-c4g1.xlarge,ecs.gn5i-c8g1.2xlarge,ecs.gn5-c8g1.2xlarge
spec:
containerConcurrency: 1
containers:
- args:
- --listen
- --skip-torch-cuda-test
- --api
command:
- python3
- launch.py
image: yunqi-registry.cn-shanghai.cr.aliyuncs.com/lab/stable-diffusion@sha256:64999ff1aba706f65a2234d861d46318f7d58e2790b31ace0d567a96e65b617c
imagePullPolicy: IfNotPresent
ports:
- containerPort: 7860
name: http1
protocol: TCP
name: stable-diffusion
readinessProbe:
tcpSocket:
port: 7860
initialDelaySeconds: 5
periodSeconds: 1
failureThreshold: 3
参数阐明:
- 反对 Cookie 会话放弃:serving.knative.dev.alibabacloud/affinity
- 反对多种 GPU 规格配置:k8s.aliyun.com/eci-use-specs
- 反对并发数设置:containerConcurrency
- 在 服务治理 页签,刷新页面后,当 knative-sd-demo 的状态变为 胜利 时,表明 SD 服务部署胜利。
服务拜访并进行压测
部署压测服务 portal-server,用于 Stable Diffusion 成果展现并发动压测。
- 在 Knative 页面,单击 服务治理 页签,而后单击 应用模板创立。
- 在 命名空间 下拉列表中,抉择 default,在 示例模板 下拉列表中,抉择 自定义 ,将以下 portal-server 压测服务的 YAML 示例粘贴至模板,而后单击 创立。
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: portal-server
name: portal-server
spec:
replicas: 1
selector:
matchLabels:
app: portal-server
template:
metadata:
labels:
app: portal-server
spec:
serviceAccountName: portal-server
containers:
- name: portal-server
image: registry-vpc.cn-beijing.aliyuncs.com/acs/sd-yunqi-server:v1.0.2
imagePullPolicy: IfNotPresent
env:
- name: MAX_CONCURRENT_REQUESTS
value: "5"
- name: POD_NAMESPACE
value: "default"
readinessProbe:
failureThreshold: 3
periodSeconds: 1
successThreshold: 1
tcpSocket:
port: 8080
timeoutSeconds: 1
---
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: internet
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-instance-charge-type: PayByCLCU
name: portal-server
spec:
externalTrafficPolicy: Local
ports:
- name: http-80
port: 80
protocol: TCP
targetPort: 8080
- name: http-8888
port: 8888
protocol: TCP
targetPort: 8888
selector:
app: portal-server
type: LoadBalancer
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: pod-list-cluster-role
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["list"]
- apiGroups: ["networking.k8s.io"]
resources: ["ingresses"]
verbs: ["get"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: pod-list-cluster-role-binding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: pod-list-cluster-role
subjects:
- kind: ServiceAccount
name: portal-server
namespace: default
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: portal-server
namespace: default
- 抉择 网络 > 服务, 在 服务 页面,查看 portal-server 压测服务,获取拜访 IP 为 123.56.XX.XX。
- 在浏览器中输出 http://123.56.XX.XX,而后在该页面单击 Stable Diffusion 跳转至 Stable Diffusion 拜访页面。
a. Stable Diffusion 拜访页面如下所示。例如,在如下文本框中输出 cat,而后单击 Generate,将展现与输出无关的图片信息。
b. 在压测拜访页面,设置 并发数 为 5,总申请数 为 20,而后单击 开始压测,查看压测的后果。
压测期间,能够看到创立了 5 个 Pod,并且每个申请均会生成一个图片,图片生成后将展现到页面中。
查看可观测大盘
此外在 Knative 提供了开箱即用的可观测能力,在 Knative 页面,单击 监控大盘 页签。即可看到 Stable Diffusion 服务的申请量(Request Volume)、申请成功率(Success Rate)、4xx(客户端谬误)、5xx(服务器端谬误)和 Pod 扩缩容趋势的监控数据。
在 Response Time 区域,查看 Knative 的响应提早数据,包含 P50、P90、P95 和 P99。
小结
基于 ASK Knative 并发精准弹性,缩容到 0,多版本治理等性能,能够轻松部署企业级 AI 服务。以后已在阿里云云起试验提供《基于 ASK 轻松部署企业级 Stable Diffusion》入手实际,欢送体验:
https://developer.aliyun.com/adc/scenario/de33e7d3065949f3b81…