更新时间:2024-12-10 GMT+08:00
分享

创建Workflow数据集节点

功能介绍

通过对ModelArts数据集能力进行封装,实现新版数据集的创建功能。主要用于通过创建数据集对已有数据(已标注/未标注)进行统一管理的场景,后续常见数据集导入节点或者数据集标注节点。

属性总览

您可以使用CreateDatasetStep来构建数据集创建节点,CreateDatasetStep及相关对象结构如下。

表1 CreateDatasetStep

属性

描述

是否必填

数据类型

name

数据集创建节点的名称,命名规范(只能包含英文字母、数字、下划线(_)、中划线(-),并且只能以英文字母开头,长度限制为64字符),一个Workflow里的两个step名称不能重复。

str

inputs

数据集创建节点的输入列表。

CreateDatasetInput或者CreateDatasetInput的列表

outputs

数据集创建节点的输出列表。

CreateDatasetOutput或者CreateDatasetOutput的列表

properties

数据集创建相关的配置信息。

DatasetProperties

title

title信息,主要用于前端的名称展示。

str

description

数据集创建节点的描述信息。

str

policy

节点执行的policy。

StepPolicy

depend_steps

依赖的节点列表。

Step或者Step的列表

表2 CreateDatasetInput

属性

描述

是否必填

数据类型

name

数据集创建节点的输入名称,命名规范(只能包含英文字母、数字、下划线(_)、中划线(-),并且只能以英文字母开头,长度限制为64字符)。同一个Step的输入名称不能重复。

str

data

数据集创建节点的输入数据对象。

OBS相关对象,当前仅支持OBSPath、OBSConsumption、OBSPlaceholder、DataConsumptionSelector

表3 CreateDatasetOutput

属性

描述

是否必填

数据类型

name

数据集创建节点的输出名称,命名规范(只能包含英文字母、数字、下划线(_)、中划线(-),并且只能以英文字母开头,长度限制为64字符)。同一个Step的输出名称不能重复。

str

config

数据集创建节点的输出相关配置。

当前仅支持OBSOutputConfig

表4 DatasetProperties

属性

描述

是否必填

数据类型

dataset_name

数据集的名称,只能是中文、字母、数字、下划线或中划线组成的合法字符串,长度为1-100位。

str、Placeholder

dataset_format

数据集格式,默认为0,表示文件类型。

0:文件类型

1:表格类型

data_type

数据类型,默认为FREE_FORMAT。

DataTypeEnum

description

描述信息。

str

import_data

是否要导入数据,当前只支持表格数据,默认为False。

bool

work_path_type

数据集输出路径类型,当前仅支持OBS,默认为0。

int

import_config

标签导入的相关配置,默认为None,当基于已标注的数据创建数据集时,可指定该字段导入相关标注信息。

ImportConfig

表5 Importconfig

属性

描述

是否必填

数据类型

import_annotations

是否自动导入输入目录下的标注信息,支持检测/图像分类/文本分类。可选值如下:

  • true:导入输入目录下的标注信息(默认值)
  • false:不导入输入目录下的标注信息

str、Placeholder

import_type

导入方式。可选值如下:

  • dir:目录导入
  • manifest:按manifest文件导入

0:文件类型ImportTypeEnum

annotation_format_config

导入的标注格式的配置参数。

DAnnotationFormaTypeEtConumfig的列表

表6 AnnotationFormatConfig

属性

描述

是否必填

数据类型

format_name

标注格式的名称。

AnnotationFormatEnum

scene

标注场景,可选参数。

LabelTaskTypeEnum

枚举类型

枚举值

ImportTypeEnum

DIR

MANIFEST

DataTypeEnum

IMAGE

TEXT

AUDIO

TABULAR

VIDEO

FREE_FORMAT

AnnotationFormatEnum

MA_IMAGE_CLASSIFICATION_V1

MA_IMAGENET_V1

MA_PASCAL_VOC_V1

YOLO

MA_IMAGE_SEGMENTATION_V1

MA_TEXT_CLASSIFICATION_COMBINE_V1

MA_TEXT_CLASSIFICATION_V1

MA_AUDIO_CLASSIFICATION_DIR_V1

使用案例

主要包含两种场景的用例。

  • 基于未标注数据创建数据集
  • 基于已标注的数据创建数据集,并自动导入标注信息

基于未标注数据创建数据集

数据准备:存储在OBS文件夹中的未标注的数据。

from modelarts import workflow as wf
# 通过CreateDatasetStep将存储在OBS中的数据创建成一个新版数据集

