工件报告
artifacts.py 示例演示了将对象(除了模型)作为实验工件上传到存储。
这些工件包括:
- Pandas 数据框
- Local files, dictionaries
- Folder
- Numpy 对象
- 图像文件
工件可以上传并动态跟踪,或者上传而不进行跟踪。
配置ClearML以将工件上传到任何支持类型的存储,包括本地和共享文件夹、S3存储桶、Google云存储和Azure存储(调试示例存储不同)。可以通过以下任一方式配置ClearML:
- 在配置文件中,设置
default_output_uri
。 - 在代码中,当初始化任务时,使用
output_uri
参数。 - 在ClearML Web UI中,当修改实验时。
当脚本运行时,它会在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'))