【DSW Gallery】如何在DLC训练任务中挂载OSS

本文涉及的产品
模型训练 PAI-DLC,5000CU*H 3个月
交互式建模 PAI-DSW,5000CU*H 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
简介: 阿里云对象存储OSS(Object Storage Service)是一款海量、安全、低成本、高可靠的云存储服务。本文将介绍如何使用在DLC训练任务中挂载OSS,使用读写本地文件的方式来访问OSS中的数据。

直接使用

请打开如何在DLC训练任务中挂载OSS,并点击右上角 “ 在DSW中打开” 。

image.png


概览

PAI-DLC(Deep Learning Containers)是基于阿里巴巴容器服务ACK(Alibaba Cloud Container Service for Kubernetes)的深度学习训练平台,为您提供灵活、稳定、易用和极致性能的深度学习训练环境。 DLC支持挂载NAS、OSS到容器中,方便在训练中直接读写。

本文将介绍如何在DLC训练任务中挂载OSS数据集。

前提条件

  • 开通PAI-DLC,并完成授权。
  • 开通OSS。
  • 创建AI工作空间。

PAI控制台 -->> 资源管理 -->> 全部云产品依赖 页面,可以查看开通状态。

image.png

步骤一:创建OSS数据集

选择并进入一个工作空间,选择数据集:

image.png

点击创建数据集

image.png

  1. 点击 AI资源管理 -- 数据集;
  2. 点击 创建数据集;
  3. 创建方式选择 “从阿里云存储”;
  4. 指定 数据集的名称:之后在DLC、DSW中引用时会显示数据集的名字
  5. 选择OSS存储
  6. 属性选择:文件夹
  7. 选择需要挂载的OSS Bucket与文件路径

查看数据集详情

image.png

  • 查看数据集ID:使用DLC命令行工具 或者 SDK提供训练任务时,需要使用数据集ID来此数据集
  • Uri:格式是 oss://[OSS-Bucket].[OSS-Endpoint]/[OSS-Path]
  • Mount Path: 是DLC节点中挂载的本地路径

步骤二:创建DLC训练任务

image.png

在训练任务中引用刚刚创建的数据集,然后在节点中可以通过读写MountPath指定的路径 来访问OSS。

高级配置

当前DLC底层使用JindoFuse来挂载的OSS。JindoFuse的挂载OSS时,有很多参数可以调整,默认的参数配置并不适合所有的场景。DLC的默认配置,有如下限制:

  • 为了快速读取OSS文件,挂载OSS时会有元数据(目录与文件列表)的Cache;
  • 如果分布式任务中有多个节点需要创建同一个目录并检查目录是否存在的行为,因为元数据的Cache会导致,每个节点都会创建目录,但只有一个节点创建成功,其它节点会报错。
  • 默认使用OSS的 MultiPart API来创建文件,所以在写文件的过程中,在OSS上看不到这个对象;当所有写操作完成时,才能在OSS页面上查看。
  • 不支持文件的边写边读的操作。
  • 不支持文件的随机写操作。

当前PAI的控制台页面,不支持配置JindoFuse底层的参数,需要使用SDK来修改,下面提供一些修改示例,以供参考。

环境准备:安装工作空间的SDK

!pip install alibabacloud-aiworkspace20210204

主要的应用场景:

  • 分布式作业中多个节点需要向同一目录写文件,如果有Cache,会导致有些节点找不以这个目录

需要修改fuse的命令行参数,增加: -oattr_timeout=0-oentry_timeout=0-onegative_timeout=0

import json
from alibabacloud_tea_openapi.models import Config
from alibabacloud_aiworkspace20210204.client import Client as AIWorkspaceClient
from alibabacloud_aiworkspace20210204.models import UpdateDatasetRequest
def turnOffMetaCache():
    region_id = 'cn-hangzhou'
    access_key_id = '** 你的 AccessKeyId **'
    access_key_secret = '** 你的 AccessKeySecret **'
    dataset_id = '** 数据集的 ID **'
    workspace_client = AIWorkspaceClient(
        Config(access_key_id=access_key_id,
               access_key_secret=access_key_secret,
               region_id=region_id,
               endpoint='aiworkspace.{}.aliyuncs.com'.format(region_id)))
    # 1. get the content of dataset
    get_dataset_resp = workspace_client.get_dataset(dataset_id)
    options = json.loads(get_dataset_resp.body.options)
    options['fs.jindo.args'] = '-oattr_timeout=0 -oentry_timeout=0 -onegative_timeout=0'
    update_request = UpdateDatasetRequest(
        options=json.dumps(options)
    )
    # 2. update options
    workspace_client.update_dataset(dataset_id, update_request)
    print('new options is: {}'.format(update_request.options))
