Skip to main content

工件报告

artifacts.py 示例演示了将对象(除了模型)作为实验工件上传到存储。

这些工件包括:

  • Pandas 数据框
  • Local files, dictionaries
  • Folder
  • Numpy 对象
  • 图像文件

工件可以上传并动态跟踪,或者上传而不进行跟踪。

配置ClearML以将工件上传到任何支持类型的存储,包括本地和共享文件夹、S3存储桶、Google云存储和Azure存储(调试示例存储不同)。可以通过以下任一方式配置ClearML:

当脚本运行时,它会在examples项目中创建一个名为artifacts example的实验。

ClearML 在 ClearML Web UI > 实验详情 > ARTIFACTS 标签中报告工件。

实验工件

动态追踪的工件

ClearML 支持上传并动态跟踪 Pandas 数据框。使用 Task.register_artifact() 将数据框添加到任务中。如果数据框被修改,ClearML 将自动更新更改。

例如:

df = pd.DataFrame(
{
'num_legs': [2, 4, 8, 0],
'num_wings': [2, 0, 0, 0],
'num_specimen_seen': [10, 2, 1, 8]
},
index=['falcon', 'dog', 'spider', 'fish']
)

# Register Pandas object as artifact to watch
# (it will be monitored in the background and automatically synced and uploaded)
task.register_artifact(
name='train',
artifact=df,
metadata={'counting': 'legs', 'max legs': 68}
)

通过修改工件,并调用Task.get_registered_artifacts()来检索它,你可以看到ClearML正在跟踪这些变化:

# change the artifact object
df.sample(frac=0.5, replace=True, random_state=1)
# or access it from anywhere using the Task's get_registered_artifacts()
Task.current_task().get_registered_artifacts()['train'].sample(frac=0.5, replace=True, random_state=1)

无追踪的工件

ClearML 支持几种可以上传且不被跟踪的对象类型。使用 Task.upload_artifact 方法。

未跟踪的工件包括:

  • Pandas 数据框
  • Local Files
  • 字典(存储为JSON格式)
  • Numpy 对象(存储为 NPZ 文件)
  • 图像文件(存储为PNG文件)
  • Folder (stored as ZIP file)
  • 通配符(存储为ZIP文件)

Pandas 数据框

# add and upload pandas.DataFrame (onetime snapshot of the object)
task.upload_artifact(name='Pandas', artifact_object=df)

本地文件

# add and upload local file artifact
task.upload_artifact(
name='local file',
artifact_object=os.path.join(
'data_samples',
'dancing.jpg'
)
)

字典

# add and upload dictionary stored as JSON
task.upload_artifact(name='dictionary', artifact_object=df.to_dict())

Numpy 对象

# add and upload Numpy Object (stored as .npz file)
task.upload_artifact(name='Numpy Eye', artifact_object=np.eye(100, 100))

图像文件

# add and upload Image (stored as .png file)
im = Image.open(os.path.join('data_samples', 'dancing.jpg'))
task.upload_artifact(name='pillow_image', artifact_object=im)

文件夹

# add and upload a folder, artifact_object should be the folder path
task.upload_artifact(name='local folder', artifact_object=os.path.join('data_samples'))

通配符

# add and upload a wildcard
task.upload_artifact(name='wildcard jpegs', artifact_object=os.path.join('data_samples', '*.jpg'))