基于优化器的自动扩缩器#
工作原理#
步骤 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