turnOffMetaCache()

调整上传(下载)数据的线程数目

  • fs.oss.upload.thread.concurrency:32
  • fs.oss.download.thread.concurrency:32
  • fs.oss.read.readahead.buffer.count:64
  • fs.oss.read.readahead.buffer.size:4194304 具体可以参考文档:JindoSDK 高级参数配置
import json
from alibabacloud_tea_openapi.models import Config
from alibabacloud_aiworkspace20210204.client import Client as AIWorkspaceClient
from alibabacloud_aiworkspace20210204.models import UpdateDatasetRequest
def adjustThreadNum():
    region_id = 'cn-hangzhou'
    access_key_id = '** 你的 AccessKeyId **'
    access_key_secret = '** 你的 AccessKeySecret **'
    dataset_id = '** 数据集的 ID **'
    workspace_client = AIWorkspaceClient(
        Config(access_key_id=access_key_id,
               access_key_secret=access_key_secret,
               region_id=region_id,
               endpoint='aiworkspace.{}.aliyuncs.com'.format(region_id)))
    # 1. get the content of dataset
    get_dataset_resp = workspace_client.get_dataset(dataset_id)
    options = json.loads(get_dataset_resp.body.options)
    options['fs.oss.upload.thread.concurrency'] = 32
    options['fs.oss.download.thread.concurrency'] = 32
    options['fs.oss.read.readahead.buffer.count'] = 32
    update_request = UpdateDatasetRequest(
        options=json.dumps(options)
    )
    # 2. update options
    workspace_client.update_dataset(dataset_id, update_request)
    print('new options is: {}'.format(update_request.options))
adjustThreadNum()

如何使用AppendObject方式挂载OSS文件

所有在本地创建的文件,都会使用OSS的AppendObject接口来创建Object。AppendObject本身有一些限制可以参考文档。最重要是限制是:通过AppendObject方式最后生成的Object大小不得超过5 GB

import json
from alibabacloud_tea_openapi.models import Config
from alibabacloud_aiworkspace20210204.client import Client as AIWorkspaceClient
from alibabacloud_aiworkspace20210204.models import UpdateDatasetRequest
def useAppendObject():
    region_id = 'cn-hangzhou'
    access_key_id = '** 你的 AccessKeyId **'
    access_key_secret = '** 你的 AccessKeySecret **'
    dataset_id = '** 数据集的 ID **'
    workspace_client = AIWorkspaceClient(
        Config(access_key_id=access_key_id,
               access_key_secret=access_key_secret,
               region_id=region_id,
               endpoint='aiworkspace.{}.aliyuncs.com'.format(region_id)))
    # 1. get the content of dataset
    get_dataset_resp = workspace_client.get_dataset(dataset_id)
    options = json.loads(get_dataset_resp.body.options)
    options['fs.jindo.args'] = '-oattr_timeout=0 -oentry_timeout=0 -onegative_timeout=0'
    options['fs.oss.append.enable'] = "true"
    options['fs.oss.flush.interval.millisecond'] = "1000"
    options['fs.oss.read.buffer.size'] = "262144"
    options['fs.oss.write.buffer.size'] = "262144"
    update_request = UpdateDatasetRequest(
        options=json.dumps(options)
    )
    # 2. update options
    workspace_client.update_dataset(dataset_id, update_request)
    print('new options is: {}'.format(update_request.options))
useAppendObject()

如何挂载OSS-HDFS

如何开通OSS-HDFS,可以参考文档。 需要使用OSS-HDFS的Endpoint来创建数据集,具体示例代码如下:

import json
from alibabacloud_tea_openapi.models import Config
from alibabacloud_aiworkspace20210204.client import Client as AIWorkspaceClient
from alibabacloud_aiworkspace20210204.models import CreateDatasetRequest
def createOssHdfsDataset():
    region_id = 'cn-hangzhou'
    access_key_id = '** 你的 AccessKeyId **'
    access_key_secret = '** 你的 AccessKeySecret **'
    workspace_id = '** 工作空间ID **'
    oss_bucket = '** OSS-Bucket **'
    # 使用 OSS-HDFS 的 Endpoint
    oss_endpoint = f'{region_id}.oss-dls.aliyuncs.com'
    # 需要挂载的 OSS-HDFS 路径
    oss_path = '/'
    # 本地挂载路径
    mount_path = '/mnt/data/' 
    workspace_client = AIWorkspaceClient(
        Config(access_key_id=access_key_id,
               access_key_secret=access_key_secret,
               region_id=region_id,
               endpoint='aiworkspace.{}.aliyuncs.com'.format(region_id)))
    response = workspace_client.create_dataset(CreateDatasetRequest(
        workspace_id=workspace_id,
        name="** 数据集的名字 **",
        data_type='COMMON',
        data_source_type='OSS',
        property='DIRECTORY',
        uri=f'oss://{oss_bucket}.{oss_endpoint}{oss_path}',
        accessibility='PRIVATE',
        source_type='USER',
        options=json.dumps({
            'mountPath': mount_path,
            # 分布式训练的场景下建议增加以下参数:
            'fs.jindo.args': '-oattr_timeout=0 -oentry_timeout=0 -onegative_timeout=0 -ono_symlink -ono_xattr -ono_flock -odirect_io',
            'fs.oss.flush.interval.millisecond': "10000",
            'fs.oss.randomwrite.sync.interval.millisecond': "10000",
        })
    ))
    print(f'datasetId: {response.body.dataset_id}')
createOssHdfsDataset()
相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
相关文章
|
2月前
|
机器学习/深度学习 人工智能 专有云
人工智能平台PAI使用问题之怎么将DLC的数据写入到另一个阿里云主账号的OSS中
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
4月前
|
机器学习/深度学习 存储 分布式计算
机器学习PAI常见问题之DLC的数据写入到另外一个阿里云主账号的OSS中如何解决
PAI(平台为智能,Platform for Artificial Intelligence)是阿里云提供的一个全面的人工智能开发平台,旨在为开发者提供机器学习、深度学习等人工智能技术的模型训练、优化和部署服务。以下是PAI平台使用中的一些常见问题及其答案汇总,帮助用户解决在使用过程中遇到的问题。
|
2月前
|
分布式计算 DataWorks 数据处理
DataWorks产品使用合集之要获取OSS文件大小并配置成调度任务,该如何操作
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
3月前
|
分布式计算 DataWorks API
DataWorks操作报错合集之在将ODPS空间设置成保护模式后,导出到OSS的任务出现了权限问题,该怎么解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
163 1
|
3月前
|
存储 DataWorks 关系型数据库
DataWorks产品使用合集之在使用数据集成中的同步任务从mysql同步表到oss,存储为csv时,最终生成的文件中没有表头,这个属性可以在哪里配置么
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
3月前
|
机器学习/深度学习 人工智能 分布式计算
人工智能平台PAI操作报错合集之在ODPS的xxx_dev项目空间调用easyrec训练,需要访问yyy项目空间的OSS,出现报错,是什么导致的
阿里云人工智能平台PAI (Platform for Artificial Intelligence) 是阿里云推出的一套全面、易用的机器学习和深度学习平台,旨在帮助企业、开发者和数据科学家快速构建、训练、部署和管理人工智能模型。在使用阿里云人工智能平台PAI进行操作时,可能会遇到各种类型的错误。以下列举了一些常见的报错情况及其可能的原因和解决方法。
|
3月前
|
SQL 运维 DataWorks
DataWorks操作报错合集之同步任务同步到OSS,报错:Caused by: com.aliyun.oss.ClientException: The target server failed to respond,如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
11月前
|
对象存储 机器学习/深度学习 存储
大语言模型一键转存到OSS并挂载PAI实现企业知识库
本文介绍如何实现一键转载主流的大语言模型到自己的对象存储OSS空间中,然后再挂载到PAI-DSW实现多种模型切换测试知识库的效果。
大语言模型一键转存到OSS并挂载PAI实现企业知识库
|
4月前
|
存储 缓存 对象存储
威联通 QNAP 挂载阿里云对象存储 OSS 完整攻略
详细介绍本地NAS设备如何通过云网管关的能力,挂载云上的对象存储OSS
1196 0
|
机器学习/深度学习 对象存储 API
将OSS里的 Stable diffusion 模型库挂载到PAI-EAS并部署推理
本文将会介绍如何一键转存模型库到自己的对象存储OSS空间中,并给出将OSS挂载到PAI-EAS实现部署,并对模型进行灵活切换与推理。
1918 1
将OSS里的 Stable diffusion 模型库挂载到PAI-EAS并部署推理