Skip to main content

PyTorch Lightning

tip

如果您尚未使用ClearML,请参阅入门指南以获取设置说明。

PyTorch Lightning 是一个简化训练和部署 PyTorch 模型过程的框架。ClearML 无缝集成了 PyTorch Lightning,自动记录 PyTorch 模型、由 LightningCLI 提供的参数等。

你只需要在你的PyTorch Lightning脚本中添加两行代码:

from clearml import Task

task = Task.init(task_name="<task_name>", project_name="<project_name>")

就这样!这将创建一个ClearML任务,它捕获:

  • Source code and uncommitted changes
  • Installed packages
  • PyTorch 模型
  • LightningCLI提供的参数(当类在脚本中实例化时)
  • TensorBoard 输出
  • Console Output
  • 一般详细信息,如机器详细信息、运行时间、创建日期等。
  • 还有更多

您可以在WebApp中查看所有任务的详细信息。

LightningCLI 参数

查看PyTorch Lightning和ClearML的实际示例这里

自动日志控制

默认情况下,当ClearML集成到您的脚本中时,它会自动从支持的框架中捕获信息,并从支持的参数解析器中捕获参数。但是,您可能希望更好地控制实验日志的内容。

框架

要控制任务的框架日志记录,请使用Task.init()auto_connect_frameworks参数。 通过将参数设置为False,可以完全禁用所有自动日志记录。为了更精细地控制记录的框架,可以输入一个包含框架-布尔对的字典。

例如,以下代码将记录PyTorch模型,但不会记录任何报告给TensorBoard的信息:

auto_connect_frameworks={
'pytorch': True, 'tensorboard': False, 'matplotlib': True, 'tensorflow': True,
'xgboost': True, 'scikit': True, 'fastai': True, 'lightgbm': True,
'hydra': True, 'detect_repository': True, 'tfdefines': True, 'joblib': True,
'megengine': True, 'catboost': True
}

您还可以将通配符作为字典值输入,因此只有当其本地路径至少匹配一个通配符时,ClearML 才会记录由框架创建的模型。

例如,在下面的代码中,ClearML 只会记录路径具有 .pt 扩展名的 PyTorch 模型。未指定框架的值默认为 true,因此它们的所有模型都会自动记录。

auto_connect_frameworks={'pytorch' : '*.pt'}

参数解析器

要控制任务从参数解析器记录参数的行为,请使用Task.init()auto_connect_arg_parser参数。 通过将该参数设置为False,可以完全禁用所有自动记录(这包括禁用LightningCLI参数的记录)。

auto_connect_arg_parser=False

为了更精细地控制记录的参数,输入一个包含参数-布尔对的字典。False值将排除指定的参数。未指定的参数默认为True

例如,以下代码将不会记录Example_1参数,但会记录所有其他参数。

auto_connect_arg_parser={"Example_1": False}

要排除所有未指定的参数,请将*键设置为False。例如,以下代码将记录Example_2参数。

auto_connect_arg_parser={"Example_2": True, "*": False}

手动日志记录

为了增强其自动日志记录功能,ClearML 还提供了一个显式的日志记录接口。

查看有关显式记录信息到ClearML任务的更多信息:

参见 显式报告教程

远程执行

ClearML 记录了在不同机器上重现实验所需的所有信息(已安装的包、未提交的更改等)。ClearML Agent 监听指定的队列,当任务入队时,代理会拉取它,重新创建其执行环境,并运行它,将其标量、图表等报告给实验管理器。

通过在任何机器上(例如云虚拟机、本地GPU机器、您自己的笔记本电脑)运行以下命令来部署ClearML代理:

clearml-agent daemon --queue <queues_to_listen_to> [--docker]

使用ClearML的自动扩展器,帮助您管理所选云(AWS、GCP、Azure)中的云工作负载,并自动部署ClearML代理:自动扩展器会根据您设置的资源预算,根据需要自动启动和关闭实例。

克隆、编辑和入队

克隆、编辑、排队 gif

使用ClearML的网页界面编辑任务详情,如配置参数或输入模型,然后在远程机器上使用新配置执行任务:

  • Clone Experiment
  • Edit hyperparameters and/or other details
  • 将任务加入队列

执行任务的ClearML代理将使用新值来覆盖任何硬编码的值

远程执行任务

你可以通过在你的脚本中添加Task.execute_remotely()来设置一个任务以编程方式远程执行。这个方法会停止当前任务的本地执行,然后将其加入指定的队列,以便在远程机器上重新运行。

# If executed locally, process will terminate, and a copy will be executed by an agent instead
task.execute_remotely(queue_name='default', exit_process=True)

超参数优化

使用ClearML的HyperParameterOptimizer类来找到产生最佳性能模型的超参数值。有关更多信息,请参阅超参数优化