我使用 Azure Kubernetes 服务在 Azure ML 工作区中部署了大约 23 个模型(总计 1.57 GB)。对于 AKS 集群,我使用了 3 个 D8sv3 节点,并为最多 6 个节点的集群启用了集群自动缩放。AksWebService 配置有 4.4 核、16 GB 内存。我为 Web 服务启用了 pod 自动缩放,将 autoscale_max_replicas 设置为 40:
aks_config = AksWebservice.deploy_configuration(cpu_cores = 4.4, memory_gb = 16, autoscale_enabled = True,
description = 'TEST - Configuration for Kubernetes Compute Target',
enable_app_insights = True, max_request_wait_time = 25000,
autoscale_target_utilization = 0.6, autoscale_max_replicas = 40)
我尝试使用 10 个并发用户(使用 JMeter)运行负载测试。并且我监控了集群应用洞察:
我可以看到节点和 Pod 扩展。但是,CPU/内存利用率没有峰值。对于 10 个并发请求,只有 5 到 6 个请求通过,其余的则失败。当我向部署的端点发送单个请求时,会在 7 到 9 秒内生成响应。但是,在负载测试日志中,有很多请求需要超过 15 秒才能生成响应。并且请求花费超过 25 秒,失败并显示状态码 503。max_request_wait_time
由于这个原因,我增加了,但是,我不明白为什么尽管计算量如此之大,它会花费这么多时间,并且仪表板显示内存是甚至没有使用 30%。我应该改变replica_max_concurrent_requests
参数吗?还是我应该增加autoscale_max_replicas
更多?生产中的并发请求负载有时可能会达到 100,有什么解决方案吗?
将不胜感激任何建议。谢谢。