目录

torchx.specs 的

这包含 TorchX AppDef 和相关组件定义。这些是 由组件用于定义应用程序,然后可以通过 TorchX 启动 scheduler 或 pipeline adapter 的 Scheduler 或 Pipeline Adapter 的 Installer 的

应用定义

class torchx.specs 中。AppDefname: strroles: ~typing.列表[~torchx.specs.api.Role] = <factory>元数据:~typing。Dict[strstr] = <factory>[来源]

表示由多个元数据组成的分布式应用程序。包含驱动程序的必要信息 将此应用提交到调度程序。Roles

参数
  • name – 应用程序名称

  • roles – 角色列表

  • metadata – 应用程序的元数据(元数据的处理取决于计划程序)

角色

class torchx.specs 中。角色名称:str图像:str,min_replicas~typing。可选[int] = Nonebase_image: ~typing。可选[str] = Noneentrypoint: str = '<MISSING>'args: ~typing.List[str] = <factory>env: ~typing 来打字。Dict[str, str] = <factory>num_replicas: int = 1max_retries: int = 0retry_policy: ~torchx.specs.api.RetryPolicy = RetryPolicy.APPLICATION, 资源: ~torchx.specs.api.Resource = <factory>port_map: ~typing。Dict[strint] = <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

  1. 分布式数据并行应用 - 由单个角色 (trainer) 组成。

  2. 具有参数服务器的应用程序 - 由多个角色(trainer、ps)组成。

注意

An 是安装在容器上的软件包 由调度程序调度。调度器上的容器指示 图像实际上是什么。图像可以像焦油球一样简单 或映射到 Docker 镜像。调度器通常知道如何 “拉” 为图像提供图像名称 (STR),该名称可以是简单名称 (例如 docker image) 或 URL (例如 )。images3://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_replicasresource

  • port_map – 角色的端口映射。key 是端口的唯一标识符 例如,“TensorBoard”:9090

  • metadata – 与角色关联的自由格式信息,例如 调度器特定的数据。密钥应遵循以下模式:$scheduler.$key

  • mounts – 计算机上的挂载列表

pre_proc调度程序str,dryrun_infoAppDryRunInfo AppDryRunInfo[来源]

根据特定于角色的配置修改调度程序请求。 在 scheduler 期间为每个角色调用该方法 。 如果有多个角色,则为 Order 的 Order 的 Sequence 的 Zip 的 S Lam Ssubmit_dryrunAppDef.roles

class torchx.specs 中。RetryPolicyvalue[来源]

定义 中的 的重试策略。 该策略定义角色副本遇到故障时的行为:RolesAppDef

  1. unsuccessful (non zero) 退出代码

  2. 硬件/主机崩溃

  3. 先买权

  4. 驱逐

注意

并非所有计划程序都支持所有重试策略。 但是,所有计划程序都必须支持 。 有关更多信息,请参阅调度程序的文档 关于他们支持的重试策略和行为注意事项(如果有)。RetryPolicy.APPLICATION

  1. REPLICA:替换 replica 实例。幸存的副本保持不变。

    与组件一起使用以获得 torchelastic 坐标 重新启动和成员资格更改。否则,由 用于处理失败的副本偏离的应用程序,以及 替换副本准入。dist.ddp

  2. APPLICATION:重新启动整个应用程序。

资源

class torchx.specs 中。资源cpu: intgpu: intmemMB: intcapabilities: ~typing.Dict[str, ~typing.Any] = <factory>devices: ~typing 中。Dict[strint] = <factory>[来源]

表示 的资源要求 。Role

参数
  • cpu – 逻辑 CPU 内核数。CPU 内核的定义取决于 在调度程序上。请参阅您的调度器文档,了解如何将逻辑 CPU 核心映射到物理核心和线程。

  • gpu – GPU 数量

  • memMB – 内存的 MB

  • capabilities (功能) – 其他硬件规格(由调度程序解释)

  • devices – 命名设备及其数量的列表

注意:您应该更喜欢使用 named_resources 而不是指定 raw 资源要求。

static copy原始资源**capabilitiesAny Resource[源]

复制资源并应用新功能。如果相同的功能 存在于原始资源中,并且作为参数,则 from 参数 将被使用。

torchx.specs 的resourcecpu 可选[int] = gpu 可选[int] = memMB:可选[int] = h可选[str] = None 资源[来源]

从 原始资源规范 (cpu、gpu、memMB) 或已注册的命名资源 () 。 请注意, (cpu, gpu, memMB) 与优先排序(如果指定)是互斥的。Resourcehh

如果指定了,则它用于查找 资源规范。 请参阅注册命名资源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_resourcesres str 资源[来源]

根据通过 entrypoints.txt 注册的字符串定义获取资源对象。

