为EAS服务进行存储挂载

EAS服务支持多种存储挂载方式,可将模型文件、代码文件或其他配置文件挂载至服务实例中。通过挂载功能,实现多实例间的数据共享,并在模型迭代或代码更新时直接修改挂载文件,无需重新构建镜像,降低开发和运维成本。本文介绍EAS服务支持的挂载类型及其配置方法。

挂载不同类型的存储

  • 如果是模型、图片、视频等非结构化数据,且主要是读取操作,请优先选择 OSS

  • 如果会频繁读写小文件,或多个服务实例需要共享一个读写目录,请选择通用型NAS

  • 如果涉及高性能计算或AI训练,并且需要极低时延和高吞吐,选择极速型NAS智算CPFS

  • 如果需要对接大规模并行计算框架或AI训练框架,优先选择智算CPFS

说明
  • 仅使用灵骏智算资源配额部署EAS服务时,支持挂载智算CPFS文件系统。

  • NAS仅支持同地域内网地址挂载,且需要打通到NAS所在vSwitch的直连网络,网络打通方法请参见网络配置

OSS挂载

这是最常用的存储挂载。控制台配置界面如下:

image

JSON配置示例:

{
  "storage": [
        {
            "oss": {
                "path": "oss://bucket/path/",
                "readOnly": false
            },
            "mount_path": "/mnt/data/"
        }
    ]
}

参数说明:

参数(控制台)

参数(JSON配置)

描述

Uri

oss.path

配置为OSS源地址路径,即对象存储OSS存储空间路径。如何创建存储空间,请参见控制台快速入门

挂载路径

mount_path

表示挂载到服务实例中的目标路径,用来读取源文件或数据。例如/mnt/data

是否只读

oss.readOnly

支持通过开启或关闭是否只读开关,来设置读写权限。

NAS挂载

NAS挂载(包括通用型NAS、极速型NAS和智算CPFS)仅支持同地域内网地址挂载,可以使用内网NAS地址,且需要打通到NAS所在vSwitch的直连网络,网络打通方法请参见网络配置

控制台配置界面如下:image

JSON配置示例:

{
  "storage": [
        {
            "nfs": {
                "path": "/",
                "server": "06ba74****-a****.cn-hangzhou.nas.aliyuncs.com",
                "readOnly": false
            },
            "mount_path": "/mnt/data/"
        }
    ]
}

参数说明:

参数(控制台)

参数(JSON配置)

描述

存储权限资源组

nfs.resourceGroup

文件系统资源组,通过资源组过滤相应的文件系统。更多关于资源组介绍信息,请参见资源组设计最佳实践

当选择全部存储权限资源组时,JSON中无需配置。

选择文件系统

已创建的NAS文件系统的ID。您可以登录NAS控制台,在对应的地域,查看NAS文件系统ID。

文件系统挂载点

nfs.server

NAS挂载点的地址,EAS服务将通过挂载点来访问NAS文件系统。如何查看,请参见查看挂载点地址

说明

通过控制台选择挂载点后,系统会自动选择与挂载点一致的专有网络。

文件系统路径

nfs.path

需要挂载的NAS中的源路径。即NAS实例内部的文件系统路径,例如/。请确保该路径存在,否则后续使用时会出现错误。

挂载路径

mount_path

挂载到服务实例中的目标路径,用来读取源文件或数据。例如/mnt/data

是否只读

nfs.readOnly

是否以只读方式进行挂载。

挂载自定义数据集

支持将相关数据或配置文件创建为PAI数据集,注册为公共AI资产,方便在部署服务时挂载引用。

说明

仅支持挂载对象存储(OSS)类型的自定义数据集。

控制台配置界面如下:image

JSON配置示例:

"storage": [
        {
            "dataset": {
                "id": "d-pcsah1t86bm8******",
                "version": "v1",
                "read_only": false
            },
            "mount_path": "/mnt/data/"
        }
    ]

参数说明:

参数(控制台)

参数(JSON配置)

描述

自定义数据集

dataset.id

已注册的对象存储(OSS)类型的自定义数据集。如何创建自定义数据集、获取数据集ID,请参见创建及管理数据集

版本

version

数据集版本,例如v1。

是否只读

dataset.read_only

是否以只读方式进行挂载。

挂载路径

mount_path

挂载到服务实例中的目标路径。例如/mnt/data/

挂载代码

  • Git挂载:支持将Git仓库中的代码以只读方式挂载到服务实例中,实例启动时拉取代码。代码变更后,需重启服务实例才能生效。

  • 代码配置:支持将Git代码仓库创建为PAI代码集,注册为公共AI资产,方便在部署服务时挂载引用。

Git挂载

控制台配置界面如下:image

JSON配置示例:

{
  "storage": [
        {
            "git": {
                "repo": "https://codeup.aliyun.com/xxx/eas/aitest.git",
                "branch": "master",
                "commit": "xxx",
                "username": "username",
                "password": "password or access token"
            },
            "mount_path": "/mnt/data/"
        }
    ]
}

参数说明:

参数(控制台)

参数(JSON配置)

描述

Git地址

git.repo

需要挂载的Git代码仓库的HTTPS地址。暂不支持Git协议。

代码分支

git.branch

需要拉取的Git代码仓库的分支,默认为master。

代码Commit

git.commit

需要拉取的Git代码仓库的commit ID。

Git用户名

git.username

私有Git代码仓库的登录用户名。

访问Token

git.password

私有Git代码仓库的登录密码。获取方法,请参见附录:获取GitHub账号的Token

挂载路径

