挂载数据集/OSS/NAS/CPFS

更新时间:
复制 MD 格式

公共资源组和专有资源组的默认数据存储空间有限,且一定时间后数据会被清空。通过挂载数据集或存储路径,您可以扩展DSW实例存储空间、持久化存储数据、跨实例共享数据。

重要
  • 公共资源组DSW实例,数据存储在空间有限(100GiB)的免费云盘中,在删除实例或停机超过15天后,云盘数据将被清空。

  • 专有资源组DSW实例,数据存储在实例的系统盘中,在停止或删除实例后,临时存储将被清空。

挂载数据集与直接挂载存储路径区别

如果需要长期存储、团队协作,选择挂载数据集;如果只是临时任务、快速扩展存储,选择直接挂载存储路径。

特性

挂载数据集

直接挂载存储路径

支持的云产品

对象存储OSS、文件存储NAS、文件存储CPFS

版本管理

支持版本管理和数据加速

不支持版本管理

数据共享

支持多实例共享

仅限当前实例使用

操作复杂度

需创建数据集并配置

简单,直接挂载路径即可

适用场景

长期存储、团队协作、高安全性需求

临时任务、快速扩展存储需求

启动时挂载与动态挂载区别

挂载方式分为启动时挂载和动态挂载。

  • 启动时挂载:在创建实例或变更配置时设定。需重启实例才能生效。

  • 动态挂载:在运行的实例中通过PAI SDK挂载,无需重启实例。

使用限制

  • 路径唯一: 每个数据集的挂载路径必须唯一。

  • 写入限制: 避免在OSS挂载目录中频繁写入,可能导致性能下降或操作失败。

  • Git限制: OSS挂载目录不支持Git操作。请在本地或其他非挂载路径下执行Git命令。

动态挂载限制

  • 只读限制:动态挂载仅支持只读,不支持写操作,适用于快速挂载或临时只读访问的场景。

  • 存储类型限制:动态挂载仅支持OSSNAS挂载。

  • 资源限制:动态挂载不支持灵骏智算资源。

启动时挂载

启动时挂载,通过设置实例配置页面的数据集挂载存储挂载参数,完成数据集或存储路径挂载配置。配置后需重启实例才会生效。

挂载数据集

  1. 创建数据集

    登录PAI控制台,在AI资产管理 > 数据集页面创建自定义数据集或公共数据集。具体操作可参见创建及管理数据集

  2. 挂载数据集

    在新建DSW实例时出现的配置页中(已存在的实例通过单击变更配置打开配置页),找到数据集挂载参数,单击自定义,选择已创建的数据集并填写挂载路径

说明

挂载自定义数据集须知:

  • CPFS 数据集:配置CPFS数据集时,DSW实例的专有网络(VPC)必须与CPFS文件系统一致,否则实例将创建失败。

  • NAS 数据集:配置NAS数据集时,请设置网络并选择安全组。

  • 使用专有资源组:使用专有资源组时,第一个数据集必须为NAS类型。该数据集将同时挂载到您指定的路径和DSW默认工作目录 /home/admin/workspace

直接挂载存储路径

以挂载对象存储OSS为例。

  1. 创建OSS Bucket

    开通OSS服务创建Bucket

    重要

    Bucket所属地域与PAI的地域一致。Bucket一旦创建,则无法更改其所属地域。

  2. 挂载OSS路径

    在新建DSW实例时出现的配置页中(已存在的实例通过单击变更配置打开配置页),找到存储挂载参数。点击OSS,然后选择已创建的OSS Bucket路径并填写挂载路径高级配置默认为空,您可以参考下文的挂载高级配置,按需配置。

动态挂载

动态挂载是在DSW实例中基于PAI SDK编写代码,完成数据集或存储路径的挂载,无需重启实例。

注意:动态挂载仅支持只读访问,不支持写操作,仅支持OSSNAS挂载,并且暂不支持灵骏智算资源。

准备工作

  1. 安装PAI Python SDK。在打开的DSW实例终端中执行以下命令,安装PAI Python SDK,要求python >= 3.8

    python -m pip install pai>=0.4.11
  2. 配置SDK访问PAI的密钥。

    • 方式一:配置DSW实例为PAI默认角色或自定义RAM角色。打开实例配置页,在页面底部单击展开更多配置选择实例RAM角色。具体操作参见配置DSW实例RAM角色

    • 方式二:手动通过PAI Python SDK提供的命令行工具完成配置。在终端中执行以下命令配置访问参数。操作示例参见初始化配置

      python -m pai.toolkit.config

使用示例

