目录

自定义组件

这是一份关于如何构建简单的应用程序和自定义组件规范并通过两个不同的调度器启动它的指南。

请参阅快速入门指南,了解安装和基本用法。

世界您好

让我们从编写一个简单的 “Hello World” python 应用程序开始。这只是一个普通的 python 程序,可以包含您想要的任何内容。

注意

此示例使用 Jupyter Notebook 创建本地文件以用于示例目的。在正常使用情况下,您可以将这些文件作为独立文件。%%writefile

[1]:
%%writefile my_app.py

import sys
import argparse

def main(user: str) -> None:
    print(f"Hello, {user}!")

if __name__ == "__main__":
    parser = argparse.ArgumentParser(
        description="Hello world app"
    )
    parser.add_argument(
        "--user",
        type=str,
        help="the person to greet",
        required=True,
    )
    args = parser.parse_args(sys.argv[1:])

    main(args.user)
Writing my_app.py

现在我们有一个应用程序,我们可以为它编写组件文件。此功能允许我们以用户友好的方式重用和共享我们的应用程序。

我们可以从 cli 或以编程方式将此组件用作管道的一部分。torchx

[2]:
%%writefile my_component.py

import torchx.specs as specs

def greet(user: str, image: str = "my_app:latest") -> specs.AppDef:
    return specs.AppDef(
        name="hello_world",
        roles=[
            specs.Role(
                name="greeter",
                image=image,
                entrypoint="python",
                args=[
                    "-m", "my_app",
                    "--user", user,
                ],
            )
        ],
    )
Writing my_component.py

我们可以通过 .调度程序相对于当前目录执行组件。torchx runlocal_cwd

[3]:
%%sh
torchx run --scheduler local_cwd my_component.py:greet --user "your name"
torchx 2022-06-15 23:04:01 INFO     Log directory not set in scheduler cfg. Creating a temporary log dir that will be deleted on exit. To preserve log directory set the `log_dir` cfg option
torchx 2022-06-15 23:04:01 INFO     Log directory is: /tmp/torchx_bwnet33q
torchx 2022-06-15 23:04:02 INFO     Waiting for the app to finish...
greeter/0 Hello, your name!
torchx 2022-06-15 23:04:03 INFO     Job finished: SUCCEEDED
local_cwd://torchx/hello_world-qdkngck669vnqd

如果我们想在其他环境中运行,我们可以构建一个 Docker 容器,这样我们就可以在支持 Docker 的环境(如 Kubernetes)中或通过本地 Docker 调度器运行我们的组件。

注意

这需要安装 Docker,并且在 Google Colab 等环境中不起作用。如果您尚未按照以下安装说明进行作:https://docs.docker.com/get-docker/

[4]:
%%writefile Dockerfile.custom

FROM ghcr.io/pytorch/torchx:0.1.0rc1

ADD my_app.py .
Writing Dockerfile.custom

创建 Dockerfile 后,我们就可以创建 Docker 映像了。

[5]:
%%sh
docker build -t my_app:latest -f Dockerfile.custom .
Step 1/2 : FROM ghcr.io/pytorch/torchx:0.1.0rc1
0.1.0rc1: Pulling from pytorch/torchx
4bbfd2c87b75: Pulling fs layer
d2e110be24e1: Pulling fs layer
889a7173dcfe: Pulling fs layer
6009a622672a: Pulling fs layer
143f80195431: Pulling fs layer
eccbe17c44e1: Pulling fs layer
6009a622672a: Waiting
143f80195431: Waiting
d4c7af0d4fa7: Pulling fs layer
06b5edd6bf52: Pulling fs layer
f18d016c4ccc: Pulling fs layer
c0ad16d9fa05: Pulling fs layer
eccbe17c44e1: Waiting
d4c7af0d4fa7: Waiting
06b5edd6bf52: Waiting
f18d016c4ccc: Waiting
30587ba7fd6b: Pulling fs layer
909695be1d50: Pulling fs layer
f119a6d0a466: Pulling fs layer
88d87059c913: Pulling fs layer
c0ad16d9fa05: Waiting
30587ba7fd6b: Waiting
909695be1d50: Waiting
f119a6d0a466: Waiting
88d87059c913: Waiting
889a7173dcfe: Verifying Checksum
889a7173dcfe: Download complete
d2e110be24e1: Download complete
4bbfd2c87b75: Verifying Checksum
4bbfd2c87b75: Download complete
6009a622672a: Verifying Checksum
6009a622672a: Download complete
eccbe17c44e1: Verifying Checksum
eccbe17c44e1: Download complete
06b5edd6bf52: Verifying Checksum
06b5edd6bf52: Download complete
d4c7af0d4fa7: Verifying Checksum
d4c7af0d4fa7: Download complete
c0ad16d9fa05: Verifying Checksum
c0ad16d9fa05: Download complete
30587ba7fd6b: Verifying Checksum
30587ba7fd6b: Download complete
4bbfd2c87b75: Pull complete
909695be1d50: Verifying Checksum
909695be1d50: Download complete
f119a6d0a466: Verifying Checksum
f119a6d0a466: Download complete
88d87059c913: Verifying Checksum
88d87059c913: Download complete
f18d016c4ccc: Verifying Checksum
f18d016c4ccc: Download complete
143f80195431: Verifying Checksum
143f80195431: Download complete
d2e110be24e1: Pull complete
889a7173dcfe: Pull complete
6009a622672a: Pull complete
143f80195431: Pull complete
eccbe17c44e1: Pull complete
d4c7af0d4fa7: Pull complete
06b5edd6bf52: Pull complete
f18d016c4ccc: Pull complete
c0ad16d9fa05: Pull complete
30587ba7fd6b: Pull complete
909695be1d50: Pull complete
f119a6d0a466: Pull complete
88d87059c913: Pull complete
Digest: sha256:a738949601d82e7f100fa1efeb8dde0c35ce44c66726cf38596f96d78dcd7ad3
Status: Downloaded newer image for ghcr.io/pytorch/torchx:0.1.0rc1
 ---> 3dbec59e8049