mount_path

挂载到服务实例中的目标路径。例如/mnt/data

代码配置

以只读方式挂载到服务实例中。

控制台配置界面如下:image

JSON配置示例:

"storage": [
        {
            "code": {
                "id": "code-4d3b42a1152****"
            },
            "mount_path": "/mnt/data/"
        }
    ]

参数说明:

参数(控制台)

参数(JSON配置)

描述

代码配置

code.id

已注册的代码集。如何创建代码集、获取代码集ID,请参见代码配置

挂载路径

mount_path

挂载到服务实例中的目标路径。例如/data_image

挂载PAI模型

将服务所需的模型注册为PAI公共的AI资产,方便在PAI中统一管理模型,详情请参见注册及管理模型。后续在部署服务时以只读方式挂载到服务实例中。

控制台配置界面如下:

image

参数说明:

参数(控制台)

描述

PAI模型

已注册的PAI模型。如何创建模型,请参见注册及管理模型

挂载路径

挂载到服务实例中的目标路径。例如/mnt/data/

其他挂载

  • 镜像挂载:Docker Image的挂载方式并非直接将镜像中的目录挂载到服务实例中,而是通过Shared Volume先将要挂载的镜像中的指定目录中的文件拷贝至本地Shared Volume中,在服务运行时挂载本地的Shared Volume,因此当要挂载的目录中数据量较大时,会消耗较多的本地存储,并延长服务实例启动时间。请根据需要使用该功能。

  • EmptyDir挂载:如果您希望实例运行时读写本地磁盘目录,且实例异常重启后写入的内容不会丢失,则可以使用EmptyDir的存储挂载方式。

镜像挂载

  • 配置方法

    {
        "storage": [
            {
                "image": {
                    "image": "registry-vpc.cn-xxxx.aliyuncs.com/eas/image_name:v1",
                    "path": "/path/to/mount/"
                },
                "mount_path": "/data_image"
            }
        ]
    }
    说明

    仅支持同区域内网地址挂载,如要挂载的镜像是private,需通过dockerAuth参数来指定镜像仓库的鉴权信息。关于dockerAuth参数的使用说明,请参见自定义镜像

  • 参数说明

    参数(JSON配置)

    描述

    image.image

    需要挂载的内网镜像仓库地址。

    image.path

    需要挂载到服务实例中的镜像中的路径。

    mount_path

    挂载到服务实例中的目标路径。例如/data_image

EmptyDir挂载

  • 配置方法

    {
        "name": "service_name",
        "storage": [
            {
                "empty_dir": {},
                "mount_path": "/data_image"
            }
        ]
    }
  • 参数说明

    参数名(JSON配置)

    含义

    mount_path

    挂载到服务实例中的目标路径。

    empty_dir

    表示类型为EmptyDir、值为空的Map,表示将数据存储在本地磁盘上。暂不支持其他属性的配置。

配置共享内存

当对存储性能要求较高时,您可以使用以下配置文件来配置共享内存。

{
    "storage": [
        {
            "empty_dir": {
              "medium": "memory",
              "size_limit": 20
            },
            "mount_path": "/dev/shm"
        }
    ]
}

其中:

参数(JSON配置)

描述

medium

指定为memory

mount_path

指定为/dev/shm

size_limit

用来限制内存上限,单位为GB。

JSON配置完整示例

完整的配置示例如下,更多配置详情,请参见JSON部署

{
    "name": "service_name",
    "model_path": "http://path/to/model",
    "processor": "pmml",
    "storage": [
        {
            "oss": {
                "path": "oss://bucket/path/",
                "readOnly": false
            },
            "mount_path": "/mnt/data/"
        },
        {
            "nfs": {
                "path": "/",
                "server": "06ba74****-a****.cn-hangzhou.nas.aliyuncs.com",
                "readOnly": false
            },
            "mount_path": "/mnt/data/"
        },
        {
            "image": {
                "image": "registry-vpc.cn-shanghai.aliyuncs.com/eas/test_image:v1",
                "path": "/path/to/mount/"
            },
            "mount_path": "/data_image"
        },
        {
            "empty_dir": {
              "medium": "memory",
              "size_limit": 20
            },
            "mount_path": "/dev/shm"
        },
        {
            "git": {
                "repo": "https://codeup.aliyun.com/xxx/eas/aitest.git",
                "branch": "master",
                "commit": "xxx",
                "username": "username",
                "password": "password or access token"
            },
            "mount_path": "/mnt/data/"
        }
    ],
    "metadata": {
        "cpu": 1,
        "instance": 1,
        "resource": "eas-r-xxx"
    }
}

常见问题

  1. 挂载了OSS,为何报错找不到文件?

    通常是路径错误,请检查挂载配置以及访问路径。

    例如,将 oss://my-bucket/ 挂载到 /mnt/data,OSS中文件 oss://my-bucket/subfolder/myfile.txt在容器中需通过 /mnt/data/subfolder/myfile.txt 访问,而不是 /mnt/data/myfile.txt

  2. 可以直接用FTPSSH工具连接到实例上传/下载文件吗?

    不可以。EAS实例不提供FTPSSH访问。

  3. EASOSS不在同一地域,可以挂载吗?

    不可以。EAS无法跨地域挂载OSS。请使用 OSS跨区域复制将数据同步到与EAS服务相同地域的OSS Bucket中。

  4. 未挂载存储时,下载到实例中的文件去哪了? 文件保存在实例的系统盘中,会在实例重启或更新后被清空,导致数据丢失。建议挂载存储以持久化数据。