0Pricing
Learn AI with Python · 课时

扩展与自动扩展模型端点

用于模型 Pod 的 Kubernetes HPA、基于流量的扩展、A/B 部署和金丝雀发布。

扩展与自动扩展模型端点 是 CoddyKit 上的免费 Learn AI with Python 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn AI with Python 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn AI with Python 课程共包含 4 节课。

为何自动扩缩容

推理流量很少会保持平稳。按峰值负载配置资源会导致夜间浪费资金;按平均负载配置资源又会在峰值时失效。自动扩缩容会根据需求自动调整副本数量,让您按实际使用量付费,同时保持响应能力。

容器组与副本

在 Kubernetes 中,模型服务器以由相同容器组(副本)组成的部署运行。扩缩容意味着更改副本数量。服务会将请求分配到现有的各个副本。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: model-server
spec:
  replicas: 2
  template:
    spec:
      containers:
        - name: server
          image: my-model:latest

水平容器组自动扩缩器

水平容器组自动扩缩器(HPA)会监控某项指标,并添加或移除容器组,使该指标保持在目标值附近。最经典的指标是 CPU 利用率。

基于 CPU 利用率的 HPA

targetCPUUtilizationPercentage 会告诉 HPA 将平均 CPU 利用率维持在目标值附近。如果容器组的平均 CPU 利用率为 80%,而目标值是 50%,HPA 就会扩容,直到利用率回落至接近 50%。

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: model-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: model-server
  minReplicas: 2
  maxReplicas: 10
  targetCPUUtilizationPercentage: 50

基于 CPU 扩缩容的局限

对于某些工作负载,CPU 并不是一个好的替代指标。GPU 模型可能会受 GPU 限制,而 CPU 利用率仍然很低;异步工作进程的队列可能不断增长,但 CPU 仍处于空闲状态。对于这些情况,应改用特定于工作负载的信号进行扩缩容。

用于事件驱动扩缩容的 KEDA

KEDA(Kubernetes 事件驱动自动扩缩容)可以根据队列长度、Kafka 延迟或 Prometheus 查询等外部指标进行扩缩容。当没有工作时,它甚至可以将副本数缩减到零,而 HPA 无法独立完成这一操作。

基于队列的 KEDA ScaledObject

此 KEDA ScaledObject 会在消息队列增长时增加工作进程。积压中的每个 queueLength 单位都会触发另一个副本,从而使消费者能够跟上突发流量。

apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: inference-worker
spec:
  scaleTargetRef:
    name: inference-worker
  minReplicaCount: 0
  maxReplicaCount: 20
  triggers:
    - type: rabbitmq
      metadata:
        queueName: inference
        queueLength: "10"

使用入口进行负载均衡

外部流量会通过入口到达容器组。nginx 入口控制器会终止 TLS,并将请求分发到为副本提供支持的服务,因此扩容后负载可以立即得到分散。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: model-ingress
spec:
  ingressClassName: nginx
  rules:
    - host: api.example.com
      http:
        paths:
          - path: /predict
            pathType: Prefix
            backend:
              service:
                name: model-server
                port:
                  number: 8000

安全发布:金丝雀

一次性将新模型版本部署到全部流量中存在风险。金丝雀发布会将少量流量发送到新版本,监控其指标,然后逐步转移更多流量。

使用流量权重进行金丝雀发布

nginx 入口的金丝雀注解会将一定百分比的请求路由到第二个部署。先从 10% 开始,确认错误率和延迟符合要求后,再将权重提高到 100%。

metadata:
  annotations:
    nginx.ingress.kubernetes.io/canary: "true"
    nginx.ingress.kubernetes.io/canary-weight: "10"

整合扩缩容

一个稳健的方案会结合所有这些机制:

  • HPA 或 KEDA 根据需求设置副本数量
  • 入口在副本之间进行负载均衡
  • 金丝雀权重安全地发布新版本

这些机制结合起来,可以提供弹性强、可靠且风险较低的模型服务。

快速检查

检验您对扩缩容的理解。

回顾

您已经学会扩缩模型端点:

  • 使用带有 targetCPUUtilizationPercentage 的 HPA,根据 CPU 利用率进行扩缩容
  • KEDA 根据队列长度进行扩缩容,并支持缩容到零
  • nginx 入口在副本之间进行负载均衡
  • 金丝雀权重逐步转移流量,从而安全地发布版本

常见问题解答

「扩展与自动扩展模型端点」课时是免费的吗?

是的 — 「扩展与自动扩展模型端点」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn AI with Python 课程的其余内容,请升级到 CoddyKit PRO。 Learn AI with Python 课程共包含 4 节课。

「扩展与自动扩展模型端点」这节课中我会学到什么?

用于模型 Pod 的 Kubernetes HPA、基于流量的扩展、A/B 部署和金丝雀发布。 你通过在浏览器中直接运行的动手代码来练习 Learn AI with Python,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Learn AI with Python 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Learn AI with Python 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「扩展与自动扩展模型端点」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Learn AI with Python 课中编写并运行代码吗?

能。每节 Learn AI with Python 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用 Docker 容器化机器学习模型
  2. 云部署:AWS SageMaker
  3. 使用 Triton Inference Server 实现高性能服务
  4. 扩展与自动扩展模型端点
← 返回 Learn AI with Python