首页 > 教程攻略 > ai资讯 >使用 NVIDIA NIM 在阿里云 ACK 中加速 LLM 推理

使用 NVIDIA NIM 在阿里云 ACK 中加速 LLM 推理

来源:互联网 时间:2026-08-26 14:24:08

大语言模型(LLM)的热度已经不用再多说了——从对话机器人到代码生成,从内容创作到行业智能化,几乎每个领域都在探索如何用好它。但把模型真正部署到生产环境,却往往是另一回事:延迟、吞吐量、安全性、监控……每一步都不简单。尤其是当开源模型越来越强,越来越多的企业开始尝试把它们接入现有基础设施时,推理服务的部署成了一道绕不过去的坎。

好消息是,现在有了NVIDIA NIM和阿里云容器服务ACK这套组合拳。NVIDIA NIM是一套专为安全、可靠地部署高性能AI模型推理而设计的微服务,本质上就是预构建的容器化工具。结合ACK的云原生能力,可以快速搭起一套开箱即用、高性能、可观测、灵活弹性的LLM推理服务。下面,我们就把整个操作过程掰开了揉碎了讲清楚。

使用 NVIDIA NIM 在阿里云 ACK 中加速 LLM 推理

阿里云容器服务(ACK)云原生AI套件

阿里云容器服务Kubernetes版ACK是全球首批通过Kubernetes一致性认证的服务平台,提供高性能的容器应用管理,让企业轻松在云端运行Kubernetes容器化应用。

云原生AI套件则是ACK上专门为AI/ML场景打造的产品方案。它充分利用云原生架构,在Kubernetes上快速构建AI生产系统,并全栈优化。尤其值得一提的是,它支持Kubeflow社区开源的命令行工具Arena,能把深度学习核心环节(数据管理、模型训练、评估、推理部署等)抽象成简单命令,大幅降低Kubernetes的复杂度。Arena支持分布式训练任务的快速提交和生命周期管理。此外,云原生AI套件还提供针对分布式优化的调度策略(比如Binpack算法提升GPU利用率),以及自定义的任务优先级和租户弹性配额控制,在保障资源分配的同时,通过共享提升整体利用率。

方案介绍

整体思路是:在ACK集群上,用云原生AI套件集成开源推理服务框架KServe,快速部署NVIDIA NIM。同时接入阿里云的Prometheus和Grafana服务,搭建监控大盘实时观测推理服务状态。利用NVIDIA NIM提供的丰富指标(如num_requests_waiting),配置基于排队请求数的弹性扩缩容策略——一旦突发流量导致请求排队,自动扩容实例应对高峰。架构图如下所示(图片已保留)。

部署流程

首先,需要创建一个包含GPU的Kubernetes集群[1],并部署云原生AI套件[2]。为了在集群中使用KServe管理推理服务,还要安装ack-kserve组件[3]。环境准备好后,按以下步骤操作。

重要提示:

请自觉遵守第三方模型的用户协议、使用规范和相关法律法规,对使用第三方模型的合法性、合规性自行承担责任。

  1. 参考NVIDIA NIM文档[4],生成NGC API Key,并确认要部署的模型镜像(本文用Llama3-8b-instruct)。请阅读并遵守Llama模型的自定义可商用开源协议[5]。
  2. 创建imagePullSecret,用于从NGC私有仓库拉取NIM镜像:
export NGC_API_KEY=
kubectl create secret docker-registry ngc-secret \
  --docker-server=nvcr.io --docker-username='$oauthtoken' --docker-password=${NGC_API_KEY}
  1. 创建nvidia-nim-secret,用于容器内访问NGC仓库,参考nim-deploy文档[6]:
kubectl apply -f - <
EOF
  1. 为目标集群配置存储卷PV和存储声明PVC,模型文件会下载到共享存储中。具体操作请参见使用NAS静态存储卷[7]。示例PV配置如下:
配置项说明
存储卷类型NAS
名称nim-model
访问模式ReadWriteMany
挂载点域名可通过选择挂载点或自定义方式指定,详情参见查看挂载点地址[8]
挂载路径如 /nim-model

示例PVC配置:

配置项说明
存储声明类型NAS
名称nim-model
分配模式选择已有存储卷
已有存储卷选择已创建的PV
  1. 执行以下命令,部署KServe推理服务,使用NVIDIA NIM镜像,指定一个NVIDIA GPU,将PVC挂载到容器内/mnt/models目录保存模型,设置autoscalerClass=external使用自定义HPA策略,并开启Prometheus采集监控指标:
