本文介绍“基于NVIDIA NIM快速部署LLM模型推理服务”的使用文档。
概述
NVIDIA NIM 是 NVIDIA AI Enterprise 的一部分, 是一套易于使用的预构建容器工具, 目的是帮助企业加速生成式 AI 的部署。它支持各种 AI 模型,可确保利用行业标准 API 在本地或云端进行无缝、可扩展的 AI 推理。本服务针对llama3-8b-instruct模型,基于NVIDIA NIM提供了一套开箱即用的方案,本方案可以快速构建一个高性能、可观测、灵活弹性的LLM模型推理服务
前提准备
使用NVIDIA NIM需要一个API Key, API Key是一个身份验证令牌, 从NVIDIA的NGC仓库下载模型和容器需要使用API Key进行身份验证, 只有正确的API Key才能保证部署成功。
本服务用到的API Key请到此链接申请,参考下图所示:
详情请参考 NVIDIA NIM 文档,生成 NVIDIA NGC API key,访问需要部署的模型镜像。
RAM账号所需权限
部署服务实例,需要对部分阿里云资源进行访问和创建操作。因此您的账号需要包含如下资源的权限。 说明:当您的账号是RAM账号时,才需要添加此权限
权限策略名称 | 备注 |
AliyunECSFullAccess | 管理云服务器服务(ECS)的权限 |
AliyunBSSReadOnlyAccess | 只读访问费用中心(BSS)的权限 |
AliyunCSFullAccess | 管理容器服务(CS)的权限 |
AliyunVPCFullAccess | 管理专有网络(VPC)的权限 |
AliyunROSFullAccess | 管理资源编排服务(ROS)的权限 |
AliyunSLBFullAccess | 管理负载均衡服务(SLB)的权限 |
AliyunComputeNestUserFullAccess | 管理计算巢服务(ComputeNest)的用户侧权限 |
部署流程
部署步骤
单击部署链接, 进入服务实例部署界面,根据界面提示,填写参数完成部署。
其中NVIDIA NGC API Key的设置就是前提准备中申请的值。
参数填写完成后可以看到对应询价明细,确认参数后点击下一步:确认订单。
确认订单完成后同意服务协议并点击立即创建进入部署阶段。
等待部署完成后就可以开始使用服务,进入服务实例详情查看使用说明。通过cURL发送HTTP请求访问推理服务,修改content的内容,即可自定义和推理服务交互的内容。
使用流程
根据服务实例详情页中使用说明的描述,发送请求到推理服务,例如在终端中使用cURL发送HTTP请求,修改content的内容,即可自定义和推理服务交互的内容。 如下图所示为与推理服务两次进行交互的请求和响应。
FAQ
部署卡到81%是什么原因?该怎么解决?
部署流程卡到81%大概率是部署的时候拉取镜像和模型失败了,需要到ACK集群里确定具体原因。以下是具体排查步骤和解决方案:
在计算巢服务实例->资源标签下找到Kubernetes集群,进去到ACK控制台查看集群状态
在任务中查看“arena-client-config-job”这个job的状态,看是否有成功的Pod, 有失败的Pod是正常的,一般在失败5个之后会有成功的,若一直没有成功的Pod,可点击进去查看Job的执行日志。
若上述有成功的Pod, 在无状态中查看“llama3-8b-instruct-predictor”的状态
查看Pod的事件,如果是以下报错,说明是API Key设置的不正确,或者API Key已经失效,导致镜像下载失败。
针对上述API Key失效的问题,需要按照前提准备章节中的说明,重新申请NVIDIA API Key, 并有两种解决方案:
方案一:删掉当前部署的服务实例,使用重新申请的NVIDIA API Key 重新部署新的服务实例,推荐此种方法,更加简单。
方案二:针对当前环境,手动修改集群中的相关配置,步骤如下
按照下图编辑Secret中“ngc-secret”和"nvidia-nim-secrets"中的相关配置,设置为重新申请的NVIDIA API Key。
在任务中点击“使用Yaml创建资源”
将以下内容粘贴进去并点击创建
apiVersion: batch/v1 kind: Job metadata: name: arena-client-config-job-1 namespace: default spec: template: metadata: name: arena-client-config-job-1 spec: containers: - args: - > # 输出job日志 set -x cd ~ mkdir -p ~/.kube echo '' | base64 -d >> ~/.kube/config #安装Arena 客户端 wget 'https://computenest-artifacts-cn-hangzhou.oss-cn-hangzhou-internal.aliyuncs.com/1853370294850618/cn-beijing/1728874973220/arena-installer-0.9.16-881780f-linux-amd64.tar.gz' -O arena-installer-0.9.16-881780f-linux-amd64.tar.gz tar -xvf arena-installer-0.9.16-881780f-linux-amd64.tar.gz cd arena-installer bash install.sh --only-binary #部署KServe推理服务 arena serve delete 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=4 \ --memory=16Gi \ --share-memory=16Gi \ --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 command: - /bin/sh - '-c' - '--' image: >- compute-nest-registry.cn-hangzhou.cr.aliyuncs.com/public/dtzar/helm-kubectl:3.12.0 imagePullPolicy: IfNotPresent name: arena-client-config-job resources: {} terminationMessagePath: /dev/termination-log terminationMessagePolicy: File dnsPolicy: ClusterFirst restartPolicy: Never schedulerName: default-scheduler securityContext: {} serviceAccount: arena-client-sa serviceAccountName: arena-client-sa
观察无状态中“llama3-8b-instruct-predictor”的状态,启动成功后就是部署成功了。