通过动态挂载功能,无需重启DSW实例,使用示例如下:

  • 挂载到默认路径

    相应的数据会被挂载到实例内的默认挂载路径下(官方预置实例镜像默认路径为/mnt/dynamic/)。

    from pai.dsw import mount
    # 挂载oss路径
    mount_point = mount("oss://<YourBucketName>/Path/Data/Directory/") 
    # 挂载数据集, 入参为数据集的id
    # mount_point = mount("d-m7rsmu350********")
  • 挂载到指定路径

    动态挂载功能目前需要将数据挂载到容器内的指定路径(或子路径下),可通过SDK提供的API获取动态挂载路径。

    from pai.dsw import mount, default_dynamic_mount_path
    # 获取实例的默认挂载路径
    default_path = default_dynamic_mount_path()
    mount_point = mount("oss://<YourBucketName>/Path/Data/Directory"
                  , mount_point=default_path + "tmp/output/model")

  • 动态挂载NAS

    from pai.dsw import mount, default_dynamic_mount_path
    # 获取实例的默认挂载路径
    default_path = default_dynamic_mount_path()
    # 挂载nas,要求nasendpoint和实例在同一个vpc,<region>替换为regionId,例如cn-hagnzhou
    mount("nas://06ba748***-xxx.<region>.nas.aliyuncs.com/", default_path+"mynas3/")

  • 查看实例内的所有挂载数据配置

    from pai.dsw import list_dataset_configs
    print(list_dataset_configs())

  • 卸载挂载数据

    from pai.dsw import mount, unmount
    mount_point = mount("oss://<YourBucketName>/Path/Data/Directory/")
    # 入参为挂载的路径,即list_dataset_configs查询到的MountPath
    # 执行卸载后需要等待几秒钟才会生效
    unmount(mount_point)

挂载高级配置

在配置挂载时,可设置高级参数来适配快速读写、增量读写、只读等场景,优化读写性能。

挂载高级配置

OSS挂载

OSS挂载可通过高级配置指定Jindo参数,或选用ossfs挂载。

  • 在高级配置中设置{"mountType":"ossfs"},以使用ossfs方式挂载OSS存储。如果不设置,默认使用Jindo挂载。

  • 在高级配置中设置Jindo参数,可以更灵活地使用Jindo挂载。常见场景如下:

    • 快速读写:允许用户读写,读取速度快,但并发读写可能会出现数据不一致的问题,适合挂载训练数据和模型,不适合作为工作目录。

      {
        "fs.oss.download.thread.concurrency": "cpu核数2倍",
        "fs.oss.upload.thread.concurrency": "cpu核数2倍",
        "fs.jindo.args": "-oattr_timeout=3 -oentry_timeout=0 -onegative_timeout=0 -oauto_cache -ono_symlink"
      }
    • 增量读写:在增量写入时能够保证数据一致性,覆盖原有数据会有一致性问题。读取速度略慢,适合保存训练的模型权重文件。

      {
        "fs.oss.upload.thread.concurrency": "cpu核数2倍",
        "fs.jindo.args": "-oattr_timeout=3 -oentry_timeout=0 -onegative_timeout=0 -oauto_cache -ono_symlink"
      }
    • 读写一致:在并发读写中能保持数据一致性,适用于对数据一致性要求高,可以容忍读取速度慢的场景,适合保存代码项目。

      {
        "fs.jindo.args": "-oattr_timeout=0 -oentry_timeout=0 -onegative_timeout=0 -oauto_cache -ono_symlink"
      }
    • 只读:仅允许读取,不允许写入,适合挂载公共数据集。

      {
        "fs.oss.download.thread.concurrency": "cpu核数2倍",
        "fs.jindo.args": "-oro -oattr_timeout=7200 -oentry_timeout=7200 -onegative_timeout=7200 -okernel_cache -ono_symlink"
      }

通用型NASCPFS

通用型NASCPFS挂载可通过高级配置,提升容器访问存储的吞吐性能。

在高级配置中设置nconnect参数,例如{"nconnect":"<示例值>"},将<示例值>替换为具体的正整数。

查看挂载配置

打开DSW实例,在终端中,输入以下命令,查看NASOSS类型的数据集是否挂载成功。

# 查看所有挂载
mount
# 查询NAS挂载路径
mount | grep nas
# 查询OSS挂载路径
mount | grep oss

系统输出以下返回结果,说明数据集已成功挂载。

