管理#

NeMo-Run 中任务管理的核心组件是 Experiment 类。 它允许您定义、启动和管理由多个任务组成的复杂工作流程。 本指南概述了 Experiment 类、其方法以及如何有效使用它。

创建实验#

要创建实验,您可以实例化 Experiment 类,方法是传入描述性标题

exp = Experiment("My Experiment")

执行时,它将自动为您生成唯一的实验 ID,该 ID 代表实验的唯一运行。

[!NOTE] Experiment 是一个上下文管理器,并且 Experiment.addExperiment.run 方法目前只能在进入上下文管理器后使用。

添加任务#

您可以使用 add 方法向实验添加任务。 此方法支持以下类型的任务

  1. 单个任务,它是 run.Partialrun.Script 的实例,以及其执行器。

with exp:
    exp.add(task_1, executor=run.LocalExecutor())
  1. 任务列表,每个任务都是 run.Partialrun.Script 的实例,以及单个执行器或一组执行器(用于组中的每个任务)。 目前,组中的所有任务将并行执行。

with exp:
    exp.add([task_2, task_3], executor=run.DockerExecutor(...))

您可以使用 name 关键字参数为任务指定描述性名称。

add 还接受插件列表,每个插件都是 run.Plugin 的实例。 插件用于一起更改任务和执行器,这在某些情况下很有用 - 例如,在任务中启用配置选项并在执行器中设置与配置选项相关的环境变量。

add 返回任务/作业的唯一 ID。 此唯一 ID 可用于定义一组任务之间的复杂依赖关系,如下所示

with run.Experiment("dag-experiment", log_level="INFO") as exp:
    id1 = exp.add([inline_script, inline_script_sleep], tail_logs=False, name="task-1")
    id2 = exp.add([inline_script, inline_script_sleep], tail_logs=False, name="task-2")
    exp.add(
       [inline_script, inline_script_sleep],
       tail_logs=False,
       name="task-3",
       dependencies=[id1, id2], # task-3 will only run after task-1 and task-2 have completed
   )

启动实验#

将所有任务添加到实验后,您可以使用 run 方法启动它。 此方法接受几个可选参数,包括 detachsequentialtail_logsdirect

  • detach:如果为 True,则实验将从执行它的进程中分离。 这在远程集群上启动实验时很有用,在远程集群上,您可能希望在调度该实验中的任务后结束该进程。

  • sequential:如果为 True,则所有任务将按顺序执行。 这仅在单个任务彼此之间没有任何依赖关系时适用。

  • tail_logs:如果为 True,则日志将实时显示。

  • direct:如果为 True,则实验中的每个任务将直接在本地计算机上的同一进程中执行。 这不支持任务/作业组。

with exp:
    # Add all tasks
    exp.run(detach=True, sequential=False, tail_logs=True, direct=False)

实验状态#

您可以使用 status 方法检查实验的状态

exp.status()

此方法将显示实验中每个任务的状态信息。 以下是来自 hello_scripts.py 中实验状态的示例输出

Experiment Status for experiment_with_scripts_1730761155

Task 0: echo.sh
- Status: SUCCEEDED
- Executor: LocalExecutor
- Job id: echo.sh-zggz3tq0kpljs
- Local Directory: /home/your_user/.nemo_run/experiments/experiment_with_scripts/experiment_with_scripts_1730761155/echo.sh

Task 1: env_echo_
- Status: SUCCEEDED
- Executor: LocalExecutor
- Job id: env_echo_-f3fc3fbj1qjtc
- Local Directory: /home/your_user/.nemo_run/experiments/experiment_with_scripts/experiment_with_scripts_1730761155/env_echo_

Task 2: simple.add.add_object
- Status: RUNNING
- Executor: LocalExecutor
- Job id: simple.add.add_object-s1543tt3f7dcm
- Local Directory: /home/your_user/.nemo_run/experiments/experiment_with_scripts/experiment_with_scripts_1730761155/simple.add.add_object

取消任务#

您可以使用 cancel 方法取消任务

exp.cancel("task_id")

查看日志#

您可以使用 logs 方法查看任务的日志

exp.logs("task_id")

实验输出#

实验运行后,NeMo-Run 会显示有关如何检查和重现过去实验的信息。 这允许您检查日志、同步工件(将来)、取消正在运行的任务以及重新运行旧实验。

# The experiment was run with the following tasks: ['echo.sh', 'env_echo_', 'simple.add.add_object']
# You can inspect and reconstruct this experiment at a later point in time using:
experiment = run.Experiment.from_id("experiment_with_scripts_1720556256")
experiment.status() # Gets the overall status
experiment.logs("echo.sh") # Gets the log for the provided task
experiment.cancel("echo.sh") # Cancels the provided task if still running
# You can inspect this experiment at a later point in time using the CLI as well:
nemorun experiment status experiment_with_scripts_1720556256
nemorun experiment logs experiment_with_scripts_1720556256 0
nemorun experiment cancel experiment_with_scripts_1720556256 0

此信息特定于每个实验,说明如何管理它。

有关更多详细信息和可玩体验,请参阅 此笔记本