
# 创建Workflow数据集版本发布节点
#### 功能介绍
通过对ModelArts数据集能力进行封装，实现数据集的版本自动发布的功能。数据集版本发布节点主要用于将已存在的数据集或者标注任务进行版本发布，每个版本相当于数据的一个快照，可用于后续的数据溯源。主要应用场景如下：
- 对于数据标注这种操作，可以在标注完成后自动帮助用户发布新的数据集版本，结合as_input的能力提供给后续节点使用。
- 当模型训练需要更新数据时，可以使用数据集导入节点先导入新的数据，然后再通过该节点发布新的版本供后续节点使用。
#### 属性总览
您可以使用**ReleaseDatasetStep** 来构建数据集版本发布节点，**ReleaseDatasetStep**结构如下：
表1**ReleaseDatasetStep** 
| 属性           | 描述                                                                                          | 是否必填 | 数据类型                                          |
|:---|:---|:---|:---|
| name         | 数据集版本发布节点的名称，命名规范(只能包含英文字母、数字、下划线（_）、中划线（-），并且只能以英文字母开头，长度限制为64字符)，一个Workflow里的两个step名称不能重复 | 是    | str                                           |
| inputs       | 数据集版本发布节点的输入列表                                                                              | 是    | ReleaseDatasetInput或者ReleaseDatasetInput的列表   |
| outputs      | 数据集版本发布节点的输出列表                                                                              | 是    | ReleaseDatasetOutput或者ReleaseDatasetOutput的列表 |
| title        | title信息，主要用于前端的名称展示                                                                         | 否    | str                                           |
| description  | 数据集版本发布节点的描述信息                                                                              | 否    | str                                           |
| policy       | 节点执行的policy                                                                                 | 否    | StepPolicy                                    |
| depend_steps | 依赖的节点列表                                                                                     | 否    | Step或者Step的列表                                 |
   
表2**ReleaseDatasetInput** 
| 属性   | 描述                                                                                    | 是否必填 | 数据类型                                                                                                                                        |
|:---|:---|:---|:---|
| name | 数据集版本发布节点的输入名称，命名规范(只能包含英文字母、数字、下划线（_）、中划线（-），并且只能以英文字母开头，长度限制为64字符)。同一个Step的输入名称不能重复 | 是    | str                                                                                                                                         |
| data | 数据集版本发布节点的输入数据对象                                                                      | 是    | 数据集或标注任务相关对象，当前仅支持Dataset，DatasetConsumption，DatasetPlaceholder，LabelTask，LabelTaskPlaceholder，LabelTaskConsumption，DataConsumptionSelector |
   
表3**ReleaseDatasetOutput** 
| 属性                     | 描述                                                                                    | 是否必填 | 数据类型                 |
|:---|:---|:---|:---|
| name                   | 数据集版本发布节点的输出名称，命名规范(只能包含英文字母、数字、下划线（_）、中划线（-），并且只能以英文字母开头，长度限制为64字符)。同一个Step的输出名称不能重复 | 是    | str                  |
| dataset_version_config | 数据集版本发布相关配置信息                                                                         | 是    | DatasetVersionConfig |
   
**表4 DatasetVersionConfig**
| 属性                          | 描述                                                             | 是否必填 | 数据类型                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
|:---|:---|:---|:---|
| version_name                | 数据集版本名称，推荐使用类似V001的格式，不填则默认从V001往上递增。                          | 否    | str或者Placeholder                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| version_format              | 版本格式，默认为"Default"，也可支持"CarbonData"。                            | 否    | str                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| train_evaluate_sample_ratio | 训练-验证集比例，默认值为"1.00"。取值范围为0-1.00， 例如"0.8"表示训练集比例为80%，验证集比例为20%。 | 否    | str或者Placeholder                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| clear_hard_property         | 是否清除难例，默认为"True"。                                              | 否    | bool或者Placeholder                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| remove_sample_usage         | 是否清除数据集已有的usage信息，默认为"True"。                                   | 否    | bool或者Placeholder                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| label_task_type             | 标注任务的类型。当输入是数据集时，该字段必填，用来指定数据集版本的标注场景。输入是标注任务时该字段不用填写。         | 否    | LabelTaskTypeEnum 支持以下几种类型： - IMAGE_CLASSIFICATION （图像分类）  - OBJECT_DETECTION = 1 （物体检测）  - IMAGE_SEGMENTATION （图像分割）  - TEXT_CLASSIFICATION （文本分类）  - NAMED_ENTITY_RECOGNITION （命名实体）  - TEXT_TRIPLE （文本三元组）  - AUDIO_CLASSIFICATION （声音分类）  - SPEECH_CONTENT （语音内容）SPEECH_SEGMENTATION （语音分割）  - TABLE （表格数据）  - VIDEO_ANNOTATION （视频标注）   |
| description                 | 版本描述信息。                                                        | 否    | str                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
   
