ACK Gateway with AI Extension:面向Kubernetes大模型推理的智能路由实践

简介: 本文介绍了如何利用阿里云容器服务ACK推出的ACK Gateway with AI Extension组件,在Kubernetes环境中为大语言模型(LLM)推理服务提供智能路由和负载均衡能力。文章以部署和优化QwQ-32B模型为例,详细展示了从环境准备到性能测试的完整实践过程。

【阅读原文】戳:ACK Gateway with AI Extension:面向Kubernetes大模型推理的智能路由实践

在当今大语言模型(LLM)推理场景中,Kubernetes已经成为LLM推理服务部署不可获取的基础设施,但在LLM流量管理方面、由于LLM推理服务和推理流量的特殊性,传统的负载均衡和路由调度算法已难以满足该类服务的高性能、高可靠性需求。阿里云容器服务ACK推出ACK Gateway with AI Extension组件,基于Kubernetes社区的Gateway API及Inference Extension规范,为LLM推理服务提供了一系列生产级的智能路由和负载均衡能力。

 

本文主要介绍如何通过ACK Gateway with AI Extension插件为阿里云ACK集群中部署的QwQ-32B模型提供生产级的复杂均衡和智能路由能力。

 

 

 

 

环境准备:部署QwQ-32B推理服务

 

 

 

在本文中,我们基于QwQ-32B推理服务展示ACK Gateway with AI Extension能力。QwQ-32B是阿里云最新发布的高效能大语言模型,拥有32亿参数,性能可媲美DeepSeek-R1 671B。该模型在数学、代码生成等核心指标上表现出色,能够以更低的资源消耗提供卓越的推理能力。

 

前提条件

 

已创建包含GPU的Kubernetes集群,具体操作请参考创建包含GPU的Kubernetes集群[1]

 

至少准备一个ecs.gn7i-c32g1.32xlarge(4xA10)GPU节点,本文示例使用了包含5个ecs.gn7i-c32g1.32xlargeGPU节点的集群。

 

步骤一:准备模型数据

 

1. 下载模型。

 

GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/Qwen/QwQ-32B.git
cd QwQ-32B
git lfs pull

 

2. 上传模型至OSS。

 

ossutil mkdir oss://<Your-Bucket-Name>/QwQ-32B
ossutil cp -r ./QwQ-32B oss://<Your-Bucket-Name>/QwQ-32B

 

3. 为目标集群配置存储卷PV和PVC。

具体操作请参考使用OSS静态存储卷[2]。以下为示例PV的配置信息:

 

配置项 说明
存储卷类型 OSS
名称 llm-model
访问证书 配置用于访问OSS的AccessKey ID和AccessKey Secret。
Bucket ID 选择已创建的OSS Bucket。
OSS Path 选择模型所在的路径,如/models/Qwen1.5-4B-Chat。

 

以下为示例PVC的配置信息:

 

配置项 说明
存储声明类型 OSS
名称 llm-model
分配模式 选择已有存储卷
已有存储卷 单击选择已有存储卷链接,选择已创建的存储卷PV。

 

步骤二:部署推理服务

 

以下命令基于vLLM框架部署QwQ-32B模型的推理服务:

 

kubectl apply -f- <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: qwq-32b
  name: qwq-32b
  namespace: default
spec:
  replicas: 5 # 根据GPU节点数量进行调整
  selector:
    matchLabels:
      app: qwq-32b
  template:
    metadata:
      labels:
        app: qwq-32b
      annotations:
        prometheus.io/path: /metrics
        prometheus.io/port: "8000"
        prometheus.io/scrape: "true"
    spec:
      volumes:
        - name: model
          persistentVolumeClaim:
            claimName: llm-model
        - name: dshm
          emptyDir:
            medium: Memory
            sizeLimit: 30Gi
      containers:
      - command:
        - sh
        - -c
        - vllm serve /models/QwQ-32B --port 8000 --trust-remote-code --served-model-name qwq-32b --tensor-parallel=4 --max-model-len 8192 --gpu-memory-utilization 0.95 --enforce-eager
        image: registry-cn-hangzhou.ack.aliyuncs.com/dev/vllm:v0.7.2
        name: vllm
        ports:
        - containerPort: 8000
        readinessProbe:
          tcpSocket:
            port: 8000
          initialDelaySeconds: 30
          periodSeconds: 30
        resources:
          limits:
            nvidia.com/gpu: "4"
        volumeMounts:
          - mountPath: /models/QwQ-32B
            name: model
          - mountPath: /dev/shm
            name: dshm
---
apiVersion: v1
kind: Service
metadata:
  name: qwq-32b-v1
spec:
  type: ClusterIP
  ports:
  - port: 8000
    protocol: TCP
    targetPort: 8000
  selector:
    app: qwq-32b
EOF

 

 

 

 

使用ACK Gateway with AI Extension进行模型灰度与智能负载均衡

 

 

 

ACK Gateway with AI Extension概述

 

ACK Gateway with AI Extension组件专为LLM推理场景设计,支持四层/七层流量路由,并提供基于模型服务器负载智能感知的负载均衡能力。此外,通过InferencePool和InferenceModel自定义资源(CRD),可以灵活定义推理服务的流量分发策略,包括模型灰度发布。

 

步骤一:开启ACK Gateway with AI Extension组件

 

1. 在ACK集群的组件管理中开启ACK Gateway with AI Extension组件,并启用“Gateway API推理扩展”选项。

 

image.png

 

2. 创建网关实例:使用kubectl连接到ACK集群,并使用以下指令来创建一个具有8080和8081端口的网关。其中8080端口将部署一个标准的HTTP路由、路由到后端推理服务,而8081端口则将基于推理服务扩展向后端推理服务进行路由。

 

kubectl apply -f- <<EOF
apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
  name: inference-gateway
spec:
  controllerName: gateway.envoyproxy.io/gatewayclass-controller
---
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  name: inference-gateway
spec:
  gatewayClassName: inference-gateway
  listeners:
    - name: http
      protocol: HTTP
      port: 8080
    - name: llm-gw
      protocol: HTTP
      port: 8081
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: backend
spec:
  parentRefs:
    - name: inference-gateway
      sectionName: http
  rules:
    - backendRefs:
        - group: ""
          kind: Service
          name: vllm-llama2-7b-pool
          port: 8000
      matches:
        - path:
            type: PathPrefix
            value: /
      timeouts:
        request: "24h"
        backendRequest: "24h"
EOF

步骤二:在网关8081端口上启用推理扩展

 

通过InferencePool和InferenceModel资源来启用AI推理扩展能力。在推理扩展提供的CRD中:InferencePool资源通过标签选择器声明一组在集群中运行的LLM推理服务工作负载,而InferenceModel指定了InferencePool中具体模型的流量分发策略。

 

1. 创建InferencePool。

InferencePool通过标签选择器声明一组推理服务工作负载:

 

kubectl apply -f- <<EOF
apiVersion: inference.networking.x-k8s.io/v1alpha1
kind: InferencePool
metadata:
  annotations:
    inference.networking.x-k8s.io/attach-to: |
      name: inference-gateway
      port: 8081
  name: reasoning-pool
spec:
  targetPortNumber: 8000
  selector:
    app: qwq-32b
EOF

 

2. 创建InferenceModel。

InferenceModel定义了模型的流量分发策略,支持灰度发布。以下示例展示了一个基本用例:将模型名为qwq的请求全部转发给qwq-32b模型。

 

kubectl apply -f- <<EOF
apiVersion: inference.networking.x-k8s.io/v1alpha1
kind: InferenceModel
metadata:
  name: inferencemodel-sample
spec:
  criticality: Critical
  modelName: qwq
  poolRef:
    group: inference.networking.x-k8s.io
    kind: InferencePool
    name: reasoning-pool
  targetModels:
  - name: qwq-32b
    weight: 100
EOF

 

语义说明:

 

targetModels字段定义了目标模型及其权重比例。例如,上述配置表示100%的请求将路由到QwQ-32B模型。

 

criticality字段用于标记模型的重要性,影响流量调度优先级。

 

