应对IDC资源紧缺:ACK Edge如何解决LLM推理服务的弹性挑战

简介: 应对IDC资源紧缺:ACK Edge如何解决LLM推理服务的弹性挑战

背景


春节期间,国产大模型DeepSeek凭借其卓越的性能和创新能力在全球范围内迅速走红,引发了广泛的关注和讨论。然而,随着访问量的急剧攀升,其推理服务器资源很快变得捉襟见肘,最终不得不暂停API充值服务。这一系列事件让业界认识到,大语言模型(LLM)的推理业务正逐渐成为AI产业竞争的又一个至关重要的业务场景。


LLM推理业务的需求往往呈现出显著的潮汐流量特性,在某些特定时间段内,需求量会急剧增加,而在其他时间段则相对较低。这种不均衡的流量模式对GPU计算资源的分配和管理提出了严峻的挑战。特别是在线下数据中心(IDC)中部署LLM推理服务时,常常会遇到高峰期计算资源不足,而低峰期资源闲置的问题。这不仅导致了资源的浪费,还会影响服务的高可用性和响应速度,进而影响用户体验和业务连续性。为了解决这一问题,我们基于ACK Edge提供了一套混合云LLM弹性推理解决方案。通过ACK Edge统一管理云上和云下的计算资源,业务低峰期优先使用线下GPU资源进行推理任务,在业务高峰期,当线下资源不足时,ACK Edge能够迅速弹出云上的GPU资源来承接业务流量。通过该方案,企业可以显著降低LLM推理服务的运营成本,根据实际需求动态调整资源的使用,避免了在低峰期不必要的资源开支,同时也确保了在高峰期能够获得足够的计算能力来满足业务需求。这种灵活的资源利用方式,不仅确保了服务的稳定性,还能有效避免资源的闲置和浪费。


方案介绍

整体架构



整体方案基于阿里云容器服务Edge版(ACK Edge)实现,利用ACK Edge云边一体化管理的能力,统一纳管云上云下的计算资源,实现计算任务的动态分配。此外,我们在集群中采用KServe来配置弹性策略,快速部署一套LLM弹性推理服务。


在业务低峰期,该方案通过ACK Edge的自定义资源优先级调度(ResourcePolicy)能力设置资源池的优先级,保证优先使用云下资源池进行推理任务。当业务进入高峰期,借助ACK Edge的强大监控能力,KServe能够实时监测GPU资源的使用情况和业务负载,根据实际需求动态扩容推理服务的副本数。此时线下GPU资源池可能无法满足突增的计算需求。通过预先配置的弹性节点池,系统能够迅速自动地弹出云上GPU资源,快速承接业务的流量峰值,确保服务的连续性和稳定性。


关键技术


1. ACK Edge


ACK Edge是一款提供标准Kubernetes集群云端托管,支持边缘计算资源、业务快速接入、统一管理、统一运维的云原生应用平台,能够帮助用户快速实现云边一体协同。面向云端,通过ACK Edge,用户可以直接享受到阿里云丰富的云上生态能力,如网络、存储、弹性、安全、监控、日志等。面向边缘,ACK Edge针对边缘场景面对的复杂的环境,提供了边缘节点自治、跨网域容器网络方案、多地域工作负载和服务管理等一系列的支持来解决边缘场景的痛点问题。


2. KServe


KServe是一个开源的云原生模型服务平台,旨在简化在Kubernetes上部署和运行机器学习模型的过程,支持多种机器学习框架、具备弹性扩容能力。KServe通过定义简单的YAML文件,提供声明式的API来部署模型,使得配置和管理模型服务变得更加容易。


KServe提供了一系列自定义资源(CRD),用于管理和提供机器学习模型的服务。并针对TensorFlow、XGBoost、scikit-learn、PyTorch和Huggingface Transformer/LLM等模型,提供了易用的高级接口及标准化的数据平面协议。此外,KServe隐藏了自动扩缩(AutoScaling)、网络、健康检查和服务器配置的复杂操作,实现了GPU的自动扩缩、按需扩缩至零(Scale to Zero)功能以及灰度发布能力(Canary Rollouts),简化了AI模型的部署和维护流程。