arena serve kserve --name=llama3-8b-instruct \
  --image=nvcr.io/nim/meta/llama3-8b-instruct:1.0.0 \
  --image-pull-secret=ngc-secret --gpus=1 --cpu=8 --memory=32Gi \
  --share-memory=32Gi --port=8000 --security-context runAsUser=0 \
  --annotation=serving.kserve.io/autoscalerClass=external \
  --env NIM_CACHE_PATH=/mnt/models \
  --env-from-secret NGC_API_KEY=nvidia-nim-secrets \
  --enable-prometheus=true --metrics-port=8000 \
  --data=nim-model:/mnt/models

预期输出显示Job提交成功。

  1. 查看推理服务部署情况:
arena serve get llama3-8b-instruct

预期输出表明服务部署成功,模型访问地址为:http://llama3-8b-instruct-default.example.com

  1. 通过Nginx Ingress网关地址访问推理服务:
# 获取Nginx Ingress IP
NGINX_INGRESS_IP=$(kubectl -n kube-system get svc nginx-ingress-lb -ojsonpath='{.status.loadBalancer.ingress[0].ip}')
# 获取推理服务Hostname
SERVICE_HOSTNAME=$(kubectl get inferenceservice llama3-8b-instruct -o jsonpath='{.status.url}' | cut -d "/" -f 3)
# 发送请求
curl -H "Host: $SERVICE_HOSTNAME" \
  -H "Content-Type: application/json" \
  http://$NGINX_INGRESS_IP:80/v1/chat/completions \
  -d '{"model": "meta/llama3-8b-instruct", "messages": [{"role": "user", "content": "Once upon a time"}], "max_tokens": 64, "temperature": 0.7, "top_p": 0.9, "seed": 10}'

预期返回推理结果,表明服务正常。

监控

NVIDIA NIM提供了丰富的Prometheus监控指标,比如首token时延、当前运行请求数、请求token数、生成token数等。结合阿里云Prometheus和Grafana,可以快速搭建监控大盘。

  1. 开启阿里云Prometheus监控组件[9]。
  2. 创建Grafana工作区,登录Dashboards页面。
  3. 导入NVIDIA NIM提供的dashboard样例[10]。
  4. 导入后,即可看到类似下面的监控面板(图片已保留)。

弹性伸缩

模型推理服务的负载波动是家常便饭。KServe通过集成Kubernetes原生的HPA和扩缩容控制器,可以根据CPU、内存、GPU利用率以及自定义指标自动调整Pod数量,确保服务稳定。

基于排队请求数的自定义指标扩缩容

自定义指标扩缩容依赖ACK的ack-alibaba-cloud-metrics-adapter组件与HPA机制。详细步骤参见基于阿里云Prometheus指标的容器水平伸缩[11]。下面演示如何基于NIM的num_requests_waiting指标配置策略。

  1. 确保已部署阿里云Prometheus和ack-alibaba-cloud-metrics-adapter[11]。
  2. 在ack-alibaba-cloud-metrics-adapter的Helm更新中,添加以下rules:
- seriesQuery: num_requests_waiting{namespace!="",pod!=""}
  resources:
    overrides:
      namespace: {resource: "namespace"}
      pod: {resource: "pod"}
  metricsQuery: sum(<<.Series>>{<<.LabelMatchers>>}) by (<<.GroupBy>>)
  1. 创建HPA配置hpa.yaml,当等待请求数超过10时扩容:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: llama3-8b-instruct-hpa
  namespace: default
spec:
  minReplicas: 1
  maxReplicas: 3
  metrics:
  - pods:
      metric:
        name: num_requests_waiting
      target:
        a verageValue: 10
        type: A verageValue
    type: Pods
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: llama3-8b-instruct-predictor

应用HPA:

kubectl apply -f hpa.yaml

查看HPA:

kubectl get hpa llama3-8b-instruct-hpa

预期输出显示目标为0/10。

  1. 使用hey工具对服务进行压测(5分钟,并发400):
hey -z 5m -c 400 -m POST -host $SERVICE_HOSTNAME \
  -H "Content-Type: application/json" \
  -d '{"model": "meta/llama3-8b-instruct", "messages": [{"role": "user", "content": "Once upon a time"}], "max_tokens": 64}' \
  http://$NGINX_INGRESS_IP:80/v1/chat/completions
  1. 在压测期间查看HPA事件:
kubectl describe hpa llama3-8b-instruct-hpa

预期会看到类似“New size: 3; reason: pods metric num_requests_waiting above target”的事件。压测结束后,约5分钟后Pod自动缩容到1。这就是基于自定义指标自动扩缩容的效果。

总结

本文演示了如何在阿里云容器服务ACK上部署NVIDIA NIM,结合Prometheus和Grafana快速搭建监控大盘,并基于排队请求数配置弹性扩缩容策略。通过这一套方案,企业可以快速构建一个高性能、可观测、极致弹性的模型推理服务,从而把精力更多放在业务本身,而非基础设施的反复折腾上。