当地¶
这包含可用于运行 TorchX 的 TorchX 本地调度器 组件。
- torchx.schedulers.local_scheduler 类。LocalScheduler(session_name: str, image_provider_class: Callable[[LocalOpts], ImageProvider],cache_size:int = 100,extra_paths:可选[List[str]] = 无)[来源]¶
基地:
Scheduler
[LocalOpts
]在 localhost 上调度。容器被建模为进程和 容器的某些不相关的属性 或者无法对 localhost 强制执行 runs。被忽略的属性:
资源要求
资源限制实施
重试策略
重试计数(不支持重试)
部署首选项
调度器支持在接收 SIGTERM 或 SIGINT 时进行孤立进程清理。 调度程序将终止生成的进程。
这是通过 scheduler local_cwd 公开的。
local_cwd 相对于当前工作运行 目录下,并忽略 images 字段以加快迭代和测试速度 目的。
注意
孤立项清理仅在从主线程实例化 LocalScheduler 时起作用。
配置选项
usage: [log_dir=LOG_DIR],[prepend_cwd=PREPEND_CWD],[auto_set_cuda_visible_devices=AUTO_SET_CUDA_VISIBLE_DEVICES] optional arguments: log_dir=LOG_DIR (str, None) dir to write stdout/stderr log files of replicas prepend_cwd=PREPEND_CWD (bool, False) if set, prepends CWD to replica's PATH env var making any binaries in CWD take precedence over those in PATH auto_set_cuda_visible_devices=AUTO_SET_CUDA_VISIBLE_DEVICES (bool, False) sets the `CUDA_AVAILABLE_DEVICES` for roles that request GPU resources. Each role replica will be assigned one GPU. Does nothing if the device count is less than replicas.
兼容性
注意
由于调度程序差异,本地运行的作业在以下情况下可能无法工作 由于网络或软件依赖性,使用不同的调度程序。
特征
计划程序支持
获取日志
✔️
分布式作业
LocalScheduler 支持多个副本,但所有副本都将 在本地主机上执行。
取消作业
✔️
描述任务
✔️
工作区 / 修补
部分支持。LocalScheduler 从本地 目录中,但不支持编程工作区。
坐骑
❌
弹性
❌
- close() None [来源]¶
仅适用于具有本地状态的调度器!关闭调度程序 释放任何已分配的资源。关闭后,scheduler 对象 被视为不再有效,并且对对象调用的任何方法 导致未定义的行为。
此方法不应引发异常,并且允许调用 对同一对象进行多次作。
注意
仅对具有本地状态的调度程序实现进行覆盖 (). Scheduler 只需包装远程 scheduler 的 Client 端就不需要 实现此方法。
torchx/schedulers/local_scheduler.py
- describe(app_id: str) 可选[DescribeAppResponse] [来源]¶
描述指定的应用程序。
- 结果
AppDef 描述,或者应用程序不存在。
None
- list() List[ListAppResponse] [来源]¶
对于在调度程序上启动的应用程序,此 API 返回 ListAppResponse 列表 对象,每个对象都有 App ID 及其 Status。 注意:此 API 处于原型阶段,可能会发生更改。
- log_iter(app_id: str, role_name: str, k: int = 0, 正则表达式: 可选[str] = 无,因为: 可选[日期时间] = 无,直到:可选[日期时间] = 无,should_tail:bool = False,流: 可选[stream] = None) Iterable[str] [来源]¶
返回 . 当读取了所有符合条件的 log 行时,迭代器结束。
k``th replica of the ``role
如果调度程序支持基于时间的游标获取日志行 对于自定义时间范围,则 , 字段为 honored,否则将被忽略。未指定 ,相当于获取所有可用的日志行。如果 是 empty,则迭代器的行为类似于 ,跟在日志输出之后 直到作业达到 END 状态。
since
until
since
until
until
tail -f
构成日志的确切定义特定于计划程序。一些 调度器可能会将 stderr 或 stdout 视为日志,其他人可能会读取日志 从日志文件中。
行为和假设:
如果在不存在的应用程序上调用,则生成 undefined-behavior 调用方应在调用此方法之前检查应用是否存在 using。
exists(app_id)
不是有状态的,使用相同的参数调用此方法两次 返回一个新的迭代器。先前迭代 进度丢失。
并不总是支持对数拖尾。并非所有调度程序都支持 live 日志迭代(例如,在应用程序运行时跟踪日志)。指 Iterator 行为的特定 scheduler 文档。
- 3.1 如果调度器支持 log-tailing,应该对其进行控制
by 参数。
should_tail
不保证日志保留。有可能到这个 方法调用时,底层调度程序可能已经清除了日志记录 对于此应用程序。如果是这样,此方法将引发任意异常。
如果为 True,则该方法仅引发异常 当可访问的日志行已完全耗尽并且应用程序已达到 最终状态。例如,如果应用程序卡住并且没有产生任何日志行, 然后 iterator 会阻塞,直到应用程序最终被杀死(通过 timeout 或手动),此时它会引发一个 .
should_tail
StopIteration
StopIteration
如果为 False,则当没有更多日志时,该方法将引发。
should_tail
StopIteration
不需要所有调度程序都支持。
一些调度器可能通过支持 line cursor(例如 寻找第 50 个对数行)。
__getitem__
iter[50]
- 保留空格,每个新行应包含 。自
\n
支持交互式进度条返回的行不需要 include 的 m,但随后应打印时不带换行符 正确处理回车。
\n
\r
- 保留空格,每个新行应包含 。自
- 参数
streams – 要选择的 IO 输出流。 其中之一: combined, stdout, stderr. 如果调度程序不支持所选流,它将 throw 一个 ValueError 的 Error。
- 结果
指定角色副本的 over log lines
Iterator
- 提升:
NotImplementedError – 如果调度程序不支持日志迭代
- schedule(dryrun_info: AppDryRunInfo[PopenRequest]) str [源代码]¶
相同,只是它需要一个 . 鼓励实现者实现此方法,而不是 直接实现 since 可以很简单 实施者:
submit
AppDryRunInfo
submit
submit
dryrun_info = self.submit_dryrun(app, cfg) return schedule(dryrun_info)
图像提供程序¶
- torchx.schedulers.local_scheduler 类。ImageProvider[来源]¶
管理下载和设置 on localhost。这仅在 b2 中是必需的,因为通常真正的调度程序会执行此作 代表用户。
LocalhostScheduler
- fetch_role(role: Role) str [来源]¶
与它获取角色的 image 并返回镜像根目录的路径,但 它允许此提供程序更新角色。有用 当需要在角色上设置其他环境变量时 为了遵守图片提供商的获取和管理方式 localhost 上的映像。默认情况下,此方法只是将 自。如有必要,请覆盖。
fetch(image)
fetch(role.image)
- get_replica_param(img_root: str, role: 角色, stdout: 可选 [str] = 无,stderr: 可选[str] = 无,组合: 可选[str] = None) ReplicaParam [来源]¶
给定角色 replica 的 specs returns holder 其中包含最终要传递给的参数,以实际调用和运行每个角色的副本。预计 为 的返回值。 由于角色的镜像只需要获取一次(不是每个副本) 调用方应为每个角色调用一次方法 并为每个 .
ReplicaParam
subprocess.Popen
img_root
self.fetch(role.image)
fetch
role.num_replicas
- torchx.schedulers.local_scheduler 类。CWDImageProvider(cfg: LocalOpts)[来源]¶
但是,与 LocalDirectoryImageProvider 类似,它会忽略映像名称和 使用当前工作目录作为映像路径。
例:
fetch(Image(name="/tmp/foobar"))
返回 os.getcwd()fetch(Image(name="foobar:latest"))
返回 os.getcwd()
- torchx.schedulers.local_scheduler 类。LocalDirectoryImageProvider(cfg: LocalOpts)[来源]¶
将镜像名称解释为 本地主机。不 “获取” (例如 下载) 任何内容。结合使用 with 运行本地二进制文件。
LocalScheduler
镜像名称必须是绝对路径,并且必须存在。
例:
fetch(Image(name="/tmp/foobar"))
返回/tmp/foobar
fetch(Image(name="foobar"))
提高ValueError
fetch(Image(name="/tmp/dir/that/does/not_exist"))
提高ValueError
- fetch(图片:str) str [来源]¶
- 提升:
ValueError – 如果图像名称不是绝对目录,并且如果它 不存在或不是目录
参考¶
- torchx.schedulers.local_scheduler。create_scheduler(session_name: str, **kwargs: Any) LocalScheduler [来源]¶
- torchx.schedulers.local_scheduler 类。LogIterator(app_id: str, log_file: str, scheduler: 调度器, should_tail: bool = True)[来源]¶
- torchx.schedulers.local_scheduler 类。PopenRequest(app_id: str, log_dir: str, role_params: Dict[str, List[ReplicaParam]], role_log_dirs: Dict[str, List[str]])[来源]¶
保存参数以为每个角色的每个副本创建一个子流程 的应用程序。