Extend Inference Runtimes

目录

Introduction

本文档将逐步指导您如何添加新的推理运行时,以服务于大语言模型(LLM)或其他模型类型,如“图像分类”、“目标检测”、“文本分类”等。

Alauda AI 内置了“vLLM”推理引擎,通过“自定义推理运行时”,您可以引入更多推理引擎,例如 Seldon MLServerTriton inference server 等。

通过引入自定义运行时,您可以扩展平台对更多模型类型和 GPU 类型的支持,并针对特定场景优化性能,以满足更广泛的业务需求。

本节将演示如何通过自定义 XInfernece 推理运行时扩展当前 AI 平台,实现 LLM 部署并提供“OpenAI 兼容 API”。

Scenarios

当您遇到以下任一情况时,建议扩展 AI 平台推理服务运行时:

  • 支持新模型类型:您的模型当前默认推理运行时 vLLM 不原生支持。
  • 兼容其他类型 GPU:需要在配备 AMD 或华为昇腾等 GPU 的硬件上执行 LLM 推理。
  • 特定场景性能优化:某些推理场景下,新运行时(如 Xinference)可能比现有运行时提供更优的性能或资源利用率。
  • 自定义推理逻辑:需要引入自定义推理逻辑或依赖库,且难以在现有默认运行时中实现。

Prerequisites

开始之前,请确保满足以下条件:

  1. 您的 ACP 集群已部署且正常运行
  2. AI 平台版本为1.3 或更高
  3. 已准备好所需的推理运行时镜像。例如,Xinference 运行时镜像可能为 xprobe/xinference:v1.2.2(GPU)或 xprobe/xinference:v1.2.2-cpu(CPU)。
  4. 拥有集群管理员权限(用于创建 CRD 实例)。

Steps

创建推理运行时资源

您需要根据目标硬件环境(GPU/CPU/NPU)创建对应的推理运行时资源。

  1. 准备运行时 YAML 配置文件

    根据您要添加的运行时类型(例如 Xinference)及目标硬件环境,准备相应的 YAML 配置文件。以下是 Xinference 运行时在不同硬件环境下的示例:

  • GPU 运行时示例
    # 这是 Xinference GPU 运行时的示例 YAML
    apiVersion: serving.kserve.io/v1alpha1
    kind: ClusterServingRuntime
    metadata:
      name: aml-xinference-cuda-12.1 # 运行时资源名称
      labels:
        cpaas.io/runtime-class: xinference # 必需的运行时类型标签
        cpaas.io/accelerator-type: "nvidia"
        cpaas.io/cuda-version: "12.1"
      annotations:
        cpaas.io/display-name: xinference-cuda-12.1 # UI 中显示名称
    spec:
      containers:
      - name: kserve-container
        image: xprobe/xinference:v1.2.2  # 替换为您实际准备的 GPU 运行时镜像
        env:
        # 所有运行时均需,模型目录路径
        - name: MODEL_PATH
          value: /mnt/models/{{ index .Annotations "aml-model-repo" }}
        # 其他运行时可选参数 MODEL_UID
        - name: MODEL_UID 
          value: '{{ index .Annotations "aml-model-repo" }}'
        # Xinference 运行时必需参数 MODEL_ENGINE,其他运行时可省略
        - name: MODEL_ENGINE 
          value: "transformers"
        # Xinference 运行时必需参数,请根据模型家族设置,示例值:"llama" # 如 "llama"、"chatglm" 等
        - name: MODEL_FAMILY 
          value: ""
        command:
        - bash
        - -c
        - |
            set +e
            if [ "${MODEL_PATH}" == "" ]; then
                echo "Need to set MODEL_PATH!"
                exit 1
            fi
            if [ "${MODEL_ENGINE}" == "" ]; then
                echo "Need to set MODEL_ENGINE!"
                exit 1
            fi
            if [ "${MODEL_UID}" == "" ]; then
                echo "Need to set MODEL_UID!"
                exit 1
            fi
            if [ "${MODEL_FAMILY}" == "" ]; then
                echo "Need to set MODEL_FAMILY!"
                exit 1
            fi
    
            xinference-local --host 0.0.0.0 --port 8080 &
            PID=$!
            while [ true ];
            do
                curl http://127.0.0.1:8080/docs
                if [ $? -eq 0 ]; then
                    break
                else
                    echo "waiting xinference-local server to become ready..."
                    sleep 1
                fi
            done
    
            set -e
            xinference launch --model_path ${MODEL_PATH} --model-engine ${MODEL_ENGINE} -u ${MODEL_UID} -n ${MODEL_FAMILY} -e http://127.0.0.1:8080 $@
            xinference list -e http://127.0.0.1:8080
            echo "model load succeeded, waiting server process: ${PID}..."
            wait ${PID}
        # 添加此行以支持脚本中的 $@ 参数:
        # 详见:https://unix.stackexchange.com/questions/144514/add-arguments-to-bash-c
        - bash
        resources:
          limits:
            cpu: 2
            memory: 6Gi
          requests:
            cpu: 2
            memory: 6Gi
        startupProbe:
          httpGet:
            path: /docs
            port: 8080
            scheme: HTTP
          failureThreshold: 60 
          periodSeconds: 10
          timeoutSeconds: 10
      supportedModelFormats:
        - name: transformers # 运行时支持的模型格式
          version: "1"
    
    • 提示:请务必将 image 字段替换为您实际准备的运行时镜像路径。您也可以修改 annotations.cpaas.io/display-name 字段来自定义 AI 平台 UI 中运行时的显示名称。
  1. 应用 YAML 文件创建资源

    在具有集群管理员权限的终端执行以下命令,应用您的 YAML 文件以创建推理运行时资源:

    kubectl apply -f your-xinference-runtime.yaml
    TIP
    • 重要提示:请**结合上述示例,根据您的实际环境和推理需求创建/配置运行时。**示例仅供参考,您需调整镜像、资源 limitsrequests 等参数,确保运行时与您的模型及硬件环境兼容且高效运行。
    • 注意:只有在运行时资源创建完成后,才能在推理服务发布页面使用此自定义运行时!

发布 Xinference 推理服务并选择运行时

Xinference 推理运行时资源创建成功后,您可以在 AI 平台发布 LLM 推理服务时选择并配置该运行时。

  1. 配置模型的推理框架

    确保在即将发布的模型仓库模型详情页,通过“文件管理”元数据编辑功能选择了合适的框架。此处选择的框架参数值必须与您创建推理服务运行时时 supportedModelFormats 字段中包含的值匹配。请确保模型框架参数值在推理运行时的 supportedModelFormats 列表中

  2. 进入推理服务发布页面

    登录 AI 平台,进入“推理服务”或“模型部署”模块,点击“发布推理服务”。

  3. 选择 Xinference 运行时

    在推理服务创建向导中,找到“运行时”或“推理框架”选项,从下拉菜单或列表中选择您在步骤 1 中创建的 Xinference 运行时(如“Xinference CPU 运行时”或“Xinference GPU 运行时(CUDA)”)。

  4. 设置环境变量: Xinference 运行时需要特定环境变量才能正常工作。在推理服务配置页面,找到“环境变量”或“更多设置”部分,添加以下环境变量:

    • 环境变量参数说明

      参数名称说明
      MODEL_FAMILY必填。指定您部署的 LLM 模型家族类型。Xinference 通过此参数识别并加载对应的推理逻辑。例如,部署 Llama 3 模型时设置为 llama;部署 ChatGLM 模型时设置为 chatglm。请根据您的模型实际家族进行设置。
    • 示例

      • 变量名MODEL_FAMILY
      • 变量值llama(如果您使用的是 Llama 系列模型,详见文档。或者您可以运行 xinference registrations -t LLM 列出所有支持的模型家族。)