3. 弹性节点池(节点自动伸缩)


节点自动伸缩是一种自动调整集群资源的机制,以应对应用Pod的调度需求。主要由cluster-autoscaler组件负责,它定期检查集群状态,自动扩展或缩减节点。当Pod因资源不足无法调度时,节点伸缩机制会监听并判断是否需要扩容。它会模拟调度过程,找到能满足需求的节点池,并自动添加节点。这种自动化伸缩机制能高效管理资源,确保应用稳定运行。


4. resourcePolicy(自定义弹性资源优先级调度)


自定义弹性资源优先级调度是ACK Edge调度器提供的一项高级弹性调度策略,旨在满足企业对不同类型的资源的精细化管理需求。通过这一策略,用户可以在应用发布或扩容过程中,灵活自定义资源策略(ResourcePolicy),以精准控制应用实例Pod在不同类型节点资源上的调度顺序。


具体而言,用户可以根据业务需求和资源特性,预先定义好Pod调度的优先级顺序。例如,可以将高性能计算节点优先分配给对计算资源要求较高的应用实例,而将存储资源丰富的节点优先分配给需要大量存储数据的应用实例。此外,在应用缩容过程中,自定义弹性资源优先级调度策略能够按照发布或扩容时的调度顺序逆序进行缩容。这意味着,最先被调度到高性能计算节点的Pod,将在缩容时最后被释放,而最先被调度到存储资源丰富节点的Pod,将在缩容时最先被释放。


快速实践


1. 集群环境准备


a. 创建ACK Edge集群[1]

b. 创建弹性节点池[2]

c. 集群中安装KServe[3]

d. 配置Arena客户端[4]

e. 部署监控组件并配置GPU监控指标[5]


完成后,集群中的资源可以按照节点池划分为三类:


云上管控资源池:部署ACK Edge,KServe,autoscaler等管控组件的云上节点池

IDC资源池:包含用户的线下IDC资源,承载LLM推理服务

云上弹性资源池:根据集群资源使用情况灵活伸缩,在高峰期承载LLM推理服务



2. AI模型准备


您可以使用OSS或NAS准备模型数据,具体操作可以参考部署vLLM推理应用文档[6]中的第一步。


3. 定义调度优先级


您可以通过创建ResourcePolicy CRD来定义弹性资源优先级调度规则。举一个例子,在这里,我们为labelSelector匹配app: isvc.qwen-predictor的应用定义了一个规则。这个规则明确了,这类应用应该优先调度到 IDC资源池,然后才调度到云上弹性资源池。关于Resource Policy的具体使用说明,可以参考如何自定义Pod调度顺序_容器服务Kubernetes版ACK(ACK)-阿里云帮助中心[7]


















apiVersion: scheduling.alibabacloud.com/v1alpha1
kind: ResourcePolicy
metadata:
  name: qwen-chat
  namespace: default
spec:
  selector:
    app: isvc.qwen-predictor # 此处要与后续创建的Pod的label相关联。
  strategy: prefer
  units:
  - resource: ecs
    nodeSelector:
      alibabacloud.com/nodepool-id: npxxxxxx  #IDC资源池
  - resource: elastic
    nodeSelector:
      alibabacloud.com/nodepool-id: npxxxxxy  #弹性资源池


4. 部署LLM推理服务


通过arena客户端,您可以用一条命令拉起一个基于KServe部署的弹性LLM推理服务。在命令行参数里,这条命令定义了这个推理服务的名称为qwen-chat,使用vllm推理框架,使用GPU卡利用率(DCGM_CUSTOM_PROCESS_SM_UTIL,其他指标可以参考文档[8])这个指标来进行应用的弹性伸缩,当GPU利用率超过50%开始扩容副本,最小副本是1,最大副本是3,每个Pod需要一张gpu卡,4核12G配置,模型存储在提前准备好的llm-model中。