TorchX 实现了注册机制,包括 以下步骤:named_resource

  1. 创建模块并定义资源检索函数:

# 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)
  1. 在 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"])
torchx.specs.named_resources_aws。aws_m5_2xlarge 资源[来源]
torchx.specs.named_resources_aws。aws_p3_2xlarge 资源[来源]
torchx.specs.named_resources_aws。aws_p3_8xlarge 资源[来源]
torchx.specs.named_resources_aws。aws_t3_medium 资源[来源]

class torchx.specs 中。[来源]

定义可在 的值的元素中使用的宏。宏将在运行时被替换 设置为它们的实际值。Role.argsRole.env

警告

宏使用的字段Role除了那些 上面提到的,不是替代的。

可用的宏:

  1. img_root- 拉取的 container.image 的根目录

  2. app_id- 调度程序分配的应用程序 ID

  3. replica_id- Role 副本的每个实例的唯一 ID,

    例如,具有 3 个副本的角色可以具有 0、1、2 作为副本 ID 来获取。请注意,当容器发生故障并且 replaced,则新容器将与它所替换的容器相同。例如,如果节点 1 失败且 被调度器替换,则替换节点也将 有。replica_idreplica_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={})
img_root: strapp_id: strreplica_id strrank0_env strbase_img_root: str = 'DEPRECATED'[来源]
applyrole Role Role[来源]

apply 将值应用于指定角色的副本并返回该副本。

substitutearg str str[来源]

substitute 将值应用于模板 arg。

运行配置

class torchx.specs 中。runopts[来源]

保存接受的调度程序运行配置 键、默认值(如果有)和帮助消息字符串。 这些选项由 提供并验证 在针对用户提供的运行 cfg。 允许默认值。必需的 opt 不能具有 非 None 默认值。SchedulerSession.runNone

重要

此类没有访问器,因为它旨在 由 “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)
addcfg_key strtype_ type[Optional[Union[str int float bool List[str]]]]], 帮助 str默认值可选[Union[str int float bool List[str]]] = Nonerequired bool = False [来源]

添加具有给定帮助字符串和值(如果有)的选项。如果未指定 ,则此选项 为必需选项。configdefaultdefault

cfg_from_strcfg_str: str dict[str optional[Union[str int float bool List[str]]]][来源]

从字符串文本解析调度程序并返回 cfg 映射,其中 cfg 值已转换为相应的 类型。未知键将被忽略 ,并且不会在结果映射中返回。cfg

注意

与 method 不同,此方法不会解析 default 选项或检查所需的选项是否实际上是 存在于给定的 .此方法旨在 当输入为字符串时,在调用之前调用 编码的运行 cfg。也就是说,要完全解析 cfg,请调用 。resolvecfg_strresolve()opt.resolve(opt.cfg_from_str(cfg_literal))

如果 是空字符串,则返回空字符串。否则,至少需要一个由 (等于) 分隔的 kv 对。cfg_strcfg"="

(逗号) 或 (分号) 可用于分隔多个 kv 对。","";"

CfgValallows 的 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"}
getname str 可选[runopt][源代码]

如果已注册任何选项,则返回选项,否则返回 None

static is_typeobj 可选[Union[str int float bool List[str]]]tp Type[Optional[Union[str int float bool List[str]]]] bool[来源]

如果类型为 ,则返回 True。类似于 isinstance(),但支持 tp = List[str] 因此可以用来验证 ConfigValue。objtp

resolvecfg Mapping[str 可选[Union[str int float bool List[str]]]] Dict[str 可选[Union[str int float bool List[str]]]]][来源]

根据此检查给定的配置并设置默认配置 如果未设置。runopts

注意

此运行选项未知的额外配置将被忽略。

运行状态

class torchx.specs 中。AppStatusstate: ~torchx.specs.api.AppStatenum_restarts: int = 0msg: str = ''structured_error_msg: str = '<NONE>'ui_url: ~typing.可选[str] = Noneroles: ~typing。列表[~torchx.specs.api.RoleStatus] = <factory>[来源]

的运行时状态。调度程序可以 返回任意文本消息(msg 字段)。 如果发生任何错误,调度程序可以填充 json 响应。AppDefstructured_error_msg

replicas表示任务中副本的状态。如果作业 运行多次重试时,该参数将包含 最近的重试。注意:如果之前的重试失败,但最近的重试失败 Retry Succeeded 或 In Progress,将不包含发生的错误。replicas

formatfilter_roles 可选[List[str]] = None str[来源]
根据应用程序状态设置日志格式。应用状态包括:
  1. State:应用程序的状态。

  2. Num Restarts:应用程序重启的次数。

  3. Roles:角色列表。

  4. Msg:调度程序返回的任意文本消息。

  5. 结构化错误消息:Json 响应错误消息。

  6. UI URL:应用程序 URL

