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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 本文介绍了在阿里云容器服务 ACK 上部署 NVIDIA NIM,结合云原生 AI 套件和 KServe 快速构建高性能模型推理服务的方法。通过阿里云 Prometheus 和 Grafana 实现实时监控,并基于排队请求数配置弹性扩缩容策略,提升服务稳定性和效率。文章提供了详细的部署步骤和示例,帮助读者快速搭建和优化模型推理服务。

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


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


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


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


阿里云云市场与计算巢一键部署

在阿里云云市场,提供了组件的一键部署服务:https://market.aliyun.com/products/201214006/cmgj00067281.html

image.png


方案介绍


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

640.png


本文将介绍在 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/


2. 创建 imagePullSecret,用于从 NGC 私有仓库拉取 NIM 镜像。

export NGC_API_KEY=<your-ngc-api-key>

kubectl create secret docker-registry ngc-secret \

--docker-server=nvcr.io\

--docker-username='$oauthtoken'\

--docker-password=${NGC_API_KEY}


3. 创建 nvidia-nim-secret,用于在容器内访问 NGC 私有仓库,参考 nim-deploy 部署文档:

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

kubectl apply -f-<<EOF

apiVersion: v1

kind: Secret

metadata:

 name: nvidia-nim-secrets

stringData:

 NGC_API_KEY: <your-ngc-api-key>

EOF


4. 为目标集群配置存储卷 PV 和存储声明 PVC,后续模型文件将会下载到创建的共享存储中。具体操作,请参见使用 NAS 静态存储卷:

https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/mount-statically-provisioned-nas-volumes


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

640 (1).png


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

640 (2).png


5. 执行下列命令,部署一个 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 successfully

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


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


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

arena serve get llama3-8b-instruct


预期输出:

Name:       llama3-8b-instruct

Namespace:  default

Type:       KServe

Version:    1

Desired:    1

Available:  1

Age:        24m

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

Port:       :80

GPU:        1



Instances:

 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


7. 接下来就可以访问推理服务了,可通过使用获取到的 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}}


输出结果表明,已经能够通过 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

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

  3. 导入 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

640 (3).png

成功导入后,dashboard 示例如下

640 (4).png

弹性伸缩


在部署与管理 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

  2. 在 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 则进行扩容。


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

apiVersion: autoscaling/v2

kind: HorizontalPodAutoscaler

metadata:

 name: llama3-8b-instruct-hpa

 namespace: default

spec:

 # 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


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

kubectl apply -f hpa.yam


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

kubectl  get hpa llama3-8b-instruct-hpa


预期输出:

NAME                     REFERENCE                                 TARGETS   MINPODS   MAXPODS   REPLICAS   AGE

llama3-8b-instruct-hpa   Deployment/llama3-8b-instruct-predictor   0/10      1         3         1          34s


  1. 执行以下命令,对服务进行压测。
    说明 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


预期输出包含如下内容:

Events:

 Type    Reason             Age   From                       Message

 ----    ------             ----  ----                       -------

 Normal  SuccessfulRescale  52s   horizontal-pod-autoscaler  New size: 3; reason: pods metric num_requests_waiting above target


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


总结


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


相关链接:

1、基于NVIDIA NIM快速部署LLM模型推理服务:https://market.aliyun.com/products/201214006/cmgj00067281.html

2、NVIDIA AIE-License授权:https://market.aliyun.com/products/201214006/cmfw00067311.html







