根据推理业务GPU使用率创建HPA策略
在CCE Standard/Turbo集群中,用户可以通过GPU监控指标为使用GPU资源的工作负载配置弹性伸缩(HPA),使应用在业务高峰期自动扩容、低负载时缩容,从而优化资源利用率并降低成本。
前提条件
- 目标集群已创建,且集群中包含GPU节点,并已运行GPU相关业务。
- 在集群中安装CCE AI套件(NVIDIA GPU),且插件正常上报GPU的metrics指标。您可以登录GPU节点,执行以下命令进行检查:
curl {Pod IP}:2112/metrics其中{Pod IP}是CCE AI套件(NVIDIA GPU)插件中nvidia-gpu-device-plugin组件的Pod IP,返回指标结果则为正常。
- 在集群中安装3.9.5及以上版本的云原生监控插件,且部署模式需选择“本地数据存储”。您还需将Prometheus注册为Metrics API的服务,详见通过Metrics API提供基础资源指标。如果集群中已安装Kubernetes Metrics Server,该插件默认提供Metrics API,无需重复注册。
采集GPU指标
- 登录CCE控制台,单击集群名称进入集群,在左侧导航栏中选择“配置项与密钥”。
- 切换至“monitoring”命名空间,在“配置项”页签找到user-adapter-config配置项,并单击“更新”。
图1 更新配置项
- 在“配置数据”中单击config.yaml对应的“编辑”按钮,在rules字段下添加自定义指标采集规则。修改完成后单击“确定”保存配置。
如果您需要增加多个采集规则,可在rules字段下添加多个配置,关于采集规则配置详情请参见Metrics Discovery and Presentation Configuration。
针对cce_gpu_utilization指标的自定义采集规则示例如下,更多GPU指标请参见GPU监控指标说明。rules: - seriesQuery: '{__name__=~"cce_gpu_utilization",container!="",namespace!="",pod!=""}' seriesFilters: [] resources: overrides: namespace: resource: namespace pod: resource: pod metricsQuery: sum(last_over_time(<<.Series>>{<<.LabelMatchers>>}[1m])) by (<<.GroupBy>>)图2 设置自定义采集规则
- 重新部署monitoring命名空间下的custom-metrics-apiserver工作负载。
图3 重新部署custom-metrics-apiserver
- 重启后,可以通过以下指令查看对应的Pod的指标是否正常。
kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1"
回显结果如下:
{"kind":"APIResourceList","apiVersion":"v1","groupVersion":"custom.metrics.k8s.io/v1beta1","resources":[{"name":"pods/cce_gpu_memory_utilization","singularName":"","namespaced":true,"kind":"MetricValueList","verbs":["get"]},{"name":"namespaces/cce_gpu_memory_utilization","singularName":"","namespaced":false,"kind":"MetricValueList","verbs":["get"]}]}
推理服务部署
- 执行以下命令部署一个推理服务。
您可以把Qwen3-8B的checkPoint(https://huggingface.co/Qwen/Qwen3-8B)提前存储到指定路径,然后通过HostPath进行挂载。本例是存储到本地“/root/wx/checkpoints/qwen/”路径,镜像使用vllm/vllm-openai:v0.11.0。
kind: Deployment apiVersion: apps/v1 metadata: name: qwen-8b namespace: default spec: replicas: 1 selector: matchLabels: app: qwen-8b version: v1 template: metadata: labels: app: qwen-8b version: v1 spec: volumes: - name: vol-ckpt hostPath: path: /root/wx/checkpoints/qwen/ # 本地存储的Qwen3-8B的checkPoint路径 type: '' containers: - name: container-1 image: vllm/vllm-openai:v0.11.0 command: - /bin/sh - '-c' args: - vllm serve Qwen3-8B --model='/vllm-workspace/Qwen3-8B' --port=8000 --host=0.0.0.0 --max-model-len=20480 env: - name: TRANSFORMERS_OFFLINE value: '1' - name: HF_DATASET_OFFLINE value: '1' resources: limits: cpu: '16' memory: 80Gi nvidia.com/gpu: '1' requests: cpu: '16' memory: 80Gi nvidia.com/gpu: '1' volumeMounts: - name: vol-ckpt mountPath: /vllm-workspace/Qwen3-8B imagePullPolicy: IfNotPresent restartPolicy: Always terminationGracePeriodSeconds: 30 dnsPolicy: ClusterFirst securityContext: {} imagePullSecrets: - name: default-secret strategy: type: RollingUpdate rollingUpdate: maxUnavailable: 25% maxSurge: 25% --- apiVersion: v1 kind: Service metadata: name: qwen-8b-svc namespace: default spec: selector: app: qwen-8b version: v1 type: ClusterIP ports: - name: http port: 8000 targetPort: 8000 - 执行以下命令查看Pod和Service部署状态。
kubectl get pod kubectl get service
预期如下:

- 执行以下命令验证推理服务,其中IP需要更换为Service IP。
curl http://10.247.90.143:8000/v1/completions -H "Content-Type: application/json" -d '{"model": "Qwen3-8B","prompt": "San Francisco is a","max_tokens": 100,"temperature": 0}'正常返回如下:

创建弹性伸缩策略
- 单击左侧导航栏的“工作负载”,在目标工作负载的操作列中单击“弹性伸缩”。
- 策略类型选择“HPA+CronHPA策略”,并启用HPA策略。
您可在“自定义策略”中选择GPU监控参数创建弹性伸缩策略,示例如下。
图4 选择自定义指标
示例中以cce_gpu_utilization(GPU利用率)作为伸缩指标,其余HPA参数的设置请根据实际需求进行设置,详情请参见创建HPA策略。
- 返回“策略”页签,查看HPA策略已创建成功。
图5 HPA策略创建成功
测试推理服务弹性伸缩
验证HPA扩容
- 下载Apache自带的压力测试工具ApacheBench(简称ab)。
#若OS为Ubuntu apt-get install apache2-utils #若OS为CentOS/HCE yum install httpd-tools
- 执行以下命令进行压测,其中ab压测工具命令,body.json为请求体。
body.json内容如下:
{ "model": "Qwen3-8B", "prompt": "San Francisco is a", "max_tokens": 100, "temperature": 0 }压测命令如下:
ab -n 4000 -c 1 -p body.json -T application/json http://10.247.90.143:8000/v1/completions
- 观察GPU负载情况和HPA状态。
验证HPA缩容
压测结束后,查看GPU负载和HPA状态。