# 定义数据集输出路径参数
dataset_output_path = wf.Placeholder(name="dataset_output_path", placeholder_type=wf.PlaceholderType.STR, placeholder_format="obs")

# 定义数据集名称参数
dataset_name = wf.Placeholder(name="dataset_name", placeholder_type=wf.PlaceholderType.STR)

create_dataset = wf.steps.CreateDatasetStep(
    name="create_dataset",# 数据集创建节点的名称,命名规范(只能包含英文字母、数字、下划线(_)、中划线(-),并且只能以英文字母开头,长度限制为64字符),一个Workflow里的两个step名称不能重复
    title="数据集创建", # 标题信息,不填默认使用name值
    inputs=wf.steps.CreateDatasetInput(name="input_name", data=wf.data.OBSPlaceholder(name="obs_placeholder_name", object_type="directory")),# CreateDatasetStep的输入,数据在运行时进行配置;data字段也可使用wf.data.OBSPath(obs_path="fake_obs_path")对象表示
    outputs=wf.steps.CreateDatasetOutput(name="output_name", config=wf.data.OBSOutputConfig(obs_path=dataset_output_path)),# CreateDatasetStep的输出
    properties=wf.steps.DatasetProperties(
        dataset_name=dataset_name, # 该名称对应的数据集如果不存在,则创建新的数据集;如果已存在,则直接使用该名称对应的数据集
        data_type=wf.data.DataTypeEnum.IMAGE, # 数据集对应的数据类型, 示例为图像
    )
)
# 注意dataset_name这个参数配置的数据集名称需要用户自行确认在该账号下未被他人使用,否则会导致期望的数据集未被创建,而后续节点错误使用了他人创建的数据集

workflow = wf.Workflow(
    name="create-dataset-demo",
    desc="this is a demo workflow",
    steps=[create_dataset]
)

基于已标注数据创建数据集,并导入标注信息

数据准备:存储在OBS文件夹中的已标注数据。

OBS目录导入已标注数据的规范:可参见OBS目录导入数据规范说明

from modelarts import workflow as wf
# 通过CreateDatasetStep将存储在OBS中的数据创建成一个新版数据集

# 定义数据集输出路径参数
dataset_output_path = wf.Placeholder(name="dataset_placeholder_name", placeholder_type=wf.PlaceholderType.STR, placeholder_format="obs")

# 定义数据集名称参数
dataset_name = wf.Placeholder(name="dataset_placeholder_name", placeholder_type=wf.PlaceholderType.STR)

create_dataset = wf.steps.CreateDatasetStep(
    name="create_dataset",# 数据集创建节点的名称,命名规范(只能包含英文字母、数字、下划线(_)、中划线(-),并且只能以英文字母开头,长度限制为64字符),一个Workflow里的两个step名称不能重复
    title="数据集创建", # 标题信息,不填默认使用name值
    inputs=wf.steps.CreateDatasetInput(name="input_name", data=wf.data.OBSPlaceholder(name="obs_placeholder_name", object_type="directory")),# CreateDatasetStep的输入,数据在运行时进行配置;data字段也可使用wf.data.OBSPath(obs_path="fake_obs_path")对象表示
    outputs=wf.steps.CreateDatasetOutput(name="output_name", config=wf.data.OBSOutputConfig(obs_path=dataset_output_path)),# CreateDatasetStep的输出
    properties=wf.steps.DatasetProperties(
        dataset_name=dataset_name, # 该名称对应的数据集如果不存在,则创建新的数据集;如果已存在,则直接使用该名称对应的数据集
        data_type=wf.data.DataTypeEnum.IMAGE, # 数据集对应的数据类型, 示例为图像
        import_config=wf.steps.ImportConfig(
            annotation_format_config=[
                wf.steps.AnnotationFormatConfig(
                    format_name=wf.steps.AnnotationFormatEnum.MA_IMAGE_CLASSIFICATION_V1, # 已标注数据的标注格式
                    scene=wf.data.LabelTaskTypeEnum.IMAGE_CLASSIFICATION) # 标注的场景类型
            ]
        )
    )
)
# 注意dataset_name这个参数配置的数据集名称需要用户自行确认在该账号下未被他人使用,否则会导致期望的数据集未被创建,而后续节点错误使用了他人创建的数据集

workflow = wf.Workflow(
    name="create-dataset-demo",
    desc="this is a demo workflow",
    steps=[create_dataset]
)

相关文档