相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
12天前
|
存储 机器学习/深度学习 算法
​​LLM推理效率的范式转移:FlashAttention与PagedAttention正在重塑AI部署的未来​
本文深度解析FlashAttention与PagedAttention两大LLM推理优化技术:前者通过分块计算提升注意力效率,后者借助分页管理降低KV Cache内存开销。二者分别从计算与内存维度突破性能瓶颈,显著提升大模型推理速度与吞吐量,是当前高效LLM系统的核心基石。建议收藏细读。
149 0
|
5月前
|
机器学习/深度学习 存储 缓存
加速LLM大模型推理,KV缓存技术详解与PyTorch实现
大型语言模型(LLM)的推理效率是AI领域的重要挑战。本文聚焦KV缓存技术,通过存储复用注意力机制中的Key和Value张量,减少冗余计算,显著提升推理效率。文章从理论到实践,详细解析KV缓存原理、实现与性能优势,并提供PyTorch代码示例。实验表明,该技术在长序列生成中可将推理时间降低近60%,为大模型优化提供了有效方案。
960 15
加速LLM大模型推理,KV缓存技术详解与PyTorch实现
|
19天前
|
机器学习/深度学习 人工智能 前端开发
解决推理能力瓶颈,用因果推理提升LLM智能决策
从ChatGPT到AI智能体,标志着AI从对话走向自主执行复杂任务的能力跃迁。AI智能体可完成销售、旅行规划、外卖点餐等多场景任务,但其发展受限于大语言模型(LLM)的推理能力。LLM依赖统计相关性,缺乏对因果关系的理解,导致在非确定性任务中表现不佳。结合因果推理与内省机制,有望突破当前AI智能体的推理瓶颈,提升其决策准确性与自主性。
106 6
解决推理能力瓶颈,用因果推理提升LLM智能决策
|
5月前
|
人工智能 自然语言处理 测试技术
能够双向推理的LLM!Dream-7B:港大联合华为开源的扩散推理模型,能够同时考虑前后文信息
Dream-7B是由香港大学与华为诺亚方舟实验室联合研发的开源扩散大语言模型,采用独特的掩码扩散范式,在文本生成、数学推理和代码编写等任务中展现出卓越性能。
260 3
能够双向推理的LLM!Dream-7B:港大联合华为开源的扩散推理模型,能够同时考虑前后文信息
|
21天前
|
存储 Kubernetes 网络安全
关于阿里云 Kubernetes 容器服务(ACK)添加镜像仓库的快速说明
本文介绍了在中国大陆地区因网络限制无法正常拉取 Docker 镜像的解决方案。作者所在的阿里云 Kubernetes 集群使用的是较旧版本的 containerd(1.2x),且无法直接通过 SSH 修改节点配置,因此采用了一种无需更改 Kubernetes 配置文件的方法。通过为 `docker.io` 添加 containerd 的镜像源,并使用脚本自动修改 containerd 配置文件中的路径错误(将错误的 `cert.d` 改为 `certs.d`),最终实现了通过多个镜像站点拉取镜像。作者还提供了一个可重复运行的脚本,用于动态配置镜像源。虽然该方案能缓解镜像拉取问题,
173 2
|
21天前
|
存储 缓存 负载均衡
LLM推理成本直降60%:PD分离在大模型商业化中的关键价值
在LLM推理中,Prefill(计算密集)与Decode(访存密集)阶段特性不同,分离计算可提升资源利用率。本文详解vLLM框架中的PD分离实现及局限,并分析Dynamo、Mooncake、SGLang等主流方案,探讨KV缓存、传输机制与调度策略,助力LLM推理优化。建议点赞收藏,便于后续查阅。
419 1
|
2月前
|
人工智能 自然语言处理 API
AI-Compass LLM推理框架+部署生态:整合vLLM、SGLang、LMDeploy等顶级加速框架,涵盖本地到云端全场景部署
AI-Compass LLM推理框架+部署生态:整合vLLM、SGLang、LMDeploy等顶级加速框架,涵盖本地到云端全场景部署
AI-Compass LLM推理框架+部署生态:整合vLLM、SGLang、LMDeploy等顶级加速框架,涵盖本地到云端全场景部署
|
3月前
|
人工智能 监控 测试技术
云上AI推理平台全掌握 (1):PAI-EAS LLM服务一键压测
在AI技术飞速发展的今天,大语言模型(LLM)、多模态模型等前沿技术正深刻改变行业格局。推理服务是大模型从“实验室突破”走向“产业级应用”的必要环节,需直面高并发流量洪峰、低延时响应诉求、异构硬件优化适配、成本精准控制等复杂挑战。 阿里云人工智能平台 PAI 致力于为用户提供全栈式、高可用的推理服务能力。在本系列技术专题中,我们将围绕分布式推理架构、Serverless 弹性资源全球调度、压测调优和服务可观测等关键技术方向,展现 PAI 平台在推理服务侧的产品能力,助力企业和开发者在 AI 时代抢占先机,让我们一起探索云上 AI 推理的无限可能,释放大模型的真正价值!
|
5月前
|
机器学习/深度学习 人工智能 算法
RAGEN:RL训练LLM推理新范式!开源强化学习框架让Agent学会多轮决策
RAGEN是一个基于StarPO框架的开源强化学习系统,通过马尔可夫决策过程形式化Agent与环境的交互,支持PPO、GRPO等多种优化算法,显著提升多轮推理训练的稳定性。
531 5
RAGEN:RL训练LLM推理新范式!开源强化学习框架让Agent学会多轮决策

相关产品

  • 容器服务Kubernetes版
  • 推荐镜像

    更多