执行以下命令验证智能路由是否生效:

 

GATEWAY_IP=$(kubectl get gateway/inference-gateway -o jsonpath='{.status.addresses[0].value}')
curl -X POST ${GATEWAY_IP}/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{
    "model": "qwq",
    "messages": [
      {
        "role": "user",
        "content": "你是谁?" 
      }
    ]
}' -v

 

步骤三:压测推理服务、观测推理服务性能和负载均衡效果

 

1. 通过Prometheus实例默认的服务发现机制采集推理服务相关指标。具体操作,请参见默认服务发现[3]

 

2. 通过Grafana大盘来观测基于vLLM部署的LLM推理服务:将vllm的Grafana JSON model导入到Grafana,创建LLM推理服务的可观测大盘。导入的JSON model请参见vllm官方网站[4]。具体导入操作,请参见如何导出和导入Grafana仪表盘[5]

 

3. 执行以下命令创建压测工具

 

kubectl apply -f- <<EOF 
apiVersion: apps/v1 
kind: Deployment
metadata:
  name: vllm-benchmark
  labels:
    app: vllm-benchmark
spec:
  replicas: 1
  selector:
    matchLabels:
      app: vllm-benchmark
  template:
    metadata:
      labels:
        app: vllm-benchmark
    spec:
      volumes:
      - name: llm-model
        persistentVolumeClaim:
          claimName: llm-model
      containers:
      - name: vllm-benchmark
        image: kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/vllm-benchmark:v1
        command:
        - "sh"
        - "-c"
        - "sleep inf"
        volumeMounts:
        - mountPath: /models/QwQ-32B
          name: llm-model
EOF

 

4. 下载压测数据集。

 

# 执行以下命令进入Benchmark Pod
PODNAME=$(kubectl get po -o custom-columns=":metadata.name"|grep "vllm-benchmark")
kubectl exec -it $PODNAME -- bash
# 下载压测数据集
pip3 install modelscope
modelscope download --dataset gliang1001/ShareGPT_V3_unfiltered_cleaned_split ShareGPT_V3_unfiltered_cleaned_split.json --local_dir /root/

 

5. 使用以下指令分别向网关的8080端口(采用网关默认服务路由)和8081端口(采用推理扩展的服务路由)发起两次压测。

 

• 压测网关默认服务路由

 

python3 /root/vllm/benchmarks/benchmark_serving.py \
--backend vllm \
--model /models/QwQ-32B \
--served-model-name qwq-32b \
--trust-remote-code \
--dataset-name random \
--dataset-path /root/ShareGPT_V3_unfiltered_cleaned_split.json \
--random-prefix-len 1000 \
--random-input-len 4000 \
--random-output-len 3000 \
--random-range-ratio 0.2 \
--num-prompts 3000 \
--max-concurrency 60 \
--host 172.16.12.92 \ # ACK Gateway 网关内网ip
--port 8080 \ # 请求8080端口,网关通过默认方式对推理服务进行路由
--endpoint /v1/completions \
--save-result \
2>&1 | tee benchmark_serving.txt
============ Serving Benchmark Result ============
Successful requests:                     2990      
Benchmark duration (s):                  5822.60   
Total input tokens:                      10071917  
Total generated tokens:                  5334789   
Request throughput (req/s):              0.51      
Output token throughput (tok/s):         916.22    
Total Token throughput (tok/s):          2646.02   
---------------Time to First Token----------------
Mean TTFT (ms):                          2456.44   
Median TTFT (ms):                        1366.07   
P99 TTFT (ms):                           23509.43  
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          63.50     
Median TPOT (ms):                        63.33     
P99 TPOT (ms):                           75.22     
---------------Inter-token Latency----------------
Mean ITL (ms):                           63.47     
Median ITL (ms):                         55.49     
P99 ITL (ms):                            59.16     
==================================================

 

• 压测推理扩展的服务路由

 