raise_for_status [来源]

如果状态不是 SUCCEEDED,raise_for_status将引发 AppStatusError。

class torchx.specs 中。AppStatevalue[来源]

应用程序的状态。应用程序从初始状态开始,经过 、 、 状态,最后到达最终状态:,''FAILED'', .UNSUBMITTEDSUBMITTEDPENDINGRUNNINGSUCCEEDEDCANCELLED

如果调度程序支持抢占,则应用程序将从 state 移动到 upon preempation。RUNNINGPENDING

如果用户停止应用程序,则应用程序状态会移动 to ,然后 to 实际取消作业的时间 由调度程序。STOPPEDCANCELLED

  1. UNSUBMITTED - 应用程序尚未提交到调度程序

  2. SUBMITTED - 应用程序已成功提交到调度程序

  3. PENDING - 应用程序已提交到调度程序待分配

  4. RUNNING - 应用程序正在运行

  5. 成功 - 应用已成功完成

  6. FAILED - 应用未成功完成

  7. CANCELLED - 应用程序在完成之前已取消

  8. UNKNOWN - 应用程序状态未知

torchx.specs 的复制状态

别名为AppState

坐骑

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 中。BindMountsrc_path: strdst_path strread_only: bool = False[来源]

定义要挂载的绑定挂载 – 将主机路径绑定到 worker 中 环境。请参阅调度程序文档,了解每个 bind mounts 如何作 调度。

参数
  • src_path – 主机上的路径

  • dst_path – 工作线程环境/容器中的路径

  • read_only – 挂载是否应为只读

class torchx.specs 中。VolumeMountsrc strdst_path strread_only: bool = False[来源]

定义要挂载到工作线程环境中的持久卷挂载。 :p aram src:要挂载的卷的名称或 ID :p aram dst_path:Worker 环境/容器中的路径 :p aram read_only:挂载是否应为只读

class torchx.specs 中。DeviceMountsrc_path: strdst_path str权限 str = 'rwm'[来源]

定义要挂载到容器中的主机设备。 :p aram src_path:主机上的路径 :p aram dst_path:Worker 环境/容器中的路径 :p aram permissions:要在设备上设置的权限。默认值:read、write、mknode

组件 Linter

torchx.specs.file_linter。validatepath strcomponent_function: str List[LinterMessage][来源]

验证函数以确保它符合组件标准。

validate根据以下规则查找 并为其添加 VIIDATE:component_function

  1. 该函数必须具有 google-styple 文档

  2. 所有函数参数都必须进行注释

  3. 该函数必须返回torchx.specs.api.AppDef

参数
  • path (路径) – python 源文件的路径。

  • component_function – 要验证的函数的名称。

结果

验证错误列表

返回类型

列表[LinterMessage]

torchx.specs.file_linter。get_fn_docstringfn Callable[[...] object] Tuple[str Dict[str str]][来源]

从提供的函数中解析函数和参数描述。文档字符串应为 google 样式格式

如果 function 没有文档字符串,则函数描述将是函数的名称 TIP 关于如何改进帮助消息和参数的描述将是参数的名称。

文档字符串中不存在的参数将包含默认/必需信息

参数

fn – 带或不带文档字符串的函数

结果

函数描述、参数描述其中 key 是参数和值的名称

如果描述

torchx.specs.file_linter 类LinterMessagename strdescription strline intchar int严重性str = 'error'[来源]
torchx.specs.file_linter 类TorchFunctionVisitorcomponent_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]]

visit_FunctionDefnode FunctionDef None[来源]

使用子验证器验证函数 def。

torchx.specs.file_linter 类TorchXArgumentHelpFormatterprogindent_increment=2max_help_position=24width=None[来源]

Help 消息 formatter,它向参数 help 添加默认值和 required。

如果参数是必需的,则该类会在帮助消息的末尾附加 (required)。 如果参数具有 default value,则类会在末尾附加 (default: $DEFAULT)。 格式化程序设计为仅用于 torchx 组件功能。 这些函数没有 required 和 default 参数。

torchx.specs.file_linter 类TorchxFunctionArgsValidator[来源]
validateapp_specs_func_def FunctionDef List[LinterMessage][来源]

用于验证提供的函数 def 的方法。

torchx.specs.file_linter 类TorchxFunctionValidator[来源]
抽象验证app_specs_func_def FunctionDef List[LinterMessage][来源]

用于验证提供的函数 def 的方法。

torchx.specs.file_linter 类TorchxReturnValidator[来源]
validateapp_specs_func_def FunctionDef List[LinterMessage][来源]
验证 torchx 函数的 return 注解。当前允许的注释:
  • 应用定义

  • 规格。应用定义

文档

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

查看文档

教程

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

查看教程

资源

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

查看资源