基于NVIDIA NIM快速部署LLM模型推理服务

更新时间:2024-10-14 11:08:28

本文介绍“基于NVIDIA NIM快速部署LLM模型推理服务”的使用文档。

概述

NVIDIA NIM 是 NVIDIA AI Enterprise 的一部分, 是一套易于使用的预构建容器工具, 目的是帮助企业加速生成式 AI 的部署。它支持各种 AI 模型,可确保利用行业标准 API 在本地或云端进行无缝、可扩展的 AI 推理。本服务针对llama3-8b-instruct模型,基于NVIDIA NIM提供了一套开箱即用的方案,本方案可以快速构建一个高性能、可观测、灵活弹性的LLM模型推理服务

前提准备

使用NVIDIA NIM需要一个API Key, API Key是一个身份验证令牌, 从NVIDIANGC仓库下载模型和容器需要使用API Key进行身份验证, 只有正确的API Key才能保证部署成功。

本服务用到的API Key请到此链接申请,参考下图所示:

image

详情请参考 NVIDIA NIM 文档,生成 NVIDIA NGC API key,访问需要部署的模型镜像。

RAM账号所需权限

部署服务实例,需要对部分阿里云资源进行访问和创建操作。因此您的账号需要包含如下资源的权限。 说明:当您的账号是RAM账号时,才需要添加此权限

权限策略名称

备注

权限策略名称

备注

AliyunECSFullAccess

管理云服务器服务(ECS)的权限

AliyunBSSReadOnlyAccess

只读访问费用中心(BSS)的权限

AliyunCSFullAccess

管理容器服务(CS)的权限

AliyunVPCFullAccess

管理专有网络(VPC)的权限

AliyunROSFullAccess

管理资源编排服务(ROS)的权限

AliyunSLBFullAccess

管理负载均衡服务(SLB)的权限

AliyunComputeNestUserFullAccess

管理计算巢服务(ComputeNest)的用户侧权限

部署流程

部署步骤

  1. 单击部署链接, 进入服务实例部署界面,根据界面提示,填写参数完成部署。

    1. 其中NVIDIA NGC API Key的设置就是前提准备中申请的值。

image

  1. 参数填写完成后可以看到对应询价明细,确认参数后点击下一步:确认订单。

image

  1. 确认订单完成后同意服务协议并点击立即创建进入部署阶段。

  2. 等待部署完成后就可以开始使用服务,进入服务实例详情查看使用说明。通过cURL发送HTTP请求访问推理服务,修改content的内容,即可自定义和推理服务交互的内容。

image

使用流程

根据服务实例详情页中使用说明的描述,发送请求到推理服务,例如在终端中使用cURL发送HTTP请求,修改content的内容,即可自定义和推理服务交互的内容。 如下图所示为与推理服务两次进行交互的请求和响应。

image

FAQ

部署卡到81%是什么原因?该怎么解决?

部署流程卡到81%大概率是部署的时候拉取镜像和模型失败了,需要到ACK集群里确定具体原因。以下是具体排查步骤和解决方案:

  • 在计算巢服务实例->资源标签下找到Kubernetes集群,进去到ACK控制台查看集群状态

  • 在任务中查看“arena-client-config-job”这个job的状态,看是否有成功的Pod, 有失败的Pod是正常的,一般在失败5个之后会有成功的,若一直没有成功的Pod,可点击进去查看Job的执行日志。

image

  • 若上述有成功的Pod, 在无状态中查看“llama3-8b-instruct-predictor”的状态

image

查看Pod的事件,如果是以下报错,说明是API Key设置的不正确,或者API Key已经失效,导致镜像下载失败。

image

  • 针对上述API Key失效的问题,需要按照前提准备章节中的说明,重新申请NVIDIA API Key, 并有两种解决方案:

    • 方案一:删掉当前部署的服务实例,使用重新申请的NVIDIA API Key 重新部署新的服务实例,推荐此种方法,更加简单。

    • 方案二:针对当前环境,手动修改集群中的相关配置,步骤如下

      • 按照下图编辑Secret中“ngc-secret”和"nvidia-nim-secrets"中的相关配置,设置为重新申请的NVIDIA API Key。

        imageimage

      • 在任务中点击“使用Yaml创建资源”

        image

        将以下内容粘贴进去并点击创建

        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

        image

      • 观察无状态中“llama3-8b-instruct-predictor”的状态,启动成功后就是部署成功了。

  • 本页导读 (1)
  • 概述
  • 前提准备
  • RAM账号所需权限
  • 部署流程
  • 部署步骤
  • 使用流程
  • FAQ
  • 部署卡到81%是什么原因?该怎么解决?
AI助理

点击开启售前

在线咨询服务

你好,我是AI助理

可以解答问题、推荐解决方案等