(base) /mnt/workspace> mount | grep nas
xxx /dsw01/ on /mnt/workspace type nfs (rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,nolock,noresvport,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=xxx,mountvers=3,mountport=2049,mountproto=tcp,local_lock=all,addr=xxx)
xxx /dsw01/ on /mnt/data_nas type nfs (rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,nolock,noresvport,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=xxx,mountvers=3,mountport=2049,mountproto=tcp,local_lock=all,addr=xxx)
xxx:/dsw01/ on /home/admin/workspace type nfs (rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,nolock,noresvport,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=xxx,mountvers=3,mountport=2049,mountproto=tcp,local_lock=all,addr=xxx)
(base) /mnt/workspace>
(base) /mnt/workspace> mount | grep oss
jindo-fuse on /mnt/data_oss type fuse.jindo-fuse (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other)
(base) /mnt/workspace>
  • NAS数据集已挂载到/mnt/data_nas/mnt/workspace/home/admin/workspace目录。其中/mnt/data_nas为创建DSW实例时指定的挂载路径,后两个路径为配置第一个NAS数据集时被挂载的DSW默认工作目录。只要NAS盘和服务正常运行,数据和代码即可持久化存储。

  • OSS数据集挂载到DSW/mnt/data_oss目录。

常见问题

Q:成功挂载了OSS,为什么在JupyterLab界面的左侧文件浏览器中看不到?

这是因为DSW的文件浏览器默认显示实例的工作目录,路径通常是/mnt/workspace。而挂载OSS时指定的挂载路径(例如 /mnt/data)不在默认工作目录下,因此不会显示在左侧文件列表中。

解决方法:

  • 通过代码访问:文件已成功挂载。在代码中使用完整的挂载路径访问即可,例如 open('/mnt/data/my_file.csv')

  • 更改挂载点:为了在UI中方便地看到文件,可在配置挂载时将挂载路径设置为工作目录下的子目录,例如 /mnt/workspace/my_oss_data。这样挂载完成后,即可在文件浏览器的 my_oss_data 文件夹中看到OSS文件。

  • 通过终端访问:在DSWTerminal中使用cd /mnt/data命令进入挂载目录,然后通过ls等命令查看和操作文件。

Q:使用挂载的OSS时,程序报错“Transport endpoint is not connected”或“输入/输出错误”?

这个错误表明DSW实例与OSS的挂载连接已断开。可能的原因及排查方法如下:

  1. RAM角色权限问题:检查DSW实例配置的RAM角色是否被授予了访问OSS的权限(例如 AliyunPAIDLCAccessingOSSRole)。权限不足是导致无法读取OSS的常见原因。

  2. 挂载服务资源不足:高强度随机读写或大量小文件操作时,负责挂载的ossfsJindoFuse进程可能因内存不足(OOM)而崩溃 。可在挂载配置的”高级配置”中关闭元数据Cache,或增加内存配置。详情参见JindoFuse

  3. 恢复连接:

    • 对于启动时挂载,最简单的恢复方法是重启DSW实例,系统会自动重新执行挂载。

    • 您也可以使用PAI SDK执行动态挂载命令,在不重启实例的情况下重新挂载路径。

Q:DSW支持挂载哪些类型的数据?可以直接挂载阿里云盘或MaxCompute表吗?

DSW支持通过创建数据集或直接挂载路径的方式使用OSS、NASCPFS这几种云存储服务。

  • 不支持阿里云盘:DSW不支持挂载个人阿里云盘。需要处理的数据建议存放在OSS中。

  • 不支持挂载MaxCompute表:MaxCompute(原ODPS)的表数据不能像文件系统一样直接”挂载”到DSW目录中。您可以通过PAI提供的SDKAPIDSW代码中读写,详情参见使用PyODPS读写MaxCompute

Q:DSW实例关机或删除后,代码和数据会丢失吗?如何实现数据持久化和迁移?

DSW实例的系统盘是临时存储。公共资源组实例停机超过15天数据会被清空;专有资源组实例停止或删除后,系统盘数据也会被清空。

为了实现数据和代码的持久化存储及跨实例迁移,必须使用外部挂载存储。

  • 持久化方案:将重要数据、代码、模型等保存在挂载的OSSNAS路径下。即使DSW实例被删除,资产依然安全存放在OSSNAS中。

  • 迁移方案:需要将数据从一个DSW实例迁移到另一个时,只需在新实例中挂载同一个OSSNAS路径即可。

Q:DSW实例无法打开/无法启动,如何导出系统盘中的数据?

如果DSW实例因资源不足或其他原因无法启动,系统盘中的数据不会立即丢失。可尝试以下方法导出数据:

  1. 变更实例规格后重新启动:在实例列表页,单击"变更配置",选择其他可用的实例规格后重新启动实例。变更规格不会导致系统盘数据丢失。启动成功后,立即将数据备份到OSSNAS。

  2. 更换地域或可用区:如果当前地域资源不足,且数据已存储在外部存储中,可以尝试创建新实例并挂载相同的OSS/NAS存储来恢复数据。

  3. 联系技术支持:如果以上方法均无法解决,请提交工单联系技术支持协助导出数据。

重要

公共资源组实例停机超过15天,免费云盘数据将被清空且无法恢复。如果您收到"系统盘将于X天后释放"的通知,请务必在截止日期前通过变更规格等方式启动实例并备份数据。

相关文档

更多常见问题参见DSW常见问题