使用ACS快速构建大语言模型数据存储卷

更新时间:
复制为 MD 格式

大语言模型因其庞大的参数量,需要占用大量的磁盘空间来存储模型文件,建议您创建NAS存储卷或OSS存储卷来持久化存储模型文件。本文将介绍如何使用ACS快速构建大语言模型的数据存储卷。

使用前准备

在创建数据存储卷之前,请先创建ACS集群。请记录集群的VPC ID和控制面交换机ID,后续创建存储卷时需要使用。

NAS存储卷

由于大语言模型文件体积较大,每次下载耗时较长,建议将模型数据持久化存储。

步骤一:创建StorageClass

  1. 容器计算服务控制台中选择使用NAS存储卷的集群,进入工作负载 > 自定义资源 > 资源定义 > 使用YAML创建资源

  2. 输入如下YAML创建StorageClass。

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: nas-llm-sc
    mountOptions:
    - nolock,tcp,noresvport
    - vers=3
    parameters:
      volumeAs: filesystem
      fileSystemType: standard
      storageType: Performance
      regionId: cn-wulanchabu
      zoneId: cn-wulanchabu-a
      vpcId: "vpc-2ze2fxn6popm8c2mzm****" #需要使用NAS存储卷的集群vpc ID,可见本文的使用前准备章节
      vSwitchId: "vsw-2zwdg25a2b4y5juy****" #需要使用NAS存储卷的集群vSwitch ID,可见本文的使用前准备章节
      accessGroupName: DEFAULT_VPC_GROUP_NAME
      deleteVolume: "false"
    provisioner: nasplugin.csi.alibabacloud.com
    如果您想了解更多相关参数,请参见动态挂载NAS存储卷

步骤二:创建PVC

  1. 工作负载 > 自定义资源 > 资源定义 > 使用YAML创建资源,输入如下YAML创建PVC。请根据模型大小确认PVC的容量,如Qwen2.5-7B模型需要20GiB容量。

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: nas-llm-pvc
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: nas-llm-sc
      resources:
        requests:
          storage: 30Gi

步骤三:创建临时工作负载并挂载NAS

  1. 创建一个临时工作负载挂载NAS存储卷。在工作负载 > 无状态 > 使用YAML创建资源中,输入如下YAML,单击创建

    该工作负载将创建一个临时Pod,用于下载模型文件至Pod目录中,该目录挂载了实际的NAS存储。模型文件下载完成后,可删除该工作负载(不会删除NAS中的模型文件),减少资源浪费。
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nas-test
      labels:
        app: nas-ai-model-download
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nas-ai-model-download
      template:
        metadata:
          labels:
            app: nas-ai-model-download
        spec:
          containers:
            - command:
                - sh
                - -c
                - sleep infinity;
              name: nas-ai-model-download
              image: ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/base:ubuntu24.04-py312-optimised
              resources:
                limits:
                  cpu: 8
                  memory: 32G
                requests:
                  cpu: 8
                  memory: 32G
              ports:
                - containerPort: 80
              volumeMounts:
                - name: pvc-nas
                  mountPath: /data
          volumes:
            - name: pvc-nas
              persistentVolumeClaim:
                claimName: nas-llm-pvc

步骤四:拉取大语言模型文件

  1. 工作负载 > 无状态中,单击刚创建的工作负载nas-test,在容器组中找到Pod,单击终端进入Pod内部。

  2. 执行ls /data命令,确认当前目录为空。

  3. 依次执行如下命令,下载相应模型文件,本文以Qwen2.5-7B为例。

    pip install modelscope
    modelscope download --model Qwen/Qwen2.5-7B-Instruct --local_dir /data/Qwen2.5-7B-Instruct
  4. 下载完成Qwen2.5-7B-Instruct模型数据后,再次执行ls /data命令,确认模型文件已下载成功。

步骤五:释放工作负载资源

  1. 完成模型文件下载后,可关闭终端页面,在工作负载 > 无状态中,勾选相应工作负载(nas-test),单击批量删除

    后续如需使用下载的模型数据只需在工作负载的YAML挂载本次创建的NAS存储卷即可。

OSS存储卷

OSS存储支持静态挂载方式,详情可见使用OSS静态存储卷

步骤一:创建OSS bucket

  1. 登录OSS控制台,选择Bucket列表 > 创建Bucket,创建Bucket资源。为保证性能最佳,建议将Bucket和集群放在同一个地域。

