基于优化器的自动扩缩器#

工作原理#

步骤 1:离线 GPU-模型 基准测试(按输入-输出模式)#

基准模型。对于每种 GPU 类型,运行 aibrix_benchmark。有关更多选项,请参阅 benchmark.sh

kubectl port-forward [pod_name] 8010:8000 1>/dev/null 2>&1 &
# Wait for port-forward taking effect.
aibrix_benchmark -m deepseek-llm-7b-chat -o [path_to_benchmark_output]

步骤 2:决定 SLO 和 GPU-模型 配置文件生成,运行 aibrix_gen_profile -h 获取帮助。

kubectl -n aibrix-system port-forward svc/aibrix-redis-master 6379:6379 1>/dev/null 2>&1 &
# Wait for port-forward taking effect.
aibrix_gen_profile deepseek-llm-7b-chat-v100 --cost [cost1] [SLO-metric] [SLO-value] -o "redis://:6379/?model=deepseek-llm-7b-chat"

现在 GPU 优化器已准备好工作。您应该会观察到工作负载 Pod 的数量随着发送到网关的请求而变化。一旦 GPU 优化器完成扩缩优化,GPU 优化器的输出将通过指定的 HTTP 端点作为 metricSource 传递给 PodAutoscaler,以进行最终的扩缩决策。以下是 PodAutoscaler 规范的示例。

基于优化器的自动扩缩器根据离线 GPU 容量分析来决定 GPU 的数量。它主动计算在 SLO 下处理请求所需的总容量,并确保 GPU 容量得到充分利用但不过载。GPU 优化器的输出作为自定义指标暴露。以下显示了如何检查这些自定义指标。

kubectl port-forward svc/aibrix-gpu-optimizer 8080:8080

curl https://:8080/metrics/default/deepseek-llm-7b-chat-v100
# HELP vllm:deployment_replicas Number of suggested replicas.
# TYPE vllm:deployment_replicas gauge
vllm:deployment_replicas{model_name="deepseek-llm-7b-chat"} 1

如何部署自动扩缩对象#

这只是一个应用 podautoscaler yaml 文件的问题。GPU 优化器公开了自定义指标,podautoscaler 可以使用这些指标进行扩缩决策,如上所述。您应该注意的一件重要事情是,部署名称和 PodAutoscaler 中 scaleTargetRef 的名称必须相同。这就是 AIBrix PodAutoscaler 引用正确部署的方式。

所有示例文件都可以在以下目录中找到。

https://github.com/vllm-project/aibrix/tree/main/samples/autoscaling

基于优化器的 KPA yaml 配置示例#

apiVersion: autoscaling.aibrix.ai/v1alpha1
kind: PodAutoscaler
metadata:
  name: deepseek-r1-distill-llama-8b-optimizer-scaling
  namespace: default
  labels:
    app.kubernetes.io/name: aibrix
    app.kubernetes.io/managed-by: kustomize
  annotations:
    kpa.autoscaling.aibrix.ai/scale-down-delay: 0s
spec:
  scalingStrategy: KPA 
  minReplicas: 1
  maxReplicas: 8
  metricsSources:
  - endpoint: aibrix-gpu-optimizer.aibrix-system.svc.cluster.local:8080
    metricSourceType: domain
    path: /metrics/default/deepseek-r1-distill-llama-8b
    protocolType: http
    targetMetric: vllm:deployment_replicas
    targetValue: "100"
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: deepseek-r1-distill-llama-8b

检查自动扩缩日志#

GPU 优化器日志#

GPU 优化器是一个独立的组件,负责从每个 Pod 收集指标。您可以这样检查其日志。 kubectl logs <aibrix-gpu-optimizer-podname> -n aibrix-system -f

{"time": "2025-02-12 06:23:52,086", "level": "INFO", "logger": "aibrix.gpu_optimizer.load_monitor", "message": "deepseek-llm-7b-chat optimization took 6.660938262939453 ms, cost $51.3324, coverage: 72.62180974477958%: [deepseek-llm-7b-chat-v100: 2($51.3324)]"}

在上述日志中,GPU 优化器返回建议的 GPU 数量,本例中为 2。

不同自动扩缩器的初步实验#

这里我们展示了初步实验结果,以展示不同的自动扩缩机制和自动扩缩器配置如何影响性能(延迟)和成本(计算成本)。

  • 设置
    • 模型:Deepseek 7B 聊天机器人模型

    • GPU 类型:V100

    • 最大 GPU 数量:8

    • HPA、KPA 和 APA 使用指标作为扩缩指标:70。

    • 基于优化器的 KPA SLO:E2E P99 100s

  • 工作负载
    • 整体 RPS 趋势从低 RPS 开始,相对较快地上升,直到 T=500,以评估不同的自动扩缩器和配置如何应对负载的快速增加。之后,它迅速下降到低 RPS,以评估缩减行为,然后再次缓慢上升。
      • 平均 RPS 趋势:0.5 RPS -> 2 RPS -> 4 RPS -> 5 RPS -> 1 RPS -> 3 RPS

实验结果#

  • gpu_cache_usage_perc: 70

result