EAS服务支持多种存储挂载方式,可将模型文件、代码文件或其他配置文件挂载至服务实例中。通过挂载功能,实现多实例间的数据共享,并在模型迭代或代码更新时直接修改挂载文件,无需重新构建镜像,降低开发和运维成本。本文介绍EAS服务支持的挂载类型及其配置方法。
挂载不同类型的存储
如果是模型、图片、视频等非结构化数据,且主要是读取操作,请优先选择 OSS。
如果会频繁读写小文件,或多个服务实例需要共享一个读写目录,请选择通用型NAS。
如果涉及高性能计算或AI训练,并且需要极低时延和高吞吐,选择极速型NAS或智算CPFS。
如果需要对接大规模并行计算框架或AI训练框架,优先选择智算CPFS。
仅使用灵骏智算资源配额部署EAS服务时,支持挂载智算CPFS文件系统。
NAS仅支持同地域内网地址挂载,且需要打通到NAS所在vSwitch的直连网络,网络打通方法请参见网络配置。
OSS挂载
这是最常用的存储挂载。控制台配置界面如下:
JSON配置示例:
{
"storage": [
{
"oss": {
"path": "oss://bucket/path/",
"readOnly": false
},
"mount_path": "/mnt/data/"
}
]
}
参数说明:
参数(控制台) | 参数(JSON配置) | 描述 |
Uri | oss.path | 配置为OSS源地址路径,即对象存储OSS存储空间路径。如何创建存储空间,请参见控制台快速入门。 |
挂载路径 | mount_path | 表示挂载到服务实例中的目标路径,用来读取源文件或数据。例如 |
是否只读 | oss.readOnly | 支持通过开启或关闭是否只读开关,来设置读写权限。 |
NAS挂载
NAS挂载(包括通用型NAS、极速型NAS和智算CPFS)仅支持同地域内网地址挂载,可以使用内网NAS地址,且需要打通到NAS所在vSwitch的直连网络,网络打通方法请参见网络配置。
控制台配置界面如下:
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 | 挂载到服务实例中的目标路径,用来读取源文件或数据。例如 |
是否只读 | nfs.readOnly | 是否以只读方式进行挂载。 |
挂载自定义数据集
支持将相关数据或配置文件创建为PAI的数据集,注册为公共AI资产,方便在部署服务时挂载引用。
仅支持挂载对象存储(OSS)类型的自定义数据集。
控制台配置界面如下:
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 | 挂载到服务实例中的目标路径。例如 |
挂载代码
Git挂载:支持将Git仓库中的代码以只读方式挂载到服务实例中,实例启动时拉取代码。代码变更后,需重启服务实例才能生效。
代码配置:支持将Git代码仓库创建为PAI的代码集,注册为公共AI资产,方便在部署服务时挂载引用。
Git挂载
控制台配置界面如下:
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 | 挂载到服务实例中的目标路径。例如 |
代码配置
以只读方式挂载到服务实例中。
控制台配置界面如下:
JSON配置示例:
"storage": [
{
"code": {
"id": "code-4d3b42a1152****"
},
"mount_path": "/mnt/data/"
}
]
参数说明:
参数(控制台) | 参数(JSON配置) | 描述 |
代码配置 | code.id | 已注册的代码集。如何创建代码集、获取代码集ID,请参见代码配置。 |
挂载路径 | mount_path | 挂载到服务实例中的目标路径。例如 |
挂载PAI模型
将服务所需的模型注册为PAI公共的AI资产,方便在PAI中统一管理模型,详情请参见注册及管理模型。后续在部署服务时以只读方式挂载到服务实例中。
控制台配置界面如下:
参数说明:
参数(控制台) | 描述 |
PAI模型 | 已注册的PAI模型。如何创建模型,请参见注册及管理模型。 |
挂载路径 | 挂载到服务实例中的目标路径。例如 |
其他挂载
镜像挂载: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 | 指定为 |
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"
}
}
常见问题
挂载了OSS,为何报错找不到文件?
通常是路径错误,请检查挂载配置以及访问路径。
例如,将
oss://my-bucket/
挂载到/mnt/data
,OSS中文件oss://my-bucket/subfolder/myfile.txt
在容器中需通过/mnt/data/subfolder/myfile.txt
访问,而不是/mnt/data/myfile.txt
。可以直接用FTP或SSH工具连接到实例上传/下载文件吗?
不可以。EAS实例不提供FTP或SSH访问。
EAS和OSS不在同一地域,可以挂载吗?
不可以。EAS无法跨地域挂载OSS。请使用 OSS的跨区域复制将数据同步到与EAS服务相同地域的OSS Bucket中。
未挂载存储时,下载到实例中的文件去哪了? 文件保存在实例的系统盘中,会在实例重启或更新后被清空,导致数据丢失。建议挂载存储以持久化数据。