Skip to main content

模型

以下页面提供了ClearML模型的基本Python接口的概述。

ClearML 提供了以下类来处理模型:

  • Model - 表示一个ClearML模型,无论是否与任何任务相关联。使用此类以编程方式访问和管理ClearML模型存储。
  • InputModel - 表示要在实验中使用的ClearML模型。使用此类从ClearML的模型存储中加载模型,或从外部资源导入预训练模型,作为实验的初始起点。
  • OutputModel - 表示实验的输出模型(训练结果)。一个OutputModel总是与一个task相关联,因此这些模型可以追溯到实验。

输出模型

手动记录模型

要手动记录模型,请创建 OutputModel 类的实例。

from clearml import OutputModel, Task

# Instantiate a Task
task = Task.init(project_name="myProject", task_name="myTask")

# Create an output model for the PyTorch framework
output_model = OutputModel(task=task, framework="PyTorch")

您可以设置模型将被上传到的目的地及其标签枚举,分别使用 OutputModel.set_upload_destinationOutputModel.update_labels 方法。

# Set the URI of the storage destination for uploaded model weight files
output_model.set_upload_destination(uri=models_upload_destination)

# Set the label numeration
output_model.update_labels({'background': 0, 'label': 255})

更新模型

ClearML 不会自动记录手动记录的模型的快照。要更新实验的模型,请使用 OutputModel.update_weights 方法。

# If validation shows this network is the best so far, update the output model
if val_log['iou'] > best_iou:
output_model.update_weights(weights_filename='models/model.pth')
  • 指定要上传的本地权重文件的路径(weights_filename),或远程权重文件的网络位置(registered_uri)。
  • 使用 upload_uri 参数明确指定权重文件的上传目标。
  • 模型元数据
    • update_comment - 更新模型的描述
    • iteration - 输入迭代次数

或者,通过其关联的任务更新模型,使用 Task.update_output_model 方法。

输入模型

使用注册模型

要使用ClearML模型作为输入模型,创建一个InputModel对象并将其连接到一个任务。

# Create an input model using the ClearML ID of a model already registered in the ClearML platform
input_model = InputModel(model_id="fd8b402e874549d6944eebd49e37eb7b")

# Connect the input model to the task
task.connect(input_model)

导入模型

要导入现有模型,请使用 InputModel.import_model 类方法,并指定 weights_url - 导入模型的URL。如果该URL已存在于ClearML服务器中,则会被重复使用。否则,将注册一个新模型。

然后connect将模型连接到任务。

# Instantiate a Task 
task = Task.init(project_name="examples", task_name="example task")

input_model = InputModel.import_model(
# Name for model in ClearML
name='Input Model with Network Design',
# Import the model using a URL
weights_url='https://s3/models/model.pth',
# Set label enumeration values
label_enumeration={'person' : 1, 'car' : 2, 'truck' : 3, 'bus' : 4,
'motorcycle' : 5, 'bicycle' : 6, 'ignore': -1},
framework='PyTorch'
)

# Connect the input model to the task
task.connect(input_model)

访问模型

查询模型

通过使用Model.query_models和/或InputModel.query_models类方法,通过模型名称、项目、标签等查询系统来检索模型对象列表。这些方法返回与查询匹配的模型对象列表。列表根据模型的最后更新时间排序。

model_list = Model.query_models(
# Only models from `examples` project
project_name='examples',
# Only models with input name
model_name=None,
# Only models with `demo` tag or models without `TF` tag
tags=['demo', '-TF'],
# If `True`, only published models
only_published=False,
# If `True`, include archived models
include_archived=True,
# Maximum number of models returned
max_results=5,
# Only models with matching metadata
metadata={"key":"value"}
)

标签过滤器

tags 字段支持通过将标签名称和运算符组合成列表来进行高级查询。

支持的运算符有:

  • not
  • and
  • or

按照以下格式输入操作符:"__$"。要排除一个标签,你也可以在标签名前使用-前缀,除非标签名以破折号字符(-)开头,在这种情况下你可以使用"__$not"

orand 运算符适用于它们之后的所有标签,直到指定另一个运算符为止。not 运算符仅适用于紧随其后的标签。

查询的默认操作符是or,除非在查询的开头放置and

示例

  • 以下查询将返回至少具有提供标签之一的模型,因为默认操作符是 or ("a" OR "b" OR "c")

    model_list = Model.query_models(tags=["a", "b", "c"])
  • 以下查询将返回具有所有三个提供标签的模型,因为and操作符被放置在列表的开头,使其成为默认操作符("a" AND "b" AND "c")。

    model_list = Model.query_models(tags=["__$and", "a", "b", "c"])
  • 以下查询将返回既没有标签a也没有标签c,但有标签b的模型 (NOT "a" AND "b" AND NOT "c")。

    model_list = Model.query_models(tags=["__$not", "a", "b", "__$not" "c"])
  • 以下查询将返回带有标签 a 或标签 b 或同时带有标签 cd 的模型 ("a" OR "b" OR ("c" AND "d"))。

    model_list = Model.query_models(tags=["a", "b", "__$and", "c", "d"])
  • 以下查询将返回具有标签a或标签b以及同时具有标签c和标签d的模型 (("a" OR "b") AND "c" AND "d")。

    model_list = Model.query_models(
    tags=["__$and", "__$or", "a", "b", "__$and", "c", "d"]
    )

检索模型

通过Model/InputModel对象的get_local_copy()方法检索ClearML模型的本地副本。 该方法返回模型缓存本地副本的路径。如果模型已经缓存,您可以设置 force_downloadTrue以下载新版本。

记录指标和图表

使用以下方法将附加信息显式记录到您的模型中。 这些方法可以用于ModelInputModel和/或OutputModel对象:

SDK 参考

有关所有模型方法的信息,请参阅以下SDK参考页面: