网易首页 > 网易号 > 正文 申请入驻

使用 NVIDIA NIM 在阿里云容器服务(ACK)中加速 LLM 推理

0
分享至

大语言模型(LLM)是近年来发展迅猛并且激动人心的热点话题,引入了许多新场景,满足了各行各业的需求。随着开源模型能力的不断增强,越来越多的企业开始尝试在生产环境中部署开源模型,将 AI 模型接入到现有的基础设施,优化系统延迟和吞吐量,完善监控和安全等方面。然而要在生产环境中部署这一套模型推理服务过程复杂且耗时。为了简化流程,帮助企业客户加速部署生成式 AI 模型,本文结合NVIDIA NIM(一套专为安全、可靠地部署高性能 AI 模型推理而设计的微服务,是一套易于使用的预构建容器化工具)和阿里云容器服务 ACK 等产品,提供了一套开箱即用,可以快速构建一个高性能、可观测、灵活弹性的 LLM 模型推理服务的操作指南。

阿里云容器服务 (ACK)

云原生 AI 套件

阿里云容器服务 Kubernetes 版 ACK(Container Service for Kubernetes)是全球首批通过 Kubernetes 一致性认证的服务平台,提供高性能的容器应用管理服务,支持企业级 Kubernetes 容器化应用的生命周期管理,让您轻松高效地在云端运行 Kubernetes 容器化应用。

云原生 AI 套件是阿里云容器服务 ACK 提供的云原生 AI 技术和产品方案。使用云原生 AI 套件,您可以充分利用云原生架构和技术,在 Kubernetes 容器平台上快速定制化构建 AI 生产系统,并为 AI/ML 应用和系统提供全栈优化。云原生 AI 套件支持使用 Kubeflow 社区开源的命令行工具 Arena,对深度学习核心生产环节(包括数据管理、模型训练、模型评估、推理服务部署等)任务进行简单抽象和高效管理,同时降低 Kubernetes 复杂概念带来的使用复杂度。Arena 可以实现分布式训练任务的快速提交,并进行任务的生命周期管理。此外,云原生 AI 套件还提供针对分布式场景优化的调度策略,例如 Binpack 算法分配策略,提升 GPU 利用率,还支持自定义的任务优先级管理和租户弹性资源配额控制,在确保用户资源分配的基础上,通过资源共享的方式来提升集群的整体资源利用率。

方案介绍

本文将介绍如何在阿里云 ACK 集群上,使用云原生 AI 套件集成开源推理服务框架 KServe,快速部署 NVIDIA NIM。同时,结合阿里云的 Prometheus 和 Grafana 服务,快速搭建监控大盘,实时观测推理服务状态。利用 NVIDIA NIM 提供丰富的监控指标,如num_requests_waiting,配置推理服务弹性扩缩容策略。当有突发流量导致推理服务处理请求排队时,能自动扩容新的实例来应对高峰流量。整体解决方案架构如下所示。

NVIDIA NIM on ACK

本文将介绍在 ACK 集群上部署 NVIDIA NIM 的步骤,总体步骤如下:

  1. 创建 ACK 集群并安装云原生 AI 套件,ack-kserve 等组件。
  2. 使用 Arena 提交 KServe 推理服务,使用 NIVDIA NIM 容器,部署 Llama3-8B 模型。
  3. 为推理服务配置监控,实时观测推理服务状态。
  4. 基于排队中请求数指标配置弹性扩缩容策略,自动灵活地调整模型服务实例的规模。

部署流程

首先需要创建包含 GPU 的 Kubernetes 集群,并部署云原生 AI 套件。为了在集群中使用 KServe 管理推理服务,还需要安装 ack-kserve️。集群环境准备好后,就可以参考下列步骤开始部署服务了。

重要

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

  1. 参考NVIDIA NIM 文档,生成NVIDIA NGC API key,访问需要部署的模型镜像,比如本文中使用的 Llama3-8b-instruct:

https://docs.nvidia.com/nim/large-language-models/latest/getting-started.html#generate-an-api-key

请阅读并承诺遵守 Llama 模型的自定义可商用开源协议

https://llama.meta.com/llama-downloads/

  1. 创建 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 部署文档

https://github.com/NVIDIA/nim-deploy/blob/main/kserve/README.md

kubectl apply -f-


  1. 为目标集群配置存储卷 PV 和存储声明 PVC,后续模型文件将会下载到创建的共享存储中。具体操作,请参见使用 NAS 静态存储卷:https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/mount-statically-provisioned-nas-volumes以下为示例 PV 的配置信息:



以下为示例 PVC 的配置信息:



  1. 执行下列命令,部署一个 KServe 推理服务,使用 NVIDIA NIM 提供的镜像,指定使用一个 NVIDIA GPU,将 PVC 挂载到容器内的 /mnt/models 目录用于保存模型文件,配置 autoscalerClass=external 指定使用自定义 HPA 策略,同时还开启 Prometheus 采集推理服务监控指标,用于后续在 Grafana 中搭建监控大盘。等待容器启动后,即可使用 Llama3-8b-instruct 模型提供推理服务。

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

预期输出:

INFO[0004] The Job llama3-8b-instruct has been submitted successfullyINFO[0004] You can run `arena serve get llama3-8b-instruct --type kserve -n default` to check the job status

输出结果表明推理服务已部署成功。

  1. 推理部署完成后,可通过执行以下命令,查看 KServe 推理服务的部署情况。

arena serve get llama3-8b-instruct

预期输出:

    llama3-8b-instructNamespace:  defaultType:       KServeVersion:    1Desired:    1Available:  1Age:        24mAddress:    http://llama3-8b-instruct-default.example.comPort:       :80GPU:        1Instances:  NAME                                           STATUS   AGE  READY  RESTARTS  GPU  NODE  ----                                           ------   ---  -----  --------  ---  ----  llama3-8b-instruct-predictor-545445b4bc-97qc5  Running  24m    1/1    0         1    ap-southeast-1.172.16.xx.xxx

输出结果表明,KServe 推理服务部署成功,模型访问地址为:

http://llama3-8b-instruct-default.example.com

  1. 接下来就可以访问推理服务了,可通过使用获取到的 Nginx Ingress 网关地址访问推理服务。

# Obtain the IP address of the Nginx ingress.NGINX_INGRESS_IP=$(kubectl -n kube-system get svc nginx-ingress-lb -ojsonpath='{.status.loadBalancer.ingress[0].ip}')# Obtain the Hostname of the Inference Service.SERVICE_HOSTNAME=$(kubectl get inferenceservice llama3-8b-instruct -o jsonpath='{.status.url}' | cut -d "/" -f 3)# Send a request to access the inference service.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}'

预期输出:

{"id":"cmpl-70af7fa8c5ba4fe7b903835e326325ce","object":"chat.completion","created":1721557865,"model":"meta/llama3-8b-instruct","choices":[{"index":0,"message":{"role":"assistant","content":"It sounds like you're about to tell a story! I'd love to hear it. Please go ahead and continue with \\"Once upon a time...\\""},"logprobs":null,"finish_reason":"stop","stop_reason":128009}],"usage":{"prompt_tokens":14,"total_tokens":45,"completion_tokens":31}}
  1. 输出结果表明,已经能够通过 Nginx Ingress 网关地址访问推理服务,并成功返回推理结果。

监控

NVIDIA NIM 提供了丰富的 Prometheus 监控指标,比如首 token 时延、当前正在运行的请求数、请求 token 数、生成 token 数等指标。结合阿里云 Prometheus 和 Grafana 服务,可以快速在 Grafana 中搭建监控大盘,实时观测推理服务状态。

  1. 已开启阿里云 Prometheus 监控组件。具体操作,请参见开启阿里云 Prometheus 监控

https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/use-alibaba-cloud-prometheus-service-to-monitor-an-ack-cluster?spm=a2c4g.11186623.0.0.612b63c5QDfm5F#section-o0u-mkk-58y

  1. 创建 grafana 工作区,登录 Grafana 的 Dashboards 页面。

  1. 导入 NVIDIA NIM 提供的 dashboard 样例:https://docscontent.nvidia.com/sphinx/0000018f-7ee8-d345-a7bf-ffeadf9c0000/0000018f-7ee7-db2d-a1ff-7ef744750000/nim/large-language-models/latest/_downloads/66e67782ce543dcccec574b1483f0ea0/nim-dashboard-example.json

  1. 成功导入后,dashboard 示例如下

弹性伸缩

在部署与管理 KServe 模型服务过程中,需应对模型推理服务面临的高度动态负载波动。KServe 通过集成 Kubernetes 原生的 HPA(Horizontal Pod Autoscaler)技术及扩缩容控制器,实现了根据 CPU 利用率、内存占用情况、GPU 利用率以及自定义性能指标,自动灵活地调整模型服务 Pod 的规模,以确保服务效能与稳定性。

基于排队请求数

配置自定义指标的弹性扩缩容策略

自定义指标的扩缩容依赖 ACK 提供的 ack-alibaba-cloud-metrics-adapter 组件与 Kubernetes HPA 机制实现。详细信息,请参见基于阿里云 Prometheus 指标的容器水平伸缩

https://help.aliyun.com/zh/ack/serverless-kubernetes/user-guide/horizontal-pod-scaling-based-on-prometheus-service-metrics-1

