Skip to main content

安排工作时间

Enterprise Feature

此功能在ClearML企业版计划下可用。

代理调度器允许为每个代理安排工作时间。在工作时间内,工作人员将主动轮询队列以获取任务,获取并执行它们。在工作时间之外,工作人员将处于空闲状态。

按以下方式安排工作人员:

  • 设置配置文件选项
  • 从命令行运行 clearml-agent(覆盖配置文件选项)

通过以下方式覆盖工作日程:

  • 设置运行时属性以强制开启或关闭工作器
  • 标记队列的开启或关闭

使用计划运行 clearml-agent(命令行)

在运行clearml-agent时,从命令行设置工作者的时间表。两个属性可以设置工作时间:

warning

仅使用这些属性中的一个

  • uptime - 工作线程将主动轮询队列以获取任务并执行它们的时间段。在此时间段之外,工作线程将处于空闲状态。
  • downtime - 工作人员将处于空闲状态的时间段。在此时间段之外,工作人员将主动轮询并执行任务。

定义 uptimedowntime" ",其中:

  • - 一个时间跨度的小时数(00-23)或单个小时。单个小时定义了从该小时到午夜的时间跨度。
  • - 一段时间的天数(SUN-SAT)或单独的一天。

使用-表示一个范围,使用,分隔单个值。要从午夜前跨越到午夜后,请使用两个范围。

例如:

  • "20-23 SUN" - Every Sunday night from 8 PM to 11 PM.
  • "20-23 SUN,TUE" - Every Sunday and Tuesday from 8 PM to 11 PM.
  • "20-23 SUN-TUE" - Every Sunday, Monday, and Tuesday from 8 PM to 11 PM.
  • "20 SUN" - 周日晚8点到午夜。
  • "20-00,00-08 SUN" - 周日晚8点到午夜以及午夜到早上8点
  • "20-00 SUN", "00-08 MON" - 周日晚8点到周一早8点(跨越午夜前后)。

在配置文件中设置工作程序计划

使用配置文件选项为工作人员设置时间表。选项包括:

warning

仅使用这些属性中的一个

  • agent.uptime
  • agent.downtime

使用与命令行中相同的天数和小时的时间跨度格式。

例如,设置一个工人的时间表,从周日至周二下午5点到晚上8点,周三下午1点到晚上10点。

agent.uptime: ["17-20 SUN-TUE", "13-22 WED"]

使用运行时属性覆盖工作调度

运行时属性会覆盖命令行的正常运行时间/停机时间属性。运行时属性包括:

warning

仅使用这些属性中的一个

  • force:on - 拉取并执行任务,直到属性过期。
  • force:off - 防止拉取和执行任务,直到属性过期。

目前,这些运行时属性只能通过调用ClearML REST API的workers.set_runtime_properties端点来设置,如下所示:

  • 请求的主体必须包含worker-id,以及要添加的运行时属性。
  • 过期日期是可选的。使用格式 "expiry":。例如,"expiry":86400 将设置24小时的过期时间。
  • 要删除属性,将过期日期设置为零,"expiry":0

例如,强制一个工人工作24小时:

curl --user <key>:<secret> --header "Content-Type: application/json" --data '{"worker":"<worker_id>","runtime_properties":[{"key": "force", "value": "on", "expiry": 86400}]}' http://<api-server-hostname-or-ip>:8008/workers.set_runtime_properties

使用队列标签覆盖工作者计划

队列标签覆盖命令行和运行时属性。队列标签如下:

warning

仅使用这些属性中的一个

  • force_workers:on - 任何监听队列的工作者将持续从队列中拉取任务。
  • force_workers:off - 防止所有监听队列的工作者从队列中拉取任务。

目前,您可以使用ClearML REST API调用queues.update端点或APIClient来设置队列标签。调用的主体必须包含queue-id和要添加的标签。

例如,使用APIClient强制队列中的工作者工作:

from clearml.backend_api.session.client import APIClient

client = APIClient()
client.queues.update(queue="<queue_id>", tags=["force_workers:on"])

或者,使用REST API强制为队列启用工作者:

curl --user <key>:<secret> --header "Content-Type: application/json" --data '{"queue":"<queue_id>","tags":["force_workers:on"]}' http://<api-server-hostname-or-ip>:8008/queues.update