![](https://support.huaweicloud.com/usermanual-standard-modelarts/public_sys-resources/note_3.0-zh-cn.png)
如果您没有特殊需求，则可直接使用内置的默认值，例如example = DatasetVersionConfig()
#### 使用案例
场景一：基于数据集发布版本
使用场景：当数据集更新了数据时，可以通过该节点发布新的数据集版本供后续的节点使用。
```
from modelarts import workflow as wf
# 通过ReleaseDatasetStep将输入的数据集对象发布新的版本，输出带有版本信息的数据集对象
# 定义数据集对象
dataset = wf.data.DatasetPlaceholder(name="input_dataset")
# 定义训练验证切分比参数
train_ration = wf.Placeholder(name="placeholder_name", placeholder_type=wf.PlaceholderType.STR, default="0.8")
release_version = wf.steps.ReleaseDatasetStep(
    name="release_dataset", # 数据集发布节点的名称，命名规范(只能包含英文字母、数字、下划线（_）、中划线（-），并且只能以英文字母开头，长度限制为64字符)，一个Workflow里的两个step名称不能重复
    title="数据集版本发布", # 标题信息，不填默认使用name值
    inputs=wf.steps.ReleaseDatasetInput(name="input_name", data=dataset), # ReleaseDatasetStep的输入，数据集对象在运行时配置；data字段也可使用wf.data.Dataset(dataset_name="dataset_name")表示
    outputs=wf.steps.ReleaseDatasetOutput(
        name="output_name", 
        dataset_version_config=wf.data.DatasetVersionConfig(
            label_task_type=wf.data.LabelTaskTypeEnum.IMAGE_CLASSIFICATION,  # 数据集发布版本时需要指定标注任务的类型
            train_evaluate_sample_ratio=train_ration # 数据集的训练验证切分比
            )
    ) # ReleaseDatasetStep的输出
)
workflow = wf.Workflow(
    name="dataset-release-demo",
    desc="this is a demo workflow",
    steps=[release_version]
)
```
场景二：基于标注任务发布版本
当标注任务更新了数据或者标注信息时，可以通过该节点发布新的数据集版本供后续的节点使用。
```
from modelarts import workflow as wf
# 通过ReleaseDatasetStep将输入的标注任务对象发布新的版本，输出带有版本信息的数据集对象
# 定义标注任务对象
label_task = wf.data.LabelTaskPlaceholder(name="label_task_placeholder_name")
# 定义训练验证切分比参数
train_ration = wf.Placeholder(name="placeholder_name", placeholder_type=wf.PlaceholderType.STR, default="0.8")
release_version = wf.steps.ReleaseDatasetStep(
    name="release_dataset", # 数据集发布节点的名称，命名规范(只能包含英文字母、数字、下划线（_）、中划线（-），并且只能以英文字母开头，长度限制为64字符)，一个Workflow里的两个step名称不能重复
    title="数据集版本发布", # 标题信息，不填默认使用name值
    inputs=wf.steps.ReleaseDatasetInput(name="input_name", data=label_task), # ReleaseDatasetStep的输入，
标注任务对象在运行时配置；data字段也可使用wf.data.LabelTask(dataset_name="dataset_name", task_name="label_task_name")表示
    outputs=wf.steps.ReleaseDatasetOutput(name="output_name", dataset_version_config=wf.data.DatasetVersionConfig(train_evaluate_sample_ratio=train_ration)), # 数据集的训练验证切分比
)
workflow = wf.Workflow(
    name="dataset-release-demo",
    desc="this is a demo workflow",
    steps=[release_version]
)
```
场景三：基于数据集标注节点，构建数据集版本发布节点
使用场景：数据集标注节点的输出作为数据集版本发布节点的输入。
```
from modelarts import workflow as wf
# 通过ReleaseDatasetStep将输入的标注任务对象发布新的版本，输出带有版本信息的数据集对象
# 定义训练验证切分比参数
train_ration = wf.Placeholder(name="placeholder_name", placeholder_type=wf.PlaceholderType.STR, default="0.8")
release_version = wf.steps.ReleaseDatasetStep(
    name="release_dataset", # 数据集发布节点的名称，命名规范(只能包含英文字母、数字、下划线（_）、中划线（-），并且只能以英文字母开头，长度限制为64字符)，一个Workflow里的两个step名称不能重复
    title="数据集版本发布", # 标题信息，不填默认使用name值
    inputs=wf.steps.ReleaseDatasetInput(name="input_name", data=labeling_step.outputs["output_name"].as_input()), # ReleaseDatasetStep的输入，
标注任务对象在运行时配置；data字段也可使用wf.data.LabelTask(dataset_name="dataset_name", task_name="label_task_name")表示
    outputs=wf.steps.ReleaseDatasetOutput(name="output_name", dataset_version_config=wf.data.DatasetVersionConfig(train_evaluate_sample_ratio=train_ration)), # 数据集的训练验证切分比
    depend_steps = [labeling_step] # 依赖的数据集标注节点对象
)
# labeling_step是wf.steps.LabelingStep的实例对象，output_name是wf.steps.LabelingOutput的name字段值
workflow = wf.Workflow(
    name="dataset-release-demo",
    desc="this is a demo workflow",
    steps=[release_version]
)
```