arena serve kserve \  
   --name=qwen-chat \  
   --image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/vllm:0.4.1 \  
   --scale-metric=DCGM_CUSTOM_PROCESS_SM_UTIL \  
   --scale-target=50 \  
   --min-replicas=1  \ 
   --max-replicas=3  \ 
   --gpus=1 \   
   --cpu=4  \   
   --memory=12Gi \ 
   --data="llm-model:/mnt/models/Qwen" \  
   "python3 -m vllm.entrypoints.openai.api_server --port 8080 --trust-remote-code --served-model-name qwen --model /mnt/models/Qwen --gpu-memory-utilization 0.95 --quantization gptq --max-model-len=6144"


部署完成后,我们就得到了一个弹性伸缩的LLM推理服务。我们可以通过直接请求该服务来验证是否部署成功,请求的地址可以在KServe自动创建的Ingress资源详情中找到。


curl -H "Host: qwen-chat-default.example.com" \
-H "Content-Type: application/json"      \
http://xx.xx.xx.xx:80/v1/chat/completions \
-X POST      \
-d '{"model": "qwen", "messages": [{"role": "user", "content": "你好"}], "max_tokens": 512, "temperature": 0.7, "top_p": 0.9, "seed": 10, "stop":["<|endoftext|>", "<|im_end|>", "<|im_start|>"]}'


5. 模拟业务高峰请求


接下来我们通过压测工具hey来模拟发送大量的请求到这个服务中。


hey -z 2m -c 5 \
-m POST -host qwen-chat-default.example.com \
-H "Content-Type: application/json" \
-d '{"model": "qwen", "messages": [{"role": "user", "content": "测试一下"}], "max_tokens": 10, "temperature": 0.7, "top_p": 0.9, "seed": 10}' \
http://xx.xx.xx.xx:80/v1/chat/completions


首先这些请求会发送到现有的Pod,由于请求太多GPU使用率上升超过阈值,此时触发了我们之前定义的应用HPA规则,开始扩容Pod副本数,可以看到下图中出现了三个副本。



由于在我们的测试环境中IDC只有一张卡,扩容出的两个Pod找不到可用的资源,处于pending状态。此时pending的Pod触发了弹性节点池节点伸缩,auto-scaler会自动弹出两个云上的GPU节点来承载这两个Pod。



总结

LLM推理业务的潮汐流量特性导致了计算资源的分配难题。本文中我们基于ACK Edge提供了一种混合云LLM弹性推理解决方案,通过统一管理云上和云下资源,实现在低峰期优先使用线下GPU资源,高峰期自动扩展云上资源。该方案能动态调整资源,显著降低运营成本,确保服务稳定性和资源高效利用。


