安排工作时间
Enterprise Feature
此功能在ClearML企业版计划下可用。
代理调度器允许为每个代理安排工作时间。在工作时间内,工作人员将主动轮询队列以获取任务,获取并执行它们。在工作时间之外,工作人员将处于空闲状态。
按以下方式安排工作人员:
- 设置配置文件选项
- 从命令行运行
clearml-agent
(覆盖配置文件选项)
通过以下方式覆盖工作日程:
- 设置运行时属性以强制开启或关闭工作器
- 标记队列的开启或关闭
使用计划运行 clearml-agent(命令行)
在运行clearml-agent
时,从命令行设置工作者的时间表。两个属性可以设置工作时间:
warning
仅使用这些属性中的一个
uptime
- 工作线程将主动轮询队列以获取任务并执行它们的时间段。在此时间段之外,工作线程将处于空闲状态。downtime
- 工作人员将处于空闲状态的时间段。在此时间段之外,工作人员将主动轮询并执行任务。
定义 uptime
或 downtime
为 "
,其中:
- 一个时间跨度的小时数(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