昇腾社区首页
中文
注册
开发者
下载

通过脚本一键式部署使用

用户在K8s集群中部署多个相关联的推理任务,手动编写和维护大量的K8s YAML文件效率低下且容易出错。为此,MindCluster提供一个自动化脚本参考设计,替代繁琐的手动操作。用户只需提供基本的应用信息(如应用名、镜像版本、副本数等),脚本即可自动生成所有必要的、符合规范的K8s YAML文件,并直接部署到指定集群。同时,MindCluster提供一种简单的方式(如指定同一个应用名)一键删除所有相关资源。

当前脚本仅支持P/D分离部署。

前提条件

  • MindCluster、AIBrix相关组件安装完成。
  • 环境已安装Python,并可联网下载依赖包。
  • 存在KubeConfig文件,可以与K8s集群正常通信。

操作步骤

  1. 从mindcluster-deploy仓库获取源码,进入“k8s-deploy-tool”目录。
    git clone https://gitcode.com/Ascend/mindcluster-deploy.git && cd mindcluster-deploy/k8s-deploy-tool
  2. (可选)创建并激活Python虚拟环境。该操作可以使得不同Python项目使用不同版本的库而互不干扰。
    python -m venv k8s-deploy-tool && source k8s-deploy-tool/bin/activate

    根据环境实际情况选择使用Python或Python3。

  3. 安装依赖。
    pip install -r requirements.txt
  4. (可选)修改实例启动脚本。用户可根据模型实际情况进行修改。
    1. 打开“example/scripts/start_server.sh”文件。
      vi example/scripts/start_server.sh
    2. 按“i”进入编辑模式,根据模型实际情况,修改vLLM进程启动命令,例如max-model-len、max-num-batched-tokens等。
    3. 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
  5. (可选)复制启动脚本到主机其他目录或集群其他节点。如果用户环境为单机环境,可以跳过该步骤。如果用户环境包含共享存储,也可以将脚本文件复制到共享存储,并将共享存储挂载给推理服务。

    scripts文件夹中默认的代理脚本会开启故障隔离功能,若无需该功能,请使用原生代理脚本替换scripts文件夹中的代理脚本。

    cp example/scripts/*  <target_dir> 
    scp example/scripts/* <user>@<IP>:<target_dir>
  6. (可选)编辑YAML模板,配置模型、脚本挂载路径。用户可以根据模型和脚本实际路径配置YAML模板。
    1. 打开“src/templates/aibrix/stormservice.yaml.j2”文件。
      vi src/templates/aibrix/stormservice.yaml.j2
    2. 按“i”进入编辑模式,修改容器中模型存放目录。
      volumeMounts:
      - name: model
      mountPath: /mnt/models
      volumes:                  #修改挂载的volume
      - name: model             #设置为模型实际存放目录
      hostPath:
      path: /mnt/models
      - name: scripts           #设置为启动脚本实际存放目录
      hostPath:
      path: /scripts
    3. 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
  7. 编辑用户配置文件“config/stormservice-config.yaml”
    1. 打开“config/stormservice-config.yaml”文件。
      vi config/stormservice-config.yaml
    2. 按“i”进入编辑模式,按实际情况修改文件中的字段。
    3. 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
    • “dp_size”需要为“podGroupSize”的整数倍。
    • “dp_size”设置为“1”时,“distributed_dp”只能为“false”,大于“1”时才能设置为“true”
  8. (可选)创建任务名称空间,vllm-test为“config/stormservice-config.yaml”设置的“app_namespace”。如果“app_namespace”“default”或未设置,可以不创建名称空间。
    kubectl create ns vllm-test
  9. 设置服务框架类型为aibrix
    export SERVING_FRAMEWORK=aibrix
  10. 部署推理任务。
    python main.py deploy -c config/stormservice-config.yaml

    根据环境实际情况使用Python或Python3。参数说明如下:

    • -c, --config:配置文件路径,必填。
    • -k, --kubeconfig:KubeConfig文件路径,选填。默认值为~/.kube/config。
    • --dry-run:试运行(不实际部署,展示生成的YAML),选填。
  11. 查看任务运行状态。
    python main.py status -n my-test -ns default

    参数说明如下:

    • -n, --app-name:应用名称,必填。
    • -ns, --namespace:应用命名空间,选填。默认值为"default" 。
    • -k, --kubeconfig:KubeConfig文件路径,选填。默认值为~/.kube/config。

    用户也可以使用kubectl命令行工具查看任务运行状态。

  12. 新建终端窗口,在当前K8s集群的节点中执行以下命令,访问推理服务。若请求成功返回,表示推理服务部署成功。
    curl http://<routing-podip>:8080/v1/completions \
    -H "Content-Type: application/json" \
    -d '{
    "model": "<模型名称>",
    "prompt": "Who are you?",
    "max_tokens": 10,
    "temperature": 0
    }'

    <routing-podip>为Routing Pod的IP地址,可以通过以下命令查看。

    kubectl get pod -A -o wide
  13. (可选)删除推理任务。若用户需要删除任务,可以执行该步骤。
    python main.py delete -n my-test -ns default

    参数说明如下:

    • -n, --app-name:应用名称,必填。
    • -ns, --namespace:应用命名空间,选填。默认值为"default" 。
    • -k, --kubeconfig:KubeConfig文件路径,选填。默认值为~/.kube/config。