欢迎加入ACK Edge客户交流钉钉群,与我们一同交流。(钉钉群号:21976595

相关链接:


[1] ACK Edge集群

https://help.aliyun.com/zh/ack/ack-edge/user-guide/create-an-ack-edge-cluster-1


[2] 创建弹性节点池

https://help.aliyun.com/zh/ack/ack-edge/user-guide/auto-scaling-of-nodes?spm=a2c4g.11186623.help-menu-85222.d_1_3_0_0.708775a8NxJbkU&scm=20140722.H_2866667._.OR_help-T_cn~zh-V_1


[3] 安装KServe

https://help.aliyun.com/zh/ack/cloud-native-ai-suite/user-guide/installation-ack-kserve?spm=a2c4g.11186623.help-menu-85222.d_2_4_5_1.605e3186rU3j8a&scm=20140722.H_2784216._.OR_help-T_cn~zh-V_1


[4] 配置Arena客户端

https://help.aliyun.com/zh/ack/cloud-native-ai-suite/user-guide/install-arena#task-1917487


[5] 部署监控组件并配置GPU监控指标

https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/enable-auto-scaling-based-on-gpu-metrics?spm=a2c4g.11186623.0.0.5c2963c5zsiWs4#section-hh4-ss2-qbu


[6] 部署vLLM推理应用文档

https://help.aliyun.com/zh/ack/cloud-native-ai-suite/user-guide/deploy-a-vllm-inference-application?spm=a2c4g.11186623.0.0.5c2963c5zsiWs4#502d55516df9v


[7] 如何自定义Pod调度顺序_容器服务Kubernetes版ACK(ACK)-阿里云帮助中心

https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/configure-priority-based-resource-scheduling?spm=a2c4g.11186623.help-menu-85222.d_2_14_2.329c63c5IlGdoU&scm=20140722.H_398680._.OR_help-T_cn~zh-V_1


[8] 文档

https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/enable-auto-scaling-based-on-gpu-metrics?spm=a2c4g.11186623.0.0.5c2963c5zsiWs4#064204962axrj


/ END /

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
1天前
|
存储 负载均衡 测试技术
ACK Gateway with Inference Extension:优化多机分布式大模型推理服务实践
本文介绍了如何利用阿里云容器服务ACK推出的ACK Gateway with Inference Extension组件,在Kubernetes环境中为多机分布式部署的LLM推理服务提供智能路由和负载均衡能力。文章以部署和优化QwQ-32B模型为例,详细展示了从环境准备到性能测试的完整实践过程。
|
2月前
|
存储 Kubernetes 测试技术
企业级LLM推理部署新范式:基于ACK的DeepSeek蒸馏模型生产环境落地指南
企业级LLM推理部署新范式:基于ACK的DeepSeek蒸馏模型生产环境落地指南
93 12
|
2月前
|
存储 Kubernetes 对象存储
部署DeepSeek但GPU不足,ACK One注册集群助力解决IDC GPU资源不足
部署DeepSeek但GPU不足,ACK One注册集群助力解决IDC GPU资源不足
|
1月前
|
存储 安全 Serverless
阿里云再次被评IDC MarketScape: Worldwide Edge Delivery Service 重要玩家
阿里云再次被评IDC MarketScape: Worldwide Edge Delivery Service 重要玩家
|
2月前
|
弹性计算 运维 Kubernetes
使用ACK Edge统一管理多地域的ECS资源
使用ACK Edge统一管理多地域的ECS资源
|
2月前
|
边缘计算 调度 对象存储
部署DeepSeek但IDC GPU不足,阿里云ACK Edge虚拟节点来帮忙
部署DeepSeek但IDC GPU不足,阿里云ACK Edge虚拟节点来帮忙
|
边缘计算 城市大脑 人工智能
【活动回顾】Edge X Kubernetes,探索云原生新边界
2021 年 6 月 26 日, 由阿里云、VMware、Intel 联合主办的 “Edge X Kubernetes”主题活动在杭州举办,本次活动以 OpenYurt 社区和 EdgeX Foundry 社区协同推动的“云原生边缘计算技术”为核心,12 位来自不同行业和场景的贡献者,和两个开源项目的核心成员一起,共同探讨云原生在边缘的实践与应用。
【活动回顾】Edge X Kubernetes,探索云原生新边界
|
边缘计算 城市大脑 运维
【倒计时2天】Edge X Kubernetes Meetup,探索云原生新边界
6 月 26 日,阿里云联合 VMware、Intel 举办 KubeMeet 定制专场,发起一次 OpenYurt 社区和 EdgeX Foundry 社区的“聚会”,聚焦云原生和边缘计算融合难题,帮助开发者解决大规模应用场景下的交付、运维、管控等挑战,12 位来自不同行业和应用场景的社区贡献者,将和两个开源项目核心成员一起,共同分享云原生在边缘的实践与应用。
【倒计时2天】Edge X Kubernetes Meetup,探索云原生新边界
|
18天前
|
存储 Kubernetes 监控
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
117 33
|
19天前
|
Kubernetes 开发者 Docker
集群部署:使用Rancher部署Kubernetes集群。
以上就是使用 Rancher 部署 Kubernetes 集群的流程。使用 Rancher 和 Kubernetes,开发者可以受益于灵活性和可扩展性,允许他们在多种环境中运行多种应用,同时利用自动化工具使工作负载更加高效。
73 19

热门文章

最新文章