NVIDIA NIM微服务在Kubernetes中的自动扩缩容实践
1. 项目概述在2025年3月18日之后NVIDIA Triton推理服务器已正式成为NVIDIA Dynamo平台的一部分并更名为NVIDIA Dynamo Triton。NVIDIA NIM微服务作为模型推理容器可以在Kubernetes集群中部署运行。在生产环境中理解这些微服务的计算和内存特性对于建立有效的自动扩缩容方案至关重要。本文将详细介绍如何为基于NVIDIA NIM的LLM模型设置Kubernetes水平Pod自动扩缩容(HPA)通过特定的自定义指标实现微服务的自动扩缩容。这个方案特别适合需要处理动态负载变化的大语言模型推理场景比如在线聊天机器人、内容生成服务等。2. 环境准备与组件部署2.1 系统要求在开始之前需要确保满足以下先决条件有效的NVIDIA AI Enterprise许可证NVIDIA NIM for LLMs需要此许可证才能自托管部署Kubernetes集群版本1.29或更高推荐使用DGX Cloud集群对Kubernetes集群的管理员访问权限已安装kubectl和HELM CLI工具重要提示部署NIM for LLMs需要生成NGC API KEY以便Kubernetes集群能够下载容器镜像。2.2 关键组件安装2.2.1 Kubernetes Metrics ServerMetrics Server负责从Kubelets收集资源指标并通过Metrics API将它们暴露给Kubernetes API Server。这是Horizontal Pod Autoscaler和kubectl top命令的基础。安装命令helm repo add metrics-server https://kubernetes-sigs.github.io/metrics-server/ helm upgrade --install metrics-server metrics-server/metrics-server2.2.2 Prometheus和GrafanaPrometheus和Grafana是常用的指标收集和可视化工具。我们使用kube-prometheus-stack Helm chart来安装整套监控方案helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update helm install [RELEASE_NAME] prometheus-community/kube-prometheus-stack2.2.3 Prometheus AdapterPrometheus适配器将Prometheus收集的指标通过Metrics API暴露给Kubernetes apiserver使HPA能够基于Pod的自定义指标进行扩缩容决策。安装命令helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update helm install name prometheus-community/prometheus-adapter -n namespace安装后需要确认适配器正确指向Prometheus服务端点。可以通过以下命令编辑部署配置kubectl edit deployment prom-adapter-prometheus-adapter -n prometheus在配置中确保prometheus-url参数正确指向Prometheus服务例如spec: affinity: {} containers: - args: - /adapter - --secure-port6443 - --cert-dir/tmp/cert - --prometheus-urlhttp://prometheus-prometheus.prometheus.svc:9090 - --metrics-relist-interval1m - --v4 - --config/etc/adapter/config.yaml image: registry.k8s.io/prometheus-adapter/prometheus-adapter:v0.12.03. NIM微服务部署与指标收集3.1 部署NIM微服务本教程使用meta/llama-3.1-8b-instruct模型的NIM for LLMs微服务作为扩缩容示例。部署方式有两种选择使用Helm直接部署使用NIM Operator进行部署部署完成后需要记录NIM for LLMs微服务的服务名称和命名空间这些信息将在后续命令中频繁使用。3.2 指标暴露与监控NIM for LLMs已经内置暴露了Prometheus端点包含多个有价值的指标。可以通过以下命令访问指标端点kubectl -n namespace port-forward svc/service-name 8080在浏览器中访问localhost:8080/metrics查找名为gpu_cache_usage_perc的特定指标。这个指标显示了KV缓存的利用率百分比由vLLM栈报告将作为我们自动扩缩容的基础指标。为了更直观地观察这些指标可以使用NIM for LLMs的Grafana仪表板。下载JSON仪表板文件并上传到Grafana实例中。4. 负载生成与指标观察4.1 负载生成工具设置我们将使用genai-perf工具生成负载。首先创建一个包含NVIDIA Triton的Podkubectl run pod-name --imagenvcr.io/nvidia/tritonserver:24.10-py3-sdk -n namespace --command -- sleep 100000进入Pod并安装必要的工具kubectl exec --stdin --tty pod-name -- /bin/bash pip install --upgrade huggingface_hub[cli] export HF_TOKENhf-token huggingface-cli login --token $HF_TOKEN4.2 负载生成与指标观察设置环境变量并生成负载export INPUT_SEQUENCE_LENGTH200 export INPUT_SEQUENCE_STD10 export OUTPUT_SEQUENCE_LENGTH200 export CONCURRENCY10 export MODELmeta/llama-3.1-8b-instruct genai-perf profile \ -m $MODEL \ --endpoint-type chat \ --service-kind openai \ --streaming -u meta-llama3-8b:8080 \ --synthetic-input-tokens-mean $INPUT_SEQUENCE_LENGTH \ --synthetic-input-tokens-stddev $INPUT_SEQUENCE_STD \ --concurrency $CONCURRENCY \ --output-tokens-mean $OUTPUT_SEQUENCE_LENGTH \ --extra-inputs max_tokens:$OUTPUT_SEQUENCE_LENGTH \ --extra-inputs min_tokens:$OUTPUT_SEQUENCE_LENGTH \ --extra-inputs ignore_eos:true \ --tokenizer meta-llama/Meta-Llama-3-8B-Instruct -- -v --max-threads256通过改变并发数100、200、300、400生成不同负载在Grafana仪表板中可以观察到KV缓存利用率百分比的变化。例如并发数为100时利用率可能为9.40%而并发数400时可能达到40.9%。5. HPA配置与自动扩缩容5.1 创建HPA资源基于gpu_cache_usage_perc指标创建HPA资源apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: gpu-hpa-cache spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: meta-llama3-8b minReplicas: 1 maxReplicas: 10 metrics: - type: Pods pods: metric: name: gpu_cache_usage_perc target: type: AverageValue averageValue: 100m应用配置kubectl create -f hpa-gpu-cache.yaml -n namespace5.2 扩缩容观察使用不同并发数10、100、200运行genai-perf观察HPA指标变化kubectl get hpa -n namespace -w当指标超过阈值时HPA会自动增加Pod数量。例如NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE gpu-hpa-cache Deployment/meta-llama3-8b 208m/100m 1 10 3 7m1s缩容过程由--horizontal-pod-autoscaler-downscale-stabilization参数控制默认等待5分钟后开始逐步缩容。6. 高级配置与优化建议6.1 多指标扩缩容除了KV缓存利用率外还可以考虑以下指标进行扩缩容请求延迟请求吞吐量GPU计算利用率可以在一个HPA资源中配置多个指标实现更全面的扩缩容策略。6.2 自定义PromQL指标通过Prometheus查询语言(PromQL)可以创建新的自定义指标并将其添加到Prometheus适配器的configmap中供HPA使用。6.3 性能调优建议根据实际负载特点调整扩缩容阈值避免过于敏感或迟钝的反应考虑设置适当的Pod资源请求和限制确保每个Pod有足够的计算资源监控扩缩容事件和性能指标持续优化配置参数在非高峰期测试系统行为确保扩缩容策略符合预期在实际部署中我发现将KV缓存利用率阈值设置在70-80%之间能够在响应时间和资源利用率之间取得良好平衡。同时建议设置适当的Pod销毁策略确保正在处理的请求能够正常完成。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2545339.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!