Skip to main content

下一步

一旦任务被定义并进入ClearML系统,它们可以被链接在一起以创建管道。 管道为用户提供了更高层次的抽象和自动化,任务一个接一个地运行。

任务可以与管道中的其他任务进行交互,并利用其他任务的工作成果。

以下部分描述了以下场景:

构建任务

数据集创建

假设你有一些代码从生产数据库中提取数据到本地文件夹。 你的目标是创建一个不可变的数据副本,以供后续步骤使用:

clearml-data create --project data --name dataset
clearml-data sync --folder ./from_production

你可以向数据集添加一个标签latest,将其标记为最新版本。

预处理数据

第二步是预处理数据。首先访问数据,然后修改它,最后创建数据的新版本。

from clearml import Task, Dataset

# create a task for the data processing part
task = Task.init(project_name='data', task_name='create', task_type='data_processing')

# get the v1 dataset
dataset = Dataset.get(dataset_project='data', dataset_name='dataset_v1')

# get a local mutable copy of the dataset
dataset_folder = dataset.get_mutable_local_copy(
target_folder='work_dataset',
overwrite=True
)
# change some files in the `./work_dataset` folder

# create a new version of the dataset with the pickle file
new_dataset = Dataset.create(
dataset_project='data',
dataset_name='dataset_v2',
parent_datasets=[dataset],
# this will make sure we have the creation code and the actual dataset artifacts on the same Task
use_current_task=True,
)
new_dataset.sync_folder(local_path=dataset_folder)
new_dataset.upload()
new_dataset.finalize()
# now let's remove the previous dataset tag
dataset.tags = []
new_dataset.tags = ['latest']

新数据集继承了在Dataset.createparent_datasets参数中指定的数据集的内容。 这不仅有助于通过完整的谱系追溯数据集的变化,还使存储更加高效, 因为它只存储父版本中更改和/或添加的文件。 当您访问数据集时,它会自动合并所有父版本中的文件, 这个过程是完全自动和透明的,就像这些文件一直是所请求数据集的一部分一样。

训练

你现在可以使用系统中最新的数据集来训练你的模型,通过基于latest标签获取数据集的实例 (如果你有两个相同标签的数据集,你将获得最新的那个)。 一旦你有了数据集,你可以请求数据的本地副本。所有的本地副本请求都会被缓存, 这意味着如果你多次访问相同的数据集,你将不会有任何不必要的下载。

# create a task for the model training
task = Task.init(project_name='data', task_name='ingest', task_type='training')

# get the latest dataset with the tag `latest`
dataset = Dataset.get(dataset_tags='latest')

# get a cached copy of the Dataset files
dataset_folder = dataset.get_local_copy()

# train our model here

构建管道

现在你已经有了数据创建步骤和数据训练步骤,创建一个管道,当执行时,将首先运行第一个步骤,然后运行第二个步骤。 重要的是要记住,管道本身也是任务,也可以被其他管道自动化(即管道的管道)。

from clearml import PipelineController

pipe = PipelineController(
project='data',
name='pipeline demo',
version="1.0"
)

pipe.add_step(
name='step 1 data',
base_project_name='data',
base_task_name='create'
)
pipe.add_step(
name='step 2 train',
parents=['step 1 data', ],
base_project_name='data',
base_task_name='ingest'
)

您还可以将参数从一个步骤传递到另一个步骤(例如 Task.id)。 除了由任务步骤组成的管道外,ClearML 还支持由函数步骤组成的管道。更多信息,请参阅 完整的管道文档