快速入门¶
运行内置组件¶
开始使用 TorchX 的最简单方法是通过提供的 CLI。
$ pip install torchx
$ torchx --help
使用 TorchX,您可以 BYO 应用程序,但 TorchX 有一系列内置功能。 现在让我们看一下内置函数
$ torchx builtins
Found <n> builtin configs:
...
i. utils.echo
j. utils.touch
...
Echo 看起来很熟悉,也很简单。让我们了解如何运行 .utils.echo
$ torchx run --scheduler local utils.echo --help
usage: torchx run echo [-h] [--msg MSG]
Echos a message
optional arguments:
-h, --help show this help message and exit
--msg MSG Message to echo
我们可以看到它需要一个参数。让我们尝试在本地运行它--msg
$ torchx run --scheduler local utils.echo --msg "hello world"
注意
echo
在这种情况下,它只是一个应用程序规范。这不是应用程序
逻辑本身,而不仅仅是运行 /bin/echo 的 “作业定义”。
如果您还没有这样做,现在是通读 基本概念 熟悉基本概念的好时机。
定义您自己的组件¶
现在让我们尝试实现自己。让事情变得更有趣
我们将向 的 版本再添加两个参数:echo
echo
要并行运行的副本数
在消息前加上副本 ID
首先,我们创建一个应用程序规范文件。 这只是一个常规的 python 文件,我们在其中定义了应用程序规范。
$ touch ~/test.py
现在将以下内容复制粘贴到 test.py
import torchx.specs as specs
def echo(num_replicas: int, msg: str = "hello world") -> specs.AppDef:
"""
Echos a message to stdout (calls /bin/echo)
Args:
num_replicas: number of copies (in parallel) to run
msg: message to echo
"""
return specs.AppDef(
name="echo",
roles=[
specs.Role(
name="echo",
entrypoint="/bin/echo",
image="/tmp",
args=[f"replica #{specs.macros.replica_id}: {msg}"],
num_replicas=num_replicas,
)
],
)
请注意,
与 不同,没有默认值 指示它是必需的参数。
--msg
--num_replicas
我们使用本地 dir () 作为 .在实践中,这将是 调度程序支持的软件包(例如 Docker 镜像)的标识符。
/tmp
image
echo_torchx.py
不包含 App 的 logic 并且 只是一个作业定义。
现在让我们尝试运行我们的自定义echo
$ torchx run --scheduler local ~/test.py:echo --num_replicas 4 --msg "foobar"
replica #0: foobar
replica #1: foobar
replica #2: foobar
replica #3: foobar
在其他映像上运行¶
到目前为止,我们已经使用 .这意味着我们指定的是相对于 的。这对我们来说并不重要
因为我们指定了一个绝对路径作为 entryPoint ()。
如果我们指定了本地调度程序,则会尝试调用 .utils.echo
image=/tmp
entrypoint
/tmp
entrypoint=/bin/echo
entrypoint=echo
/tmp/echo
如果您有预构建的应用程序二进制文件,则将映像设置为本地目录是一个
验证应用程序和 .但这还不是全部
如果您想在远程调度程序上运行应用程序,这很有用
(请参见Running On Other Schedulers)。specs.AppDef
注意
字符串 in 是容器映像的标识符
受调度程序支持。请参阅 scheduler 文档 以找出答案
要使用的调度程序支持哪个容器镜像。image
specs.Role
对于 scheduler,我们可以看到它同时支持本地目录
和 docker 作为镜像:local
$ torchx runopts local
{ 'image_type': { 'default': 'dir',
'help': 'image type. One of [dir, docker]',
'type': 'str'},
... <omitted for brevity> ...
注意
在继续之前,您需要安装 docker。如果您尚未这样做 按照以下位置的安装说明进行作:https://docs.docker.com/get-docker/
现在让我们尝试从 docker 容器运行。修改您在上一节中创建的 echo 以使 .echo
AppDef
~/test.py
image="ubuntu:latest"
import torchx.specs as specs
def echo(num_replicas: int, msg: str = "hello world") -> specs.AppDef:
"""
Echos a message to stdout (calls /bin/echo)
Args:
num_replicas: number of copies (in parallel) to run
msg: message to echo
"""
return specs.AppDef(
name="echo",
roles=[
specs.Role(
name="echo",
entrypoint="/bin/echo",
image="ubuntu:latest", # IMAGE NOW POINTS TO THE UBUNTU DOCKER IMAGE
args=[f"replica #{specs.macros.replica_id}: {msg}"],
num_replicas=num_replicas,
)
],
)
尝试运行 echo 应用程序
$ torchx run --scheduler local \
--scheduler_args image_type=docker \
~/test.py:echo \
--num_replicas 4 \
--msg "foobar from docker!"
在其他计划程序上运行¶
到目前为止,我们已经在本地启动了组件。让我们看看如何在 真正的调度器。
注意
本节假设您已经设置了一个正在运行的 支持的调度程序之一
让我们看看我们可以启动哪些调度器,并选择一个 您已经设置好了。
$ torchx schedulers
对于大多数调度程序,您必须指定一个附加参数。这些是关联的调度程序的启动时间参数
添加到应用程序的 Run 实例 (Job) 而不是 Job 定义
(App Spec) 的应用程序,例如 Job 。调度程序参数
是特定于调度程序的,因此您必须找出什么是 scheduler 参数
您计划使用的调度程序需要--scheduler_args
priority
$ torchx runopts <sched_name>
$ torchx runopts local
现在您已经弄清楚了需要哪些 scheduler 参数,请启动您的应用程序
$ torchx run --scheduler <sched_name> --scheduler_args <k1=v1,k2=v2,...> \
~/my_app.py <app_args...>
$ torchx run --scheduler local --scheduler_args image_type=dir,log_dir=/tmp \
~/my_app.py --foo=bar
注意
如果您的应用程序 args 与子命令的 args 重叠,则
必须使用 argparse 的分隔符以免混淆。
例如,如果您的应用程序还接受一个参数
如下所示运行它。run
--
--scheduler
$ torchx run --scheduler local ~/my_app.py -- --scheduler foobar
后续步骤¶
查看 torchx CLI 的其他功能
了解如何通过引用 torchx.specs 来编写更复杂的应用程序规范
浏览内置组件的集合
查看 Runner 支持的调度程序列表
查看您可以在哪些 ML 管道平台上运行组件