IBM Spectrum LSF¶
它包含 TorchX LSF 调度程序,可用于在 LSF 集群上运行 TorchX 组件。
此调度程序处于原型阶段,可能会在未经通知的情况下更改。如果您遇到任何问题或有任何反馈,请提交问题。
先决条件¶
您需要一个现有的 LSF 集群来运行您的作业,或者对于个人,您可以安装 LSF 社区版。
有关详细信息,请参阅 LSF 文档: https://www.ibm.com/docs/en/cloud-private/3.2.x?topic=paks-spectrum-lsf-community-edition
- class torchx.schedulers.lsf_scheduler.LsfScheduler(session_name: str)[source]¶
基类:
Scheduler
[LsfOpts
]示例:hello_world
$ torchx run -s lsf -cfg jobdir=/mnt/data/torchx utils.echo --image alpine:latest --msg hello_world --num_replicas 3 ...
示例:Gloo
$ cp dist_app.py /mnt/data/dist/ $ torchx run -s lsf -cfg "jobdir=/mnt/data/torchx,host_network=True" dist.ddp -j 2x2 --gpu 2 --script /data/dist_app.py --mount "type=bind,src=/mnt/data/dist,dst=/data" ...
配置选项
usage: [lsf_queue=LSF_QUEUE],[jobdir=JOBDIR],[container_workdir=CONTAINER_WORKDIR],[host_network=HOST_NETWORK],[shm_size=SHM_SIZE] optional arguments: lsf_queue=LSF_QUEUE (str, None) queue name to submit jobs jobdir=JOBDIR (str, None) The directory to place the job code and outputs. The directory must not exist and will be created. container_workdir=CONTAINER_WORKDIR (str, None) working directory in container jobs host_network=HOST_NETWORK (bool, False) True if using the host network for jobs shm_size=SHM_SIZE (str, 64m) size of shared memory (/dev/shm) for jobs
兼容性
功能
调度程序支持
获取日志
✔️
分布式作业
✔️
取消作业
✔️
描述作业
LsfScheduler 将返回作业。
工作区/修补
❌
挂载
✔️
弹性
❌
待办事项
在 host_network=False 时,任务无法解析静态名称,例如 /etc/hosts(容器无法在没有主机网络的情况下访问它)
映像下载应作为单独的作业进行
- describe(app_id: str) Optional[DescribeAppResponse] [source]¶
描述指定的应用程序。
- 返回值:
AppDef 描述或
None
(如果该应用程序不存在)。
- list() List[ListAppResponse] [source]¶
对于在调度程序上启动的应用程序,此 API 返回一个 ListAppResponse 对象列表,每个对象都包含应用程序 ID 及其状态。注意:此 API 处于原型阶段,可能会发生更改。
- log_iter(app_id: str, role_name: str, k: int = 0, regex: Optional[str] = None, since: Optional[datetime] = None, until: Optional[datetime] = None, should_tail: bool = False, streams: Optional[Stream] = None) Iterable[str] [source]¶
返回
k``th 副本 的 ``role
的日志行迭代器。当所有符合条件的日志行都被读取后,迭代器结束。如果调度程序支持基于时间的游标来获取自定义时间范围的日志行,那么
since
、until
字段会被使用,否则会被忽略。不指定since
和until
等同于获取所有可用的日志行。如果until
为空,那么迭代器表现得像tail -f
,持续跟踪日志输出,直到作业达到终止状态。日志的具体定义取决于调度程序。一些调度程序可能将 stderr 或 stdout 视为日志,其他调度程序可能从日志文件读取日志。
行为和假设
如果对不存在的应用程序调用,则会产生未定义的行为。调用者应在调用此方法之前,使用
exists(app_id)
检查应用程序是否存在。无状态,两次使用相同参数调用此方法会返回一个新的迭代器。之前的迭代进度会丢失。
并不总是支持日志跟踪。并非所有调度程序都支持实时日志迭代(例如,在应用程序运行时跟踪日志)。请参阅特定调度程序的文档,了解迭代器的行为。
- 3.1 如果调度程序支持日志跟踪,则应由
should_tail
参数控制。
不保证日志保留。可能在调用此方法时,底层调度程序已经清除了该应用程序的日志记录。如果是这样,此方法会抛出一个任意异常。
如果
should_tail
为 True,则该方法仅在可访问的日志行完全耗尽且应用程序已达到最终状态时抛出StopIteration
异常。例如,如果应用程序卡住并且没有生成任何日志行,那么迭代器会阻塞,直到应用程序最终被杀死(通过超时或手动),然后抛出StopIteration
。如果
should_tail
为 False,则该方法在没有更多日志时抛出StopIteration
。并非所有调度程序都需要支持。
一些调度程序可能通过支持
__getitem__
来支持行游标(例如,iter[50]
会跳转到第 50 行日志)。- 空格会被保留,每行新行应包含
\n
。为了 支持交互式进度条,返回的日志行不需要包含
\n
,但应在没有换行符的情况下进行打印,以正确处理\r
回车符。
- 空格会被保留,每行新行应包含
- 参数:
streams – 要选择的 IO 输出流。可选值:combined, stdout, stderr。如果调度程序不支持所选流,则会抛出 ValueError。
- 返回值:
指定角色副本的日志行的
Iterator
- 抛出:
NotImplementedError – 如果调度程序不支持日志迭代
- class torchx.schedulers.lsf_scheduler.LsfBsub(jobdir: Union[str, NoneType], app_id: str, app: torchx.specs.api.AppDef, cfg: torchx.schedulers.lsf_scheduler.LsfOpts, cmd: List[str])[source]¶
参考¶
- torchx.schedulers.lsf_scheduler.create_scheduler(session_name: str, **kwargs: Any) LsfScheduler [source]¶