torchx.specs 的¶
这包含 TorchX AppDef 和相关组件定义。这些是 由组件用于定义应用程序,然后可以通过 TorchX 启动 scheduler 或 pipeline adapter 的 Scheduler 或 Pipeline Adapter 的 Installer 的
应用定义¶
角色¶
- class torchx.specs 中。角色(名称:str,图像:str,min_replicas:~typing。可选[int] = None, base_image: ~typing。可选[str] = None, entrypoint: str = '<MISSING>', args: ~typing.List[str] = <factory>, env: ~typing 来打字。Dict[str, str] = <factory>, num_replicas: int = 1, max_retries: int = 0, retry_policy: ~torchx.specs.api.RetryPolicy = RetryPolicy.APPLICATION, 资源: ~torchx.specs.api.Resource = <factory>,port_map: ~typing。Dict[str, int] = <factory>, metadata: ~typing 来打字。Dict[str, ~typing.Any] = <factory>,挂载:~typing。List[~typing.联合[~torchx.specs.api.BindMount, ~torchx.specs.api.VolumeMount, ~torchx.specs.api.DeviceMount]] = <factory>)[来源]¶
在 . 例子:
AppDef
分布式数据并行应用 - 由单个角色 (trainer) 组成。
具有参数服务器的应用程序 - 由多个角色(trainer、ps)组成。
注意
An 是安装在容器上的软件包 由调度程序调度。调度器上的容器指示 图像实际上是什么。图像可以像焦油球一样简单 或映射到 Docker 镜像。调度器通常知道如何 “拉” 为图像提供图像名称 (STR),该名称可以是简单名称 (例如 docker image) 或 URL (例如 )。
image
s3://path/my_image.tar
用法:
trainer = Role(name="trainer", image = "pytorch/torch:1", entrypoint = "my_trainer.py" args = ["--arg", "foo", ENV_VAR="FOOBAR"], num_replicas = 4, resource = Resource(cpu=1, gpu=1, memMB=500), port_map={"tcp_store":8080, "tensorboard": 8081}, metadata={"local_cwd.property", value})
- 参数
name (名称) – 角色的名称
image (映像) – 安装在容器上的软件包。
entryPoint – 用于调用角色的命令(在容器内)
args – 入口点 cmd 的命令行参数
env – 环境变量映射
num_replicas – 要运行的容器副本数
min_replicas – 任务启动的最小副本数。什么时候 设置作业大小可在 min_replicas 之间自动调整 和 num_replicas 取决于集群资源和 政策。如果计划程序不支持 Auto Scaling,则此 字段,作业大小将num_replicas。
max_retries – 放弃前的最大重试次数
retry_policy – 副本失败时的重试行为
resource (资源) – 角色的资源要求。应安排角色 通过容器上的调度器,它们中的每一个都应该有 at 最少的保证。
num_replicas
resource
port_map – 角色的端口映射。key 是端口的唯一标识符 例如,“TensorBoard”:9090
metadata – 与角色关联的自由格式信息,例如 调度器特定的数据。密钥应遵循以下模式:
$scheduler.$key
mounts – 计算机上的挂载列表
- class torchx.specs 中。RetryPolicy(value)[来源]¶
定义 中的 的重试策略。 该策略定义角色副本遇到故障时的行为:
Roles
AppDef
unsuccessful (non zero) 退出代码
硬件/主机崩溃
先买权
驱逐
注意
并非所有计划程序都支持所有重试策略。 但是,所有计划程序都必须支持 。 有关更多信息,请参阅调度程序的文档 关于他们支持的重试策略和行为注意事项(如果有)。
RetryPolicy.APPLICATION
- REPLICA:替换 replica 实例。幸存的副本保持不变。
与组件一起使用以获得 torchelastic 坐标 重新启动和成员资格更改。否则,由 用于处理失败的副本偏离的应用程序,以及 替换副本准入。
dist.ddp
APPLICATION:重新启动整个应用程序。
资源¶
- class torchx.specs 中。资源(cpu: int, gpu: int, memMB: int, capabilities: ~typing.Dict[str, ~typing.Any] = <factory>, devices: ~typing 中。Dict[str, int] = <factory>)[来源]¶
表示 的资源要求 。
Role
- 参数
cpu – 逻辑 CPU 内核数。CPU 内核的定义取决于 在调度程序上。请参阅您的调度器文档,了解如何将逻辑 CPU 核心映射到物理核心和线程。
gpu – GPU 数量
memMB – 内存的 MB
capabilities (功能) – 其他硬件规格(由调度程序解释)
devices – 命名设备及其数量的列表
注意:您应该更喜欢使用 named_resources 而不是指定 raw 资源要求。
- torchx.specs 的resource(cpu: 可选[int] = 无,gpu: 可选[int] = 无,memMB:可选[int] = 无,h:可选[str] = None) 资源 [来源]¶
从 原始资源规范 (cpu、gpu、memMB) 或已注册的命名资源 () 。 请注意, (cpu, gpu, memMB) 与优先排序(如果指定)是互斥的。
Resource
h
h
如果指定了,则它用于查找 资源规范。 请参阅注册命名资源。
h
否则,将根据原始资源规范创建对象。
Resource
例:
resource(cpu=1) # returns Resource(cpu=1) resource(named_resource="foobar") # returns registered named resource "foo" resource(cpu=1, named_resource="foobar") # returns registered named resource "foo" (cpu=1 ignored) resource() # returns default resource values resource(cpu=None, gpu=None, memMB=None) # throws
- torchx.specs 的get_named_resources(res: str) 资源 [来源]¶
根据通过 entrypoints.txt 注册的字符串定义获取资源对象。
TorchX 实现了注册机制,包括 以下步骤:
named_resource
创建模块并定义资源检索函数:
# my_module.resources from typing import Dict from torchx.specs import Resource def gpu_x_1() -> Dict[str, Resource]: return Resource(cpu=2, memMB=64 * 1024, gpu = 2)
在 entrypoints 部分中注册资源检索:
[torchx.named_resources] gpu_x_1 = my_module.resources:gpu_x_1
可以用作此函数的字符串参数:
gpu_x_1
from torchx.specs import named_resources resource = named_resources["gpu_x_1"]
AWS 命名资源¶
torchx.specs.named_resources_aws 包含表示相应 AWS 实例类型的资源定义 取自 https://aws.amazon.com/ec2/instance-types/。资源已公开 通过安装 torchx lib 后的入口点。映射存储在 setup.py 文件中。
命名资源目前不指定 AWS 实例类型功能,而仅表示 以 mem、CPU 和 GPU 编号表示的等值资源。
注意
这些资源定义将来可能会更改。每个用户都应该 管理自己的资源。按照 https://pytorch.org/torchx/latest/specs.html#torchx.specs.get_named_resources 设置命名资源。
用法:
from torchx.specs import named_resources print(named_resources["aws_t3.medium"]) print(named_resources["aws_m5.2xlarge"]) print(named_resources["aws_p3.2xlarge"]) print(named_resources["aws_p3.8xlarge"])
宏¶
- class torchx.specs 中。宏[来源]¶
定义可在 的值的元素中使用的宏。宏将在运行时被替换 设置为它们的实际值。
Role.args
Role.env
警告
宏使用的字段
Role
除了那些 上面提到的,不是替代的。可用的宏:
img_root
- 拉取的 container.image 的根目录app_id
- 调度程序分配的应用程序 IDreplica_id
- Role 副本的每个实例的唯一 ID,例如,具有 3 个副本的角色可以具有 0、1、2 作为副本 ID 来获取。请注意,当容器发生故障并且 replaced,则新容器将与它所替换的容器相同。例如,如果节点 1 失败且 被调度器替换,则替换节点也将 有。
replica_id
replica_id=1
例:
# runs: hello_world.py --app_id ${app_id} trainer = Role( name="trainer", entrypoint="hello_world.py", args=["--app_id", macros.app_id], env={"IMAGE_ROOT_DIR": macros.img_root}) app = AppDef("train_app", roles=[trainer]) app_handle = session.run(app, scheduler="local_docker", cfg={})
运行配置¶
- class torchx.specs 中。runopts[来源]¶
保存接受的调度程序运行配置 键、默认值(如果有)和帮助消息字符串。 这些选项由 提供并验证 在针对用户提供的运行 cfg。 允许默认值。必需的 opt 不能具有 非 None 默认值。
Scheduler
Session.run
None
重要
此类没有访问器,因为它旨在 由 “help” 工具或作为异常 msg 的一部分构建和返回并打印出来。
Scheduler.run_config_options
用法:
opts = runopts() opts.add("run_as_user", type_=str, help="user to run the job as") opts.add("cluster_id", type_=int, help="cluster to submit the job", required=True) opts.add("priority", type_=float, default=0.5, help="job priority") opts.add("preemptible", type_=bool, default=False, help="is the job preemptible") # invalid opts.add("illegal", default=10, required=True) opts.add("bad_type", type=str, default=10) opts.check(cfg) print(opts)
- add(cfg_key: str, type_: type[Optional[Union[str, int, float, bool, List[str]]]]], 帮助: str,默认值:可选[Union[str, int, float, bool, List[str]]] = None, required: bool = False) 无 [来源]¶
添加具有给定帮助字符串和值(如果有)的选项。如果未指定 ,则此选项 为必需选项。
config
default
default
- cfg_from_str(cfg_str: str) dict[str, optional[Union[str, int, float, bool, List[str]]]] [来源]¶
从字符串文本解析调度程序并返回 cfg 映射,其中 cfg 值已转换为相应的 类型。未知键将被忽略 ,并且不会在结果映射中返回。
cfg
注意
与 method 不同,此方法不会解析 default 选项或检查所需的选项是否实际上是 存在于给定的 .此方法旨在 当输入为字符串时,在调用之前调用 编码的运行 cfg。也就是说,要完全解析 cfg,请调用 。
resolve
cfg_str
resolve()
opt.resolve(opt.cfg_from_str(cfg_literal))
如果 是空字符串,则返回空字符串。否则,至少需要一个由 (等于) 分隔的 kv 对。
cfg_str
cfg
"="
(逗号) 或 (分号) 可用于分隔多个 kv 对。
","
";"
CfgVal
allows 的 Primitives 的 Git,这些 Primitives 可以作为 或 (分号) 分隔。由于相同的 分隔符用于在 cfg KV 对之间划定,此方法 将最后一个(尾部)或 解释为 KV 对。请参阅下面的示例。List
","
";"
","
";"
例子:
opts = runopts() opts.add("FOO", type_=List[str], default=["a"], help="an optional list option") opts.add("BAR", type_=str, required=True, help="a required str option") # required and default options not checked # method returns strictly parsed cfg from the cfg literal string opts.cfg_from_str("") == {} # however, unknown options are ignored # since the value type is unknown hence cannot cast to the correct type opts.cfg_from_str("UNKNOWN=VALUE") == {} opts.cfg_from_str("FOO=v1") == {"FOO": "v1"} opts.cfg_from_str("FOO=v1,v2") == {"FOO": ["v1", "v2"]} opts.cfg_from_str("FOO=v1;v2") == {"FOO": ["v1", "v2"]} opts.cfg_from_str("FOO=v1,v2,BAR=v3") == {"FOO": ["v1", "v2"], "BAR": "v3"} opts.cfg_from_str("FOO=v1;v2,BAR=v3") == {"FOO": ["v1", "v2"], "BAR": "v3"} opts.cfg_from_str("FOO=v1;v2;BAR=v3") == {"FOO": ["v1", "v2"], "BAR": "v3"}
运行状态¶
- class torchx.specs 中。AppStatus(state: ~torchx.specs.api.AppState, num_restarts: int = 0, msg: str = '', structured_error_msg: str = '<NONE>', ui_url: ~typing.可选[str] = None, roles: ~typing。列表[~torchx.specs.api.RoleStatus] = <factory>)[来源]¶
的运行时状态。调度程序可以 返回任意文本消息(msg 字段)。 如果发生任何错误,调度程序可以填充 json 响应。
AppDef
structured_error_msg
replicas
表示任务中副本的状态。如果作业 运行多次重试时,该参数将包含 最近的重试。注意:如果之前的重试失败,但最近的重试失败 Retry Succeeded 或 In Progress,将不包含发生的错误。replicas
- class torchx.specs 中。AppState(value)[来源]¶
应用程序的状态。应用程序从初始状态开始,经过 、 、 状态,最后到达最终状态:,''FAILED'', .
UNSUBMITTED
SUBMITTED
PENDING
RUNNING
SUCCEEDED
CANCELLED
如果调度程序支持抢占,则应用程序将从 state 移动到 upon preempation。
RUNNING
PENDING
如果用户停止应用程序,则应用程序状态会移动 to ,然后 to 实际取消作业的时间 由调度程序。
STOPPED
CANCELLED
UNSUBMITTED - 应用程序尚未提交到调度程序
SUBMITTED - 应用程序已成功提交到调度程序
PENDING - 应用程序已提交到调度程序待分配
RUNNING - 应用程序正在运行
成功 - 应用已成功完成
FAILED - 应用未成功完成
CANCELLED - 应用程序在完成之前已取消
UNKNOWN - 应用程序状态未知
坐骑¶
- torchx.specs 的parse_mounts(选项: List[str]) List[Union[BindMount, VolumeMount, DeviceMount]] [来源]¶
parse_mounts 将选项列表解析为类型化挂载,遵循类似的 format 设置为 Docker 绑定挂载。
可以在同一列表中指定多个挂载。 必须是 在每个 Specified 中指定 first。
type
- 前任:
type=bind,src=/host,dst=/container,readonly,[type=bind,src=...,dst=...]
- 支持的类型:
绑定挂载:type=bind,src=<host path>,dst=<container path>[,readonly] VolumeMount:类型=卷,src=<名称/id>,dst=<容器路径>[,只读] 设备挂载:type=device,src=/dev/<dev>[,dst=<容器路径>][,perm=rwm]
- class torchx.specs 中。BindMount(src_path: str, dst_path: str, read_only: bool = False)[来源]¶
定义要挂载的绑定挂载 – 将主机路径绑定到 worker 中 环境。请参阅调度程序文档,了解每个 bind mounts 如何作 调度。
- 参数
src_path – 主机上的路径
dst_path – 工作线程环境/容器中的路径
read_only – 挂载是否应为只读
组件 Linter¶
- torchx.specs.file_linter。validate(path: str, component_function: str) List[LinterMessage] [来源]¶
验证函数以确保它符合组件标准。
validate
根据以下规则查找 并为其添加 VIIDATE:component_function
该函数必须具有 google-styple 文档
所有函数参数都必须进行注释
该函数必须返回
torchx.specs.api.AppDef
- 参数
path (路径) – python 源文件的路径。
component_function – 要验证的函数的名称。
- 结果
验证错误列表
- 返回类型:
列表[LinterMessage]
- torchx.specs.file_linter。get_fn_docstring(fn: Callable[[...], object]) Tuple[str, Dict[str, str]] [来源]¶
从提供的函数中解析函数和参数描述。文档字符串应为 google 样式格式
如果 function 没有文档字符串,则函数描述将是函数的名称 TIP 关于如何改进帮助消息和参数的描述将是参数的名称。
文档字符串中不存在的参数将包含默认/必需信息
- 参数
fn – 带或不带文档字符串的函数
- 结果
- 函数描述、参数描述其中 key 是参数和值的名称
如果描述
- torchx.specs.file_linter 类。LinterMessage(name: str, description: str, line: int, char: int,严重性:str = 'error')[来源]¶
- torchx.specs.file_linter 类。TorchFunctionVisitor(component_function_name: str)[来源]¶
找到component_function并对其运行注册验证程序的访客。 当前注册的验证人:
- TorchxFunctionArgsValidator - 验证函数的参数。
- 标准:
每个参数都应使用类型
- 支持以下类型:
primitive_types:{int, str, float},
可选[primitive_types],
Dict[primitive_types, primitive_types],
列表[primitive_types],
可选[Dict[primitive_types, primitive_types]],
可选[列表[primitive_types]]
- torchx.specs.file_linter 类。TorchXArgumentHelpFormatter(prog, indent_increment=2, max_help_position=24, width=None)[来源]¶
Help 消息 formatter,它向参数 help 添加默认值和 required。
如果参数是必需的,则该类会在帮助消息的末尾附加 (required)。 如果参数具有 default value,则类会在末尾附加 (default: $DEFAULT)。 格式化程序设计为仅用于 torchx 组件功能。 这些函数没有 required 和 default 参数。
- torchx.specs.file_linter 类。TorchxFunctionArgsValidator[来源]¶
- validate(app_specs_func_def: FunctionDef) List[LinterMessage] [来源]¶
用于验证提供的函数 def 的方法。