世界你好¶
这是一个自包含的指南,介绍如何构建一个简单的应用程序和组件规格,并通过两种不同的调度器启动它。
查看 快速入门 以了解如何在遵循此示例之前在本地安装TorchX。
让我们从编写一个简单的“Hello World” Python应用程序开始。这只是一个普通的Python程序,可以包含你想要的任何内容。
NOTE: This example uses Jupyter Notebook
%%writefileto create local files for example purposes. Under normal usage you would have these as standalone files.
[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)
Overwriting my_app.py
现在我们有了一个应用,可以编写它的组件文件了。这个功能使我们能够以用户友好的方式重用和共享我们的应用。
我们可以从 torchx 命令行界面 (cli) 或者作为管道的一部分进行程序化使用。
[2]:
%%writefile my_component.py
import torchx.specs as specs
def greet(user: str, image: str = "my_app:latest") -> specs.AppDef:
"""
Echos a message to stdout (calls /bin/echo)
Args:
user: name of the person to greet
image: image to use
"""
return specs.AppDef(
name="hello_world",
roles=[
specs.Role(
name="greeter",
image=image,
entrypoint="python",
args=[
"-m", "my_app",
"--user", user,
],
)
],
)
Overwriting my_component.py
一旦我们编写了组件,我们就可以通过 torchx run 来调用它。调度器 local_cwd 在当前目录下执行组件。
[3]:
%%sh
torchx run --scheduler local_cwd my_component.py:greet --user "your name"
Hello, your name!
local_cwd://torchx/hello_world_ed42ed11
torchx 2021-10-18 11:48:45 INFO Waiting for the app to finish...
torchx 2021-10-18 11:48:46 INFO Job finished: SUCCEEDED
如果我们希望在其他环境中运行,我们可以构建一个 Docker 容器,这样我们就可以在支持 Docker 的环境中运行我们的组件,例如 Kubernetes,或者通过本地的 Docker 调度程序运行。
NOTE: this requires Docker installed and won’t work in environments such as Google Colab.
[4]:
%%writefile Dockerfile
FROM ghcr.io/pytorch/torchx:0.1.0rc1
ADD my_app.py .
Overwriting Dockerfile
一旦我们创建了 Dockerfile,就可以创建我们的 docker 镜像。
[5]:
%%sh
docker build -t my_app:latest -f Dockerfile .
Step 1/2 : FROM ghcr.io/pytorch/torchx:0.1.0rc1
---> 15fd31611433
Step 2/2 : ADD my_app.py .
---> Using cache
---> 9cedd7f457fb
Successfully built 9cedd7f457fb
Successfully tagged my_app:latest
然后我们可以在本地调度器上启动它。
[6]:
%%sh
torchx run --scheduler local_docker my_component.py:greet --image "my_app:latest" --user "your name"
Hello, your name!
local_docker://torchx/hello_world_0619d6b3
Error response from daemon: pull access denied for my_app, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
torchx 2021-10-18 11:48:48 WARNING failed to fetch image my_app:latest, falling back to local: Command '['docker', 'pull', 'my_app:latest']' returned non-zero exit status 1.
torchx 2021-10-18 11:48:48 INFO Waiting for the app to finish...
WARNING: IPv4 forwarding is disabled. Networking will not work.
torchx 2021-10-18 11:48:49 INFO Job finished: SUCCEEDED
如果你有一个Kubernetes集群,你可以使用Kubernetes调度器在集群上启动这个。