以下示例演示如何基于 NVIDIA NIM 提供的 num_requests_waiting 指标配置扩缩容策略。

  1. 已部署阿里云 Prometheus 和 ack-alibaba-cloud-metrics-adapter,请参见基于阿里云 Prometheus 指标的容器水平伸缩:

https://help.aliyun.com/zh/ack/serverless-kubernetes/user-guide/horizontal-pod-scaling-based-on-prometheus-service-metrics-1

  1. 在 Helm 列表的操作列,单击 ack-alibaba-cloud-metrics-adapter 对应的更新。在 custom 字段下添加如下 rules。

- seriesQuery: num_requests_waiting{namespace!="",pod!=""}  resources:    overrides:      namespace: {resource: "namespace"}      pod: {resource: "pod"}  metricsQuery: sum(<<.Series>>{<<.LabelMatchers>>}) by (<<.GroupBy>>)
  1. 通过 Custom Metrics 进行容器伸缩,示例配置了当等待中的请求数超过 10 则进行扩容。

o 使用以下内容,创建 hpa.yaml 文件。

apiVersion: autoscaling/v2kind: HorizontalPodAutoscalermetadata:  name: llama3-8b-instruct-hpa  namespace: defaultspec:  # The minReplicas and maxReplicas for the HPA.  minReplicas: 1  maxReplicas: 3  # An array of monitoring metrics that supports the coexistence of multiple types of metrics.  metrics:  - pods:      metric:        name: num_requests_waiting      target:        averageValue: 10        type: AverageValue    type: Pods  # The scaling target description for the HPA, which dynamically adjusts the number of Pods for the target object.  scaleTargetRef:    apiVersion: apps/v1    kind: Deployment    name: llama3-8b-instruct-predictor

o 执行以下命令,创建 HPA 应用。

kubectl apply -f hpa.yam

o 执行以下命令,创建 HPA 应用。

kubectl  get hpa llama3-8b-instruct-hpa

预期输出:

NAME                     REFERENCE                                 TARGETS   MINPODS   MAXPODS   REPLICAS   AGEllama3-8b-instruct-hpa   Deployment/llama3-8b-instruct-predictor   0/10      1         3         1          34s
  1. 执行以下命令,对服务进行压测。

说明 Hey 压测工具的详细介绍,请参见 Hey:

https://github.com/rakyll/hey

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. 在压测期间,重新打开一个终端,执行以下命令查看服务的扩缩容情况。

kubectl describe hpa llama3-8b-instruct-hpa
  1. 预期输出包含如下内容:

Events:  Type    Reason             Age   From                       Message  ----    ------             ----  ----                       -------  Normal  SuccessfulRescale  52s   horizontal-pod-autoscaler  New size: 3; reason: pods metric num_requests_waiting above target

预期输出表明在压测期间 Pod 数会扩容到 2,而当压测结束后,经过一段时间(约为 5 分钟),Pod 缩容到 1。即可以实现自定义指标的扩缩容。

总结

本文通过在阿里云容器服务 ACK 上部署 NVIDIA NIM,结合阿里云 Prometheus 和 Grafana 服务,快速在 Grafana 中搭建监控大盘,实时观测推理服务状态。为应对模型推理服务面临的动态负载波动,基于排队中的请求数配置自定义指标的弹性扩缩容策略,使模型推理服务实例根据等待中的请求数动态扩缩容。通过以上方式,可以快速构建一个高性能、可观测、极致弹性的模型推理服务。

* 本文中图片来源于阿里云,若您有任何疑问或需要使用本文中图片,请联系阿里云。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
尼克斯时隔27年重返总决赛,对NBA联盟的收视来说,是一针强心剂

尼克斯时隔27年重返总决赛,对NBA联盟的收视来说,是一针强心剂

夜白侃球
2026-05-26 10:45:16
曝央视要价太高!抖音放弃世界杯分销版权 小红书赌博拿下2项权益

曝央视要价太高!抖音放弃世界杯分销版权 小红书赌博拿下2项权益

风过乡
2026-05-26 06:38:15
官方通报“维也纳酒店牙刷刷马桶”“全季酒店用客人牙刷洗杯子后放回”:约谈涉事酒店负责人,责令立即整改,将根据调查核实情况严肃处理

官方通报“维也纳酒店牙刷刷马桶”“全季酒店用客人牙刷洗杯子后放回”:约谈涉事酒店负责人,责令立即整改,将根据调查核实情况严肃处理

大风新闻
2026-05-26 11:12:07
五市党委主要领导调整

五市党委主要领导调整

上观新闻
2026-05-26 11:51:19
签了!湖人休赛期第一笔签约!詹姆斯回骑士的概率大增...

签了!湖人休赛期第一笔签约!詹姆斯回骑士的概率大增...