python3 /root/vllm/benchmarks/benchmark_serving.py \
--backend vllm \
--model /models/QwQ-32B \
--served-model-name qwq-32b \
--trust-remote-code \
--dataset-name random \
--dataset-path /root/ShareGPT_V3_unfiltered_cleaned_split.json \
--random-prefix-len 1000 \
--random-input-len 4000 \
--random-output-len 3000 \
--random-range-ratio 0.2 \
--num-prompts 3000 \
--max-concurrency 60 \
--host 172.16.12.92 \
--port 8081 \ # 请求8081端口,网关基于推理扩展对推理服务进行路由
--endpoint /v1/completions \
--save-result \
2>&1 | tee benchmark_serving_ext.txt
============ Serving Benchmark Result ============
Successful requests:                     2990      
Benchmark duration (s):                  5755.77   
Total input tokens:                      10071917  
Total generated tokens:                  5332890   
Request throughput (req/s):              0.52      
Output token throughput (tok/s):         926.53    
Total Token throughput (tok/s):          2676.41   
---------------Time to First Token----------------
Mean TTFT (ms):                          1796.93   
Median TTFT (ms):                        1470.97   
P99 TTFT (ms):                           8857.07   
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          63.10     
Median TPOT (ms):                        63.03     
P99 TPOT (ms):                           70.68     
---------------Inter-token Latency----------------
Mean ITL (ms):                           63.06     
Median ITL (ms):                         55.37     
P99 ITL (ms):                            59.17     
==================================================

 

 

 

 

性能对比与总结

 

 

 

分别对普通网关(8080端口)和ACK Gateway with AI Extension(8081端口)进行了压测,关键指标结果如下:

 

指标 普通网关路由 ACK Gateway with AI Extension智能路由
平均TTFT (ms) 2456.44 1796.93
P99 TTFT (ms) 23509.43 8857.07
输出吞吐量 (tok/s) 916.22 926.53

 

同时可以观测到两次压测对应时间段内,vLLM服务器可观测大盘的可视化对比。

 

image.png

 

通过压测数据和大盘可以直观地发现基于ACK Gateway的推理扩展对推理服务进行路由和负载均衡时,QwQ-32B推理服务拥有更好的延迟、吞吐量和缓存利用率表现,生产性能更佳。其中请求和token吞吐略有提升,平均TTFT缩短26.8%,P99 TTFT降低62.32%,KV Cache利用率在不同工作负载之间更加均匀。

 

相比传统网关,ACK Gateway with AI Extension显著提升了推理服务的延迟、吞吐量和缓存利用率,为LLM推理场景提供了更优的解决方案。同时还能够针对LLM推理服务提供模型灰度、流量镜像等场景化能力。如果您对ACK Gateway with AI Extension感兴趣,欢迎参考官方文档[6]来进行进一步探索!

 

注:测试结果与多种因素有关,上述结果仅供参考。

 

相关链接:

 

[1] 创建包含GPU的Kubernetes集群

https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/create-an-ack-managed-cluster-with-gpu-accelerated-nodes?spm=a2c4g.171073.0.0.4c78f95a00Mb5P

 

[2] 使用OSS静态存储卷

https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/mount-statically-provisioned-oss-volumes

 

[3] 默认服务发现

https://help.aliyun.com/zh/arms/prometheus-monitoring/default-pod-service-discovery

 

[4] vllm官方网站

https://docs.vllm.ai/en/latest/getting_started/examples/prometheus_grafana.html

 

[5] 如何导出和导入Grafana仪表盘

https://help.aliyun.com/zh/grafana/support/how-to-export-and-import-the-grafana-dashboard

 

[6] 官方文档

https://help.aliyun.com/zh/ack/product-overview/ack-gateway-with-ai-extension?scm=20140722.S_help%40%40%E6%96%87%E6%A1%A3%40%402872965.S_RQW%40ag0%2BBB2%40ag0%2BBB1%40ag0%2Bos0.ID_2872965-RL_ACKGatewaywithAI-LOC_doc%7EUND%7Eab-OR_ser-PAR1_212a5d3e17418618038791691d75c4-V_4-P0_0-P1_0&spm=a2c4g.11186623.help-search.i20


我们是阿里巴巴云计算和大数据技术幕后的核心技术输出者。

欢迎关注 “阿里云基础设施”同名微信微博知乎

获取关于我们的更多信息~

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
3月前
|
存储 机器学习/深度学习 算法
​​LLM推理效率的范式转移:FlashAttention与PagedAttention正在重塑AI部署的未来​
本文深度解析FlashAttention与PagedAttention两大LLM推理优化技术:前者通过分块计算提升注意力效率,后者借助分页管理降低KV Cache内存开销。二者分别从计算与内存维度突破性能瓶颈,显著提升大模型推理速度与吞吐量,是当前高效LLM系统的核心基石。建议收藏细读。
655 125
|
2月前
|
数据采集 人工智能 搜索推荐
智能新纪元:多模态大模型如何重塑人机交互
智能新纪元:多模态大模型如何重塑人机交互
225 113
|
2月前
|
存储 人工智能 安全
《Confidential MaaS 技术指南》发布,从 0 到 1 构建可验证 AI 推理环境
Confidential MaaS 将从前沿探索逐步成为 AI 服务的安全标准配置。
|
3月前
|
存储 人工智能 NoSQL
用Context Offloading解决AI Agent上下文污染,提升推理准确性
上下文工程是将AI所需信息(如指令、数据、工具等)动态整合到模型输入中,以提升其表现。本文探讨了“上下文污染”问题,并提出“上下文卸载”策略,通过LangGraph实现,有效缓解长文本处理中的信息干扰与模型幻觉,提升AI代理的决策准确性与稳定性。
341 2
用Context Offloading解决AI Agent上下文污染,提升推理准确性
|
3月前
|
人工智能 Java API
Java与大模型集成实战:构建智能Java应用的新范式
随着大型语言模型(LLM)的API化,将其强大的自然语言处理能力集成到现有Java应用中已成为提升应用智能水平的关键路径。本文旨在为Java开发者提供一份实用的集成指南。我们将深入探讨如何使用Spring Boot 3框架,通过HTTP客户端与OpenAI GPT(或兼容API)进行高效、安全的交互。内容涵盖项目依赖配置、异步非阻塞的API调用、请求与响应的结构化处理、异常管理以及一些面向生产环境的最佳实践,并附带完整的代码示例,助您快速将AI能力融入Java生态。
507 12
|
2月前
|
传感器 人工智能 监控
拔俗多模态跨尺度大数据AI分析平台:让复杂数据“开口说话”的智能引擎
在数字化时代,多模态跨尺度大数据AI分析平台应运而生,打破数据孤岛,融合图像、文本、视频等多源信息,贯通微观与宏观尺度,实现智能诊断、预测与决策,广泛应用于医疗、制造、金融等领域,推动AI从“看懂”到“会思考”的跃迁。
|
3月前
|
人工智能 监控 数据可视化
如何破解AI推理延迟难题:构建敏捷多云算力网络
本文探讨了AI企业在突破算力瓶颈后,如何构建高效、稳定的网络架构以支撑AI产品化落地。文章分析了典型AI IT架构的四个层次——流量接入层、调度决策层、推理服务层和训练算力层,并深入解析了AI架构对网络提出的三大核心挑战:跨云互联、逻辑隔离与业务识别、网络可视化与QoS控制。最终提出了一站式网络解决方案,助力AI企业实现多云调度、业务融合承载与精细化流量管理,推动AI服务高效、稳定交付。
|
3月前
|
机器学习/深度学习 人工智能 测试技术
探索 Qwen2.5-Max 的智能:大规模 MoE 模型的飞跃
Qwen2.5-Max 是通义实验室推出的最先进MoE模型,在推理、知识和代码任务中表现卓越,已在超20万亿token上预训练,并通过SFT和RLHF优化。在多项基准测试中领先,如Arena-Hard达89.4,MMLU-Pro为76.1,性能超越DeepSeek V3、GPT-4o等模型,成为当前最佳开源模型。可通过Qwen Chat和API使用,适用于开发者、研究者及AI爱好者探索前沿AI能力。
457 2

热门文章

最新文章

推荐镜像

更多