Step 2/2 : ADD my_app.py .
 ---> 613d0d7975ef
Successfully built 613d0d7975ef
Successfully tagged my_app:latest

然后,我们可以在本地调度器上启动它。

[6]:
%%sh
torchx run --scheduler local_docker my_component.py:greet --image "my_app:latest" --user "your name"
torchx 2022-06-15 23:06:15 INFO     Checking for changes in workspace `file:///home/runner/work/torchx/torchx/docs/source`...
torchx 2022-06-15 23:06:15 INFO     To disable workspaces pass: --workspace="" from CLI or workspace=None programmatically.
torchx 2022-06-15 23:06:16 WARNING  failed to pull image my_app:latest, falling back to local: 404 Client Error for http+docker://localhost/v1.41/images/create?tag=latest&fromImage=my_app: Not Found ("pull access denied for my_app, repository does not exist or may require 'docker login': denied: requested access to the resource is denied")
torchx 2022-06-15 23:06:23 INFO     Built new image `sha256:b8255cabd18ec8e9d2d136f7459b903bb7fd039e1d6a476f2dafa8c8f059d6a9` based on original image `my_app:latest` and changes in workspace `file:///home/runner/work/torchx/torchx/docs/source` for role[0]=greeter.
torchx 2022-06-15 23:06:24 INFO     Waiting for the app to finish...
greeter/0 Hello, your name!
torchx 2022-06-15 23:06:25 INFO     Job finished: SUCCEEDED
local_docker://torchx/hello_world-xf90wtgslp5pgd

如果您有 Kubernetes 集群,则可以使用 Kubernetes 调度程序在集群上启动它。

$ docker push my_app:latest
$ torchx run --scheduler kubernetes my_component.py:greet --image "my_app:latest" --user "your name"

内置

TorchX 还提供了许多带有预制图像的内置组件。您可以通过以下方式发现它们:

[7]:
%%sh
torchx builtins
Found 10 builtin components:
  1. dist.ddp
  2. metrics.tensorboard
  3. serve.torchserve
  4. utils.binary
  5. utils.booth
  6. utils.copy
  7. utils.echo
  8. utils.python
  9. utils.sh
 10. utils.touch

您可以从 CLI、管道或像任何其他组件一样以编程方式使用这些组件。

[8]:
%%sh
torchx run utils.echo --msg "Hello :)"
torchx 2022-06-15 23:06:28 INFO     Checking for changes in workspace `file:///home/runner/work/torchx/torchx/docs/source`...
torchx 2022-06-15 23:06:28 INFO     To disable workspaces pass: --workspace="" from CLI or workspace=None programmatically.
torchx 2022-06-15 23:08:18 INFO     Built new image `sha256:74097be3af6115e5d4b010a08e342df3287d28126e928c4cdb50fdc6dda47830` based on original image `ghcr.io/pytorch/torchx:0.2.0dev0` and changes in workspace `file:///home/runner/work/torchx/torchx/docs/source` for role[0]=echo.
torchx 2022-06-15 23:08:18 INFO     Waiting for the app to finish...
echo/0 Hello :)
torchx 2022-06-15 23:08:19 INFO     Job finished: SUCCEEDED
local_docker://torchx/echo-zblhhl451dzcj

文档

访问 PyTorch 的全面开发人员文档

查看文档

教程

获取面向初学者和高级开发人员的深入教程

查看教程

资源

查找开发资源并解答您的问题

查看资源