詹姆斯吧
2026-05-26 10:41:24
A股:大家要做好心理准备了,今天5.26,A股或将历史重演!

A股:大家要做好心理准备了,今天5.26,A股或将历史重演!

股侠指北针
2026-05-26 08:30:51
维尼修斯:我的世界杯号码是多少?不知道;但10号是内马尔的

维尼修斯:我的世界杯号码是多少?不知道;但10号是内马尔的

懂球帝
2026-05-25 23:47:05
橘玛丽引退作终登场,好友大槻响与波多野结衣温情送别

橘玛丽引退作终登场,好友大槻响与波多野结衣温情送别

吃瓜党二号头目
2026-05-26 09:23:35
一月八万不够花,李双江“赖”学校不退休,儿子改名出国后再作妖

一月八万不够花,李双江“赖”学校不退休,儿子改名出国后再作妖

一盅情怀
2026-05-16 20:12:47
雷霆酝酿选秀交易!瞄准天才内线布泽尔,搭档切特布局双塔时代!

雷霆酝酿选秀交易!瞄准天才内线布泽尔,搭档切特布局双塔时代!

听我说球
2026-05-26 09:28:40
德甲附加赛大冷!前冠军狼堡1-2遭绝杀降级,对手狂欢创7年纪录

德甲附加赛大冷!前冠军狼堡1-2遭绝杀降级,对手狂欢创7年纪录

体育知多少
2026-05-26 07:11:09
北极"尸体点"正在融化:数百年前的水手遗骨暴露于世

北极"尸体点"正在融化:数百年前的水手遗骨暴露于世

闪存猎手
2026-05-25 04:36:07
记者:由于美国拒绝接待,伊朗被迫将大本营设在墨西哥

记者:由于美国拒绝接待,伊朗被迫将大本营设在墨西哥

懂球帝
2026-05-26 07:14:05
2026年梅雨时间出炉!入梅出梅时间请收好,健脾祛湿,安稳过梅季

2026年梅雨时间出炉!入梅出梅时间请收好,健脾祛湿,安稳过梅季

三农雷哥
2026-05-25 17:20:03
乌克兰成功发射两颗卫星,2027年组建天基卫星网络

乌克兰成功发射两颗卫星,2027年组建天基卫星网络

史政先锋
2026-05-25 22:24:49
知名品牌创始人去世!他成功缔造全球零售帝国

知名品牌创始人去世!他成功缔造全球零售帝国

山东经济广播
2026-05-25 18:32:07
一顿饭就要花掉40万,四年敛财40亿,杭州土皇帝虞关荣有多嚣张

一顿饭就要花掉40万,四年敛财40亿,杭州土皇帝虞关荣有多嚣张

莫地方
2026-05-21 01:45:03
安妮·海瑟薇自曝左眼有10年基本看不见:我的左眼已经算是盲人

安妮·海瑟薇自曝左眼有10年基本看不见:我的左眼已经算是盲人

韩小娱
2026-05-25 20:26:53
尼克斯为了总决赛等待27年 总裁罗斯的“拼凑”成功了

尼克斯为了总决赛等待27年 总裁罗斯的“拼凑”成功了

仰卧撑FTUer
2026-05-26 11:52:51
随着尼克斯4-0横扫骑士,雷霆2-2马刺,总决赛最新夺冠概率出炉

随着尼克斯4-0横扫骑士,雷霆2-2马刺,总决赛最新夺冠概率出炉

小火箭爱体育
2026-05-26 10:54:16
2026-05-26 12:36:49
NVIDIA英伟达中国 incentive-icons
NVIDIA英伟达中国
英伟达(中国)官方账号
3529文章数 1453关注度
往期回顾 全部

科技要闻

今年秋季,麒麟芯片将首次落地"逻辑折叠"

头条要闻

男子称沃尔沃买了不到3年见了7次"小乌龟":不敢开了

头条要闻

男子称沃尔沃买了不到3年见了7次"小乌龟":不敢开了

体育要闻

上赛季差点降入英甲,下赛季要踢英超了

娱乐要闻

景甜被曝停工失联 富商索要2亿和解费

财经要闻

中国铝行业爆单 下一个“煤炭”大周期?

汽车要闻

启境GT7定档5月29日预售 提供三电机版本

态度原创

旅游
房产
健康
数码
手机

旅游要闻

枣庄市峄城区:漫山榴花红 赏花正当时

房产要闻

招商地产接盘碧桂园!海口这个烂尾豪宅,要彻底改命?

几百块一瓶的外泌体精华,涂脸上是“智商税”吗?

数码要闻

荣耀王飞:耳夹耳机不需要区分左右耳绝对是提升体验极好的功能

手机要闻

小米17T/Pro手机渲染图再曝,时隔4年重返印度市场

无障碍浏览 进入关怀版