在ACK中快速体验大语言模型推理服务

ACK托管集群Pro提供了测试环境和生产环境部署方案,在无需管理底层硬件与依赖的前提下,快速验证大模型的推理能力。解决开发者在本地验证大语言模型时面临的GPU资源不足和环境配置复杂等问题。

适用范围

  • 集群版本为1.22及以上,GPU节点显存需为16GB及以上的ACK托管集群Pro

  • 设置NVIDIA驱动为535及以上版本,本示例为GPU节点池添加标签ack.aliyun.com/nvidia-driver-version,驱动版本为550.144.03

测试环境部署

使用Arena快速部署qwen/Qwen1.5-4B-Chat,适用于测试场景,耗时约需15分钟。

  1. 安装Arena客户端

  2. 通过Arena部署一个自定义类型的服务,并通过--image参数指定用于部署服务的容器镜像。更多参数说明,请参见部署命令参数说明

    由于ModelScope模型文件将下载至容器内,请确保GPU节点具备至少30GB的可用磁盘空间。
    arena serve custom \
        --name=modelscope \
        --version=v1 \
        --gpus=1 \
        --replicas=1 \
        --restful-port=8000 \
        --readiness-probe-action="tcpSocket" \
        --readiness-probe-action-option="port: 8000" \
        --readiness-probe-option="initialDelaySeconds: 30" \
        --readiness-probe-option="periodSeconds: 30" \
        --image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/quick-deploy-llm:v1 \
        "MODEL_ID=qwen/Qwen1.5-4B-Chat python3 server.py"

    以下输出表明与推理服务modelscope-v1相关的Kubernetes资源已成功创建:

    service/modelscope-v1 created
    deployment.apps/modelscope-v1-custom-serving created
    INFO[0002] The Job modelscope has been submitted successfully
    INFO[0002] You can run `arena serve get modelscope --type custom-serving -n default` to check the job status
  3. 查看推理服务的详细信息。

    模型下载需要约10分钟,期间Pod状态显示为ContainerCreating。
    arena serve get modelscope

    输出PodRunning状态,表明modelscope推理服务已就绪并正常运行。

生产环境部署

对于生产级部署场景,推荐采用OSS静态存储卷预加载模型的方式,避免每次Pod启动时重复下载大模型文件(超过10GB),从而显著缩短冷启动时间、降低外网带宽消耗,并提升服务稳定性。

步骤一:下载模型文件

  1. 下载模型文件到本地。

    1. 安装Git、Git LFS(Large File Support)插件。

      macOS
      1. 安装Git。

        官方维护的 macOS Git 安装程序可以在 Git 官方网站下载。
        brew install git
      2. 安装Git LFS(Large File Support)插件拉取大文件内容。

        brew install git-lfs
      Windows
      1. 安装Git。

        可在Git 官方网站下载合适版本并安装。

      2. 安装Git LFS(Large File Support)插件拉取大文件内容。

        目前lfs已经集成在了Git for Windows 中,直接下载和使用最新版本的Windows Git即可。

      Linux
      1. 安装Git。

        RedHat系列的Linux系统为例,其余系统安装,请参见Git 官方网站

        yum install git
      2. 安装Git LFS(Large File Support)插件拉取大文件内容。

        yum install git-lfs
    2. 下载Qwen1.5-4B-Chat模型。

      GIT_LFS_SKIP_SMUDGE=1 git clone https://www.modelscope.cn/qwen/Qwen1.5-4B-Chat.git
      cd Qwen1.5-4B-Chat
      git lfs pull
  2. Qwen1.5-4B-Chat模型文件上传至OSS。

    1. 安装并配置ossutil,用于管理OSS资源。

    2. 创建Bucket存储空间。

      为加快模型拉取速度,建议将Bucket和集群地域保持一致。
      ossutil mb oss://<Your-Bucket-Name>
    3. OSS创建名为Qwen1.5-4B-Chat的目录。

      ossutil mkdir oss://<Your-Bucket-Name>/Qwen1.5-4B-Chat
    4. 上传模型文件至OSS。

      ossutil cp -r ./Qwen1.5-4B-Chat oss://<Your-Bucket-Name>/Qwen1.5-4B-Chat
  3. 配置存储卷PV。

    1. 登录容器服务管理控制台单击目标集群名称,选择存储 > 存储卷

    2. 存储卷页面,单击创建创建存储卷对话框中配置参数。参数配置完成后,单击创建

      • 存储卷类型OSS名称llm-model总量20Gi访问模式ReadOnlyMany访问证书为选择新建保密字典。

      • 可选参数-o umask=022 -o max_stat_cache_size=0 -o allow_otherBucket ID选择BucketOSS Path/Qwen1.5-4B-Chat访问域名为公网域名。

  4. 配置存储声明PVC。

    1. 在集群详情页,选择存储 > 存储声明

    2. 创建存储声明页面中,填写界面参数。

      存储声明类型OSS名称llm-model分配模式为已有存储卷;已有存储卷为上一步创建的存储卷llm-model总量20Gi

步骤二:部署推理服务

  1. 安装Arena客户端

  2. 通过Arena部署一个自定义类型的服务,并通过--data参数挂载包含模型文件的PVC。更多参数说明,请参见部署命令参数说明

    arena serve custom \
        --name=modelscope \
        --version=v1 \
        --gpus=1 \
        --replicas=1 \
        --restful-port=8000 \
        --readiness-probe-action="tcpSocket" \
        --readiness-probe-action-option="port: 8000" \
        --readiness-probe-option="initialDelaySeconds: 30" \
        --readiness-probe-option="periodSeconds: 30" \
        --data=llm-model:/Qwen1.5-4B-Chat \
        --image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/quick-deploy-llm:v1 \
        "MODEL_ID=/Qwen1.5-4B-Chat python3 server.py"

    以下输出表明推理服务已成功提交:

    service/modelscope-v1 created
    deployment.apps/modelscope-v1-custom-serving created
    INFO[0001] The Job modelscope has been submitted successfully
    INFO[0001] You can run `arena serve get modelscope --type custom-serving -n default` to check the job status
  3. 查看推理服务详细信息。

    arena serve get modelscope

    输出PodRunning状态,表明推理服务已就绪并正常运行。

验证推理服务

  1. 为推理服务建立端口转发。

    重要

    请注意kubectl port-forward建立的端口转发不具备生产级别的可靠性、安全性和扩展性,因此仅适用于开发和调试目的,不适合在生产环境使用。更多关于Kubernetes集群内生产可用的网络方案的信息,请参见Ingress管理

    kubectl port-forward svc/modelscope-v1 8000:8000

    预期输出:

    Forwarding from 127.0.0.1:8000 -> 8000
    Forwarding from [::1]:8000 -> 8000
  2. 新建一个终端窗口,向推理服务发送模型推理请求。

    curl -X POST http://localhost:8000/generate \
      -H "Content-Type: application/json" \
      -d '{
        "text_input": "什么是人工智能?人工智能是", 
        "parameters": {
          "stream": false, 
          "temperature": 0.9, 
          "seed": 10
        }
      }'

    成功调用后,将返回包含模型推理结果的输出:

    {"model_name":"/Qwen1.5-4B-Chat","text_output":"什么是人工智能?人工智能是计算机科学的一个分支,它研究如何使计算机具有智能行为。"}

(可选)清理环境

测试完成后,可删除已部署的推理服务以释放资源。

  • 清理已部署的推理服务。

    arena serve del modelscope
  • 清理已创建的PVPVC。

    kubectl delete pvc llm-model
    kubectl delete pv llm-model

部署命令参数说明

参数

说明

示例值

serve custom

Arena子命令。表示创建一个自定义的模型服务,而不是使用预设的类型(如 tfservingtriton)。

(无)

--name

服务名称。为要部署的服务指定一个唯一的名称。名称将用于后续的管理操作,如查看日志、删除服务等。

modelscope

--version

服务版本。为服务指定一个版本号,方便进行版本管理和灰度发布等操作。

v1

--gpus

GPU资源。为每个服务实例(Pod)分配的GPU卡数量。如果模型需要GPU进行推理,则必须指定此参数。

1

--replicas

副本数量。指定服务的实例(Pod)数量。增加副本数可以提高服务的并发处理能力和可用性。

1

--restful-port

RESTful端口。指定服务对外暴露的RESTful API端口号,用于接收推理请求。

8000

--readiness-probe-action

就绪探针类型。设置Kubernetes的就绪探针(Readiness Probe)的检查方式,用于判断容器是否准备好接收流量。

tcpSocket

--readiness-probe-action-option

探针类型选项。为上述探针类型提供具体参数。对于tcpSocket,指定要检查的端口。

port: 8000

--readiness-probe-option

探针其他选项。设置就绪探针的更多行为参数,可以多次使用。示例设置了初始延迟和检查周期。

initialDelaySeconds: 30
periodSeconds: 30

--data

数据卷挂载。将一个持久化数据卷(PVC)挂载到容器的指定路径。格式为 PVC名称:挂载路径。常用于挂载模型文件。

llm-model:/Qwen1.5-4B-Chat

--image

容器镜像。指定用于部署服务的容器镜像的完整地址,是服务运行环境的核心。

kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/quick-deploy-llm:v1

[COMMAND]

启动命令。指定容器启动后要执行的命令。设置环境变量 MODEL_ID 并启动了 server.py 脚本。

"MODEL_ID=/Qwen1.5-4B-Chat python3 server.py"

相关文档