步骤二:创建PV

  1. 登录容器计算服务控制台,选择要使用的集群。在工作负载 > 自定义资源 > 资源定义 > 使用YAML创建资源,使用以下YAML创建PV。

    apiVersion: v1
    kind: Secret
    metadata:
      name: oss-secret
      namespace: default
    stringData:
      akId: <your AccessKey ID> #填写OSS Bucket授权的AK ID
      akSecret: <your AccessKey Secret> #填写OSS Bucket授权的AK Secret
    ---
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: oss-pv
      labels:
        alicloud-pvname: oss-pv
    spec:
      storageClassName: test 
      capacity:
        storage: 30Gi
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      csi:
        driver: ossplugin.csi.alibabacloud.com
        volumeHandle: oss-pv
        nodePublishSecretRef:
          name: oss-secret
          namespace: default
        volumeAttributes:
          bucket: "<your OSS Bucket Name>"
          url: "<your OSS Bucket Endpoint>"
          otherOpts: "-o max_stat_cache_size=0 -o allow_other"

    PV的相关参数说明如下。

    参数

    说明

    alicloud-pvname

    PV的标签。用于绑定PVC。

    storageClassName

    该配置仅用于绑定PVC,无需关联实际的StorageClass。

    storage

    OSS存储卷的容量大小。

    说明

    OSS静态卷的容量仅起声明效果,实际容量不受限制,可使用量以OSS控制台显示为准。

    accessModes

    访问模式。

    persistentVolumeReclaimPolicy

    回收策略。

    driver

    驱动类型。此处配置为ossplugin.csi.alibabacloud.com,表示使用阿里云OSS CSI插件。

    volumeHandle

    PV的唯一标识符,与metadata.name保持一致。

    nodePublishSecretRef

    从指定的Secret中获取AccessKey,用于授权认证。

    bucket

    OSS Bucket的名称。请使用实际的OSS Bucket名称替换bucket的取值。

    url

    OSS Bucket的接入域名(Endpoint)。请使用实际的OSS BucketEndpoint替换url的取值。

    • OSS BucketACS集群属于相同地域时,使用VPC内网的Endpoint。例如oss-cn-shanghai-internal.aliyuncs.com

    • OSS Bucket没有地域属性,或者和ACS集群属于不同地域时,使用外网的Endpoint。例如oss-cn-shanghai.aliyuncs.com

    otherOpts

    挂载参数。格式为-o *** -o ***,例如:-o max_stat_cache_size=0 -o allow_other

步骤三:创建PVC

  1. 工作负载 > 自定义资源 > 资源定义 > 使用YAML创建资源,使用以下YAML创建PVC。

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: oss-pvc
    spec:
      storageClassName: test
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 30Gi
      selector:
        matchLabels:
          alicloud-pvname: oss-pv

步骤四:创建工作负载并挂载OSS

  1. 创建一个临时工作负载挂载OSS存储卷。在工作负载 > 无状态 > 使用YAML创建资源中,输入如下YAML,单击创建

    该工作负载将创建一个临时Pod,用于下载模型文件至Pod目录中,该目录挂载了实际的OSS存储。模型文件下载完成后,可删除该工作负载(不会删除OSS中的模型文件),减少资源浪费。
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: oss-test
      labels:
        app: oss-ai-model-download
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: oss-ai-model-download
      template:
        metadata:
          labels:
            app: oss-ai-model-download
        spec:
          containers:
            - command:
                - sh
                - -c
                - sleep infinity;
              name: oss-ai-model-download
              image: ac2-registry.cn-hangzhou.cr.aliyuncs.com/ac2/base:ubuntu24.04-py312-optimised
              resources:
                limits:
                  cpu: 8
                  memory: 32G
                requests:
                  cpu: 8
                  memory: 32G
              ports:
                - containerPort: 80
              volumeMounts:
                - name: pvc-oss
                  mountPath: /data
          volumes:
            - name: pvc-oss
              persistentVolumeClaim:
                claimName: oss-pvc

步骤五:拉取大语言模型文件

  1. 工作负载 > 无状态中,单击刚创建的工作负载oss-test,在容器组中找到Pod,单击终端进入Pod内部。

  2. 执行ls /data命令,确认当前目录为空。

  3. 依次执行如下命令,下载相应模型文件,本文以Qwen2.5-7B为例。

    pip install modelscope
    modelscope download --model Qwen/Qwen2.5-7B-Instruct --local_dir /data/Qwen2.5-7B-Instruct
  4. 下载完成Qwen2.5-7B-Instruct模型数据后,再次执行ls /data命令,确认模型文件已下载成功。

步骤六:释放工作负载资源

  1. 完成模型文件下载后,可关闭终端页面,在工作负载 > 无状态中,选择相应工作负载(oss-test),单击批量删除

    后续如需使用下载的模型数据只需在工作负载的YAML挂载本次创建的OSS存储卷即可。