torchx-nightly 2025.7.9__py3-none-any.whl → 2025.11.12__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- torchx/{schedulers/ray/__init__.py → _version.py} +3 -1
- torchx/cli/cmd_list.py +1 -2
- torchx/cli/cmd_run.py +202 -28
- torchx/cli/cmd_tracker.py +1 -1
- torchx/components/__init__.py +1 -8
- torchx/components/dist.py +9 -3
- torchx/components/integration_tests/component_provider.py +2 -2
- torchx/components/utils.py +1 -1
- torchx/distributed/__init__.py +1 -1
- torchx/runner/api.py +92 -81
- torchx/runner/config.py +11 -9
- torchx/runner/events/__init__.py +20 -10
- torchx/runner/events/api.py +1 -1
- torchx/schedulers/__init__.py +7 -10
- torchx/schedulers/api.py +20 -15
- torchx/schedulers/aws_batch_scheduler.py +45 -2
- torchx/schedulers/docker_scheduler.py +3 -0
- torchx/schedulers/kubernetes_scheduler.py +200 -17
- torchx/schedulers/local_scheduler.py +1 -0
- torchx/schedulers/slurm_scheduler.py +160 -26
- torchx/specs/__init__.py +23 -6
- torchx/specs/api.py +279 -33
- torchx/specs/builders.py +109 -28
- torchx/specs/file_linter.py +117 -53
- torchx/specs/finder.py +25 -37
- torchx/specs/named_resources_aws.py +13 -2
- torchx/tracker/__init__.py +2 -2
- torchx/tracker/api.py +1 -1
- torchx/util/entrypoints.py +1 -6
- torchx/util/strings.py +1 -1
- torchx/util/types.py +12 -1
- torchx/version.py +2 -2
- torchx/workspace/api.py +102 -5
- {torchx_nightly-2025.7.9.dist-info → torchx_nightly-2025.11.12.dist-info}/METADATA +34 -48
- {torchx_nightly-2025.7.9.dist-info → torchx_nightly-2025.11.12.dist-info}/RECORD +39 -51
- {torchx_nightly-2025.7.9.dist-info → torchx_nightly-2025.11.12.dist-info}/WHEEL +1 -1
- torchx/examples/pipelines/__init__.py +0 -0
- torchx/examples/pipelines/kfp/__init__.py +0 -0
- torchx/examples/pipelines/kfp/advanced_pipeline.py +0 -289
- torchx/examples/pipelines/kfp/dist_pipeline.py +0 -71
- torchx/examples/pipelines/kfp/intro_pipeline.py +0 -83
- torchx/pipelines/kfp/__init__.py +0 -30
- torchx/pipelines/kfp/adapter.py +0 -274
- torchx/pipelines/kfp/version.py +0 -19
- torchx/schedulers/gcp_batch_scheduler.py +0 -497
- torchx/schedulers/ray/ray_common.py +0 -22
- torchx/schedulers/ray/ray_driver.py +0 -307
- torchx/schedulers/ray_scheduler.py +0 -454
- {torchx_nightly-2025.7.9.dist-info → torchx_nightly-2025.11.12.dist-info}/entry_points.txt +0 -0
- {torchx_nightly-2025.7.9.dist-info → torchx_nightly-2025.11.12.dist-info/licenses}/LICENSE +0 -0
- {torchx_nightly-2025.7.9.dist-info → torchx_nightly-2025.11.12.dist-info}/top_level.txt +0 -0
torchx/util/entrypoints.py
CHANGED
|
@@ -69,9 +69,7 @@ def _defer_load_ep(ep: EntryPoint) -> object:
|
|
|
69
69
|
return run
|
|
70
70
|
|
|
71
71
|
|
|
72
|
-
def load_group(
|
|
73
|
-
group: str, default: Optional[Dict[str, Any]] = None, skip_defaults: bool = False
|
|
74
|
-
):
|
|
72
|
+
def load_group(group: str, default: Optional[Dict[str, Any]] = None):
|
|
75
73
|
"""
|
|
76
74
|
Loads all the entry points specified by ``group`` and returns
|
|
77
75
|
the entry points as a map of ``name (str) -> deferred_load_fn``.
|
|
@@ -90,7 +88,6 @@ def load_group(
|
|
|
90
88
|
1. ``load_group("foo")["bar"]("baz")`` -> equivalent to calling ``this.is.a_fn("baz")``
|
|
91
89
|
1. ``load_group("food")`` -> ``None``
|
|
92
90
|
1. ``load_group("food", default={"hello": this.is.c_fn})["hello"]("world")`` -> equivalent to calling ``this.is.c_fn("world")``
|
|
93
|
-
1. ``load_group("food", default={"hello": this.is.c_fn}, skip_defaults=True)`` -> ``None``
|
|
94
91
|
|
|
95
92
|
|
|
96
93
|
If the entrypoint is a module (versus a function as shown above), then calling the ``deferred_load_fn``
|
|
@@ -115,8 +112,6 @@ def load_group(
|
|
|
115
112
|
entrypoints = metadata.entry_points().get(group, ())
|
|
116
113
|
|
|
117
114
|
if len(entrypoints) == 0:
|
|
118
|
-
if skip_defaults:
|
|
119
|
-
return None
|
|
120
115
|
return default
|
|
121
116
|
|
|
122
117
|
eps = {}
|
torchx/util/strings.py
CHANGED
|
@@ -13,7 +13,7 @@ def normalize_str(data: str) -> str:
|
|
|
13
13
|
"""
|
|
14
14
|
Invokes ``lower`` on thes string and removes all
|
|
15
15
|
characters that do not satisfy ``[a-z0-9\\-]`` pattern.
|
|
16
|
-
This method is mostly used to make sure kubernetes
|
|
16
|
+
This method is mostly used to make sure kubernetes scheduler gets
|
|
17
17
|
the job name that does not violate its restrictions.
|
|
18
18
|
"""
|
|
19
19
|
if data.startswith("-"):
|
torchx/util/types.py
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
import inspect
|
|
10
10
|
import re
|
|
11
|
+
from types import UnionType
|
|
11
12
|
from typing import Any, Callable, Optional, Tuple, TypeVar, Union
|
|
12
13
|
|
|
13
14
|
|
|
@@ -234,10 +235,20 @@ def decode_optional(param_type: Any) -> Any:
|
|
|
234
235
|
If ``param_type`` is type Optional[INNER_TYPE], method returns INNER_TYPE
|
|
235
236
|
Otherwise returns ``param_type``
|
|
236
237
|
"""
|
|
238
|
+
|
|
237
239
|
if not hasattr(param_type, "__origin__"):
|
|
238
|
-
|
|
240
|
+
if isinstance(param_type, UnionType):
|
|
241
|
+
# handle BinOp style Optional (e.g. `T | None`)
|
|
242
|
+
if len(param_type.__args__) == 2 and param_type.__args__[1] is type(None):
|
|
243
|
+
return param_type.__args__[0]
|
|
244
|
+
else:
|
|
245
|
+
return param_type
|
|
246
|
+
else:
|
|
247
|
+
return param_type
|
|
248
|
+
|
|
239
249
|
if param_type.__origin__ is not Union:
|
|
240
250
|
return param_type
|
|
251
|
+
|
|
241
252
|
args = param_type.__args__
|
|
242
253
|
if len(args) == 2 and args[1] is type(None):
|
|
243
254
|
return args[0]
|
torchx/version.py
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
1
|
# Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
2
|
# All rights reserved.
|
|
4
3
|
#
|
|
@@ -7,6 +6,7 @@
|
|
|
7
6
|
|
|
8
7
|
# pyre-strict
|
|
9
8
|
|
|
9
|
+
from torchx._version import BASE_VERSION
|
|
10
10
|
from torchx.util.entrypoints import load
|
|
11
11
|
|
|
12
12
|
# Follows PEP-0440 version scheme guidelines
|
|
@@ -18,7 +18,7 @@ from torchx.util.entrypoints import load
|
|
|
18
18
|
# 0.1.0bN # Beta release
|
|
19
19
|
# 0.1.0rcN # Release Candidate
|
|
20
20
|
# 0.1.0 # Final release
|
|
21
|
-
__version__ =
|
|
21
|
+
__version__: str = BASE_VERSION
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
# Use the github container registry images corresponding to the current package
|
torchx/workspace/api.py
CHANGED
|
@@ -8,11 +8,16 @@
|
|
|
8
8
|
|
|
9
9
|
import abc
|
|
10
10
|
import fnmatch
|
|
11
|
+
import logging
|
|
11
12
|
import posixpath
|
|
13
|
+
import tempfile
|
|
14
|
+
import warnings
|
|
12
15
|
from dataclasses import dataclass
|
|
13
16
|
from typing import Any, Dict, Generic, Iterable, Mapping, Tuple, TYPE_CHECKING, TypeVar
|
|
14
17
|
|
|
15
|
-
from torchx.specs import AppDef, CfgVal, Role, runopts
|
|
18
|
+
from torchx.specs import AppDef, CfgVal, Role, runopts, Workspace
|
|
19
|
+
|
|
20
|
+
logger: logging.Logger = logging.getLogger(__name__)
|
|
16
21
|
|
|
17
22
|
if TYPE_CHECKING:
|
|
18
23
|
from fsspec import AbstractFileSystem
|
|
@@ -35,11 +40,33 @@ class PkgInfo(Generic[PackageType]):
|
|
|
35
40
|
lazy_overrides: Dict[str, Any]
|
|
36
41
|
metadata: PackageType
|
|
37
42
|
|
|
43
|
+
def __post_init__(self) -> None:
|
|
44
|
+
msg = (
|
|
45
|
+
f"{self.__class__.__name__} is deprecated and will be removed in the future."
|
|
46
|
+
" Consider forking this class if your project depends on it."
|
|
47
|
+
)
|
|
48
|
+
warnings.warn(
|
|
49
|
+
msg,
|
|
50
|
+
FutureWarning,
|
|
51
|
+
stacklevel=2,
|
|
52
|
+
)
|
|
53
|
+
|
|
38
54
|
|
|
39
55
|
@dataclass
|
|
40
56
|
class WorkspaceBuilder(Generic[PackageType, WorkspaceConfigType]):
|
|
41
57
|
cfg: WorkspaceConfigType
|
|
42
58
|
|
|
59
|
+
def __post_init__(self) -> None:
|
|
60
|
+
msg = (
|
|
61
|
+
f"{self.__class__.__name__} is deprecated and will be removed in the future."
|
|
62
|
+
" Consider forking this class if your project depends on it."
|
|
63
|
+
)
|
|
64
|
+
warnings.warn(
|
|
65
|
+
msg,
|
|
66
|
+
FutureWarning,
|
|
67
|
+
stacklevel=2,
|
|
68
|
+
)
|
|
69
|
+
|
|
43
70
|
@abc.abstractmethod
|
|
44
71
|
def build_workspace(self, sync: bool = True) -> PkgInfo[PackageType]:
|
|
45
72
|
"""
|
|
@@ -77,11 +104,82 @@ class WorkspaceMixin(abc.ABC, Generic[T]):
|
|
|
77
104
|
"""
|
|
78
105
|
return runopts()
|
|
79
106
|
|
|
80
|
-
|
|
107
|
+
def build_workspaces(self, roles: list[Role], cfg: Mapping[str, CfgVal]) -> None:
|
|
108
|
+
"""
|
|
109
|
+
NOTE: this method MUTATES the passed roles!
|
|
110
|
+
|
|
111
|
+
Builds the workspaces (if any) for each role and updates the role to reflect the built workspace.
|
|
112
|
+
Typically ``role.image`` is updated with the newly built image that reflects the local workspace.
|
|
113
|
+
Some workspace implementations may add extra environment variables to make it easier for other
|
|
114
|
+
parts of the program to access the workspace. For example a ``WORKSPACE_DIR`` env var may be added
|
|
115
|
+
to ``role.env`` that scripts can use to refert to the workspace directory in the container.
|
|
116
|
+
"""
|
|
117
|
+
|
|
118
|
+
build_cache: dict[object, object] = {}
|
|
119
|
+
|
|
120
|
+
for i, role in enumerate(roles):
|
|
121
|
+
if role.workspace:
|
|
122
|
+
old_img = role.image
|
|
123
|
+
self.caching_build_workspace_and_update_role(role, cfg, build_cache)
|
|
124
|
+
|
|
125
|
+
if old_img != role.image:
|
|
126
|
+
logger.info(
|
|
127
|
+
"role[%d]=%s updated with new image to include workspace changes",
|
|
128
|
+
i,
|
|
129
|
+
role.name,
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
def caching_build_workspace_and_update_role(
|
|
133
|
+
self,
|
|
134
|
+
role: Role,
|
|
135
|
+
cfg: Mapping[str, CfgVal],
|
|
136
|
+
build_cache: dict[object, object],
|
|
137
|
+
) -> None:
|
|
138
|
+
"""
|
|
139
|
+
Same as :py:meth:`build_workspace_and_update_role` but takes
|
|
140
|
+
a ``build_cache`` that can be used to cache pointers to build artifacts
|
|
141
|
+
between building workspace for each role.
|
|
142
|
+
|
|
143
|
+
This is useful when an appdef has multiple roles where the image and workspace
|
|
144
|
+
of the roles are the same but other attributes such as entrypoint or args are different.
|
|
145
|
+
|
|
146
|
+
NOTE: ``build_cache``'s lifetime is within :py:meth:`build_workspace_and_update_roles`
|
|
147
|
+
NOTE: the workspace implementation decides what to cache
|
|
148
|
+
|
|
149
|
+
Workspace subclasses should prefer implementing this method over
|
|
150
|
+
:py:meth:`build_workspace_and_update_role`.
|
|
151
|
+
|
|
152
|
+
The default implementation of this method simply calls the (deprecated) non-caching
|
|
153
|
+
:py:meth:`build_workspace_and_update_role` and deals with multi-dir workspaces by
|
|
154
|
+
merging them into a single tmpdir before passing it down.
|
|
155
|
+
|
|
156
|
+
"""
|
|
157
|
+
|
|
158
|
+
workspace = role.workspace
|
|
159
|
+
|
|
160
|
+
if not workspace:
|
|
161
|
+
return
|
|
162
|
+
|
|
163
|
+
if workspace.is_unmapped_single_project():
|
|
164
|
+
# single-dir workspace with no target map; no need to copy to a tmp dir
|
|
165
|
+
self.build_workspace_and_update_role(role, str(workspace), cfg)
|
|
166
|
+
else:
|
|
167
|
+
# multi-dirs or single-dir with a target map;
|
|
168
|
+
# copy all dirs to a tmp dir and treat the tmp dir as a single-dir workspace
|
|
169
|
+
with tempfile.TemporaryDirectory(suffix="torchx_workspace_") as outdir:
|
|
170
|
+
workspace.merge_into(outdir)
|
|
171
|
+
self.build_workspace_and_update_role(role, outdir, cfg)
|
|
172
|
+
|
|
81
173
|
def build_workspace_and_update_role(
|
|
82
|
-
self,
|
|
174
|
+
self,
|
|
175
|
+
role: Role,
|
|
176
|
+
workspace: str,
|
|
177
|
+
cfg: Mapping[str, CfgVal],
|
|
83
178
|
) -> None:
|
|
84
179
|
"""
|
|
180
|
+
.. note:: DEPRECATED: Workspace subclasses should implement
|
|
181
|
+
:py:meth:`caching_build_workspace_and_update_role` over this method.
|
|
182
|
+
|
|
85
183
|
Builds the specified ``workspace`` with respect to ``img``
|
|
86
184
|
and updates the ``role`` to reflect the built workspace artifacts.
|
|
87
185
|
In the simplest case, this method builds a new image and updates
|
|
@@ -90,7 +188,7 @@ class WorkspaceMixin(abc.ABC, Generic[T]):
|
|
|
90
188
|
|
|
91
189
|
Note: this method mutates the passed ``role``.
|
|
92
190
|
"""
|
|
93
|
-
|
|
191
|
+
raise NotImplementedError("implement `caching_build_workspace_and_update_role`")
|
|
94
192
|
|
|
95
193
|
def dryrun_push_images(self, app: AppDef, cfg: Mapping[str, CfgVal]) -> T:
|
|
96
194
|
"""
|
|
@@ -133,7 +231,6 @@ def walk_workspace(
|
|
|
133
231
|
walk_workspace walks the filesystem path and applies the ignore rules
|
|
134
232
|
specified via ``ignore_name``.
|
|
135
233
|
This follows the rules for ``.dockerignore``.
|
|
136
|
-
https://docs.docker.com/engine/reference/builder/#dockerignore-file
|
|
137
234
|
"""
|
|
138
235
|
ignore_patterns = []
|
|
139
236
|
ignore_path = posixpath.join(path, ignore_name)
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: torchx-nightly
|
|
3
|
-
Version: 2025.
|
|
3
|
+
Version: 2025.11.12
|
|
4
4
|
Summary: TorchX SDK and Components
|
|
5
|
-
Home-page: https://github.com/pytorch/torchx
|
|
5
|
+
Home-page: https://github.com/meta-pytorch/torchx
|
|
6
6
|
Author: TorchX Devs
|
|
7
7
|
Author-email: torchx@fb.com
|
|
8
8
|
License: BSD-3
|
|
@@ -22,10 +22,11 @@ Requires-Dist: pyyaml
|
|
|
22
22
|
Requires-Dist: docker
|
|
23
23
|
Requires-Dist: filelock
|
|
24
24
|
Requires-Dist: fsspec>=2023.10.0
|
|
25
|
-
Requires-Dist: urllib3<1.27,>=1.21.1
|
|
26
25
|
Requires-Dist: tabulate
|
|
27
|
-
Provides-Extra:
|
|
26
|
+
Provides-Extra: aws-batch
|
|
28
27
|
Requires-Dist: boto3; extra == "aws-batch"
|
|
28
|
+
Provides-Extra: kubernetes
|
|
29
|
+
Requires-Dist: kubernetes>=11; extra == "kubernetes"
|
|
29
30
|
Provides-Extra: dev
|
|
30
31
|
Requires-Dist: aiobotocore==2.20.0; extra == "dev"
|
|
31
32
|
Requires-Dist: ax-platform[mysql]==0.2.3; extra == "dev"
|
|
@@ -36,13 +37,8 @@ Requires-Dist: kubernetes==25.3.0; extra == "dev"
|
|
|
36
37
|
Requires-Dist: flake8==3.9.0; extra == "dev"
|
|
37
38
|
Requires-Dist: fsspec==2024.3.1; extra == "dev"
|
|
38
39
|
Requires-Dist: s3fs==2024.3.1; extra == "dev"
|
|
39
|
-
Requires-Dist: google-cloud-batch==0.17.14; extra == "dev"
|
|
40
|
-
Requires-Dist: google-cloud-logging==3.10.0; extra == "dev"
|
|
41
|
-
Requires-Dist: google-cloud-runtimeconfig==0.34.0; extra == "dev"
|
|
42
40
|
Requires-Dist: hydra-core; extra == "dev"
|
|
43
41
|
Requires-Dist: ipython; extra == "dev"
|
|
44
|
-
Requires-Dist: kfp==1.8.22; extra == "dev"
|
|
45
|
-
Requires-Dist: protobuf==3.20.3; extra == "dev"
|
|
46
42
|
Requires-Dist: mlflow-skinny; extra == "dev"
|
|
47
43
|
Requires-Dist: moto~=5.0.8; extra == "dev"
|
|
48
44
|
Requires-Dist: pyre-extensions; extra == "dev"
|
|
@@ -53,36 +49,34 @@ Requires-Dist: pytorch-lightning==2.5.0; extra == "dev"
|
|
|
53
49
|
Requires-Dist: tensorboard==2.14.0; extra == "dev"
|
|
54
50
|
Requires-Dist: sagemaker==2.230.0; extra == "dev"
|
|
55
51
|
Requires-Dist: torch-model-archiver>=0.4.2; extra == "dev"
|
|
56
|
-
Requires-Dist: torch
|
|
52
|
+
Requires-Dist: torch; extra == "dev"
|
|
57
53
|
Requires-Dist: torchmetrics==1.6.3; extra == "dev"
|
|
58
54
|
Requires-Dist: torchserve>=0.10.0; extra == "dev"
|
|
59
|
-
Requires-Dist: torchtext
|
|
60
|
-
Requires-Dist: torchvision
|
|
55
|
+
Requires-Dist: torchtext; extra == "dev"
|
|
56
|
+
Requires-Dist: torchvision; extra == "dev"
|
|
61
57
|
Requires-Dist: typing-extensions; extra == "dev"
|
|
62
58
|
Requires-Dist: ts==0.5.1; extra == "dev"
|
|
63
|
-
Requires-Dist: ray[default]; extra == "dev"
|
|
64
59
|
Requires-Dist: wheel; extra == "dev"
|
|
65
60
|
Requires-Dist: lintrunner; extra == "dev"
|
|
66
61
|
Requires-Dist: lintrunner-adapters; extra == "dev"
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
Requires-Dist: ray>=1.12.1; extra == "ray"
|
|
62
|
+
Dynamic: author
|
|
63
|
+
Dynamic: author-email
|
|
64
|
+
Dynamic: classifier
|
|
65
|
+
Dynamic: description
|
|
66
|
+
Dynamic: description-content-type
|
|
67
|
+
Dynamic: home-page
|
|
68
|
+
Dynamic: keywords
|
|
69
|
+
Dynamic: license
|
|
70
|
+
Dynamic: license-file
|
|
71
|
+
Dynamic: provides-extra
|
|
72
|
+
Dynamic: requires-dist
|
|
73
|
+
Dynamic: requires-python
|
|
74
|
+
Dynamic: summary
|
|
81
75
|
|
|
82
76
|
[](https://pypi.org/project/torchx/)
|
|
83
|
-
[](https://github.com/pytorch/torchx/blob/main/LICENSE)
|
|
84
|
-

|
|
85
|
-

|
|
77
|
+
[](https://github.com/meta-pytorch/torchx/blob/main/LICENSE)
|
|
78
|
+

|
|
79
|
+

|
|
86
80
|
[](https://codecov.io/gh/pytorch/torchx)
|
|
87
81
|
|
|
88
82
|
|
|
@@ -100,19 +94,17 @@ TorchX currently supports:
|
|
|
100
94
|
* AWS Batch
|
|
101
95
|
* Docker
|
|
102
96
|
* Local
|
|
103
|
-
* Ray (prototype)
|
|
104
|
-
* GCP Batch (prototype)
|
|
105
97
|
|
|
106
|
-
Need a scheduler not listed? [Let us know!](https://github.com/pytorch/torchx/issues?q=is%3Aopen+is%3Aissue+label%3Ascheduler-request)
|
|
98
|
+
Need a scheduler not listed? [Let us know!](https://github.com/meta-pytorch/torchx/issues?q=is%3Aopen+is%3Aissue+label%3Ascheduler-request)
|
|
107
99
|
|
|
108
100
|
## Quickstart
|
|
109
101
|
|
|
110
|
-
See the [quickstart guide](https://pytorch.org/torchx/latest/quickstart.html).
|
|
102
|
+
See the [quickstart guide](https://meta-pytorch.org/torchx/latest/quickstart.html).
|
|
111
103
|
|
|
112
104
|
## Documentation
|
|
113
105
|
|
|
114
|
-
* [Stable Documentation](https://pytorch.org/torchx/latest/)
|
|
115
|
-
* [Nightly Documentation](https://pytorch.org/torchx/main/)
|
|
106
|
+
* [Stable Documentation](https://meta-pytorch.org/torchx/latest/)
|
|
107
|
+
* [Nightly Documentation](https://meta-pytorch.org/torchx/main/)
|
|
116
108
|
|
|
117
109
|
## Requirements
|
|
118
110
|
|
|
@@ -136,15 +128,9 @@ pip install torchx
|
|
|
136
128
|
# install torchx sdk and CLI -- all dependencies
|
|
137
129
|
pip install "torchx[dev]"
|
|
138
130
|
|
|
139
|
-
# install torchx kubeflow pipelines (kfp) support
|
|
140
|
-
pip install "torchx[kfp]"
|
|
141
|
-
|
|
142
131
|
# install torchx Kubernetes / Volcano support
|
|
143
132
|
pip install "torchx[kubernetes]"
|
|
144
133
|
|
|
145
|
-
# install torchx Ray support
|
|
146
|
-
pip install "torchx[ray]"
|
|
147
|
-
|
|
148
134
|
# install torchx GCP Batch support
|
|
149
135
|
pip install "torchx[gcp_batch]"
|
|
150
136
|
```
|
|
@@ -160,22 +146,22 @@ pip install torchx-nightly[dev]
|
|
|
160
146
|
|
|
161
147
|
```bash
|
|
162
148
|
# install torchx sdk and CLI from source
|
|
163
|
-
$ pip install -e git+https://github.com/pytorch/torchx.git#egg=torchx
|
|
149
|
+
$ pip install -e git+https://github.com/meta-pytorch/torchx.git#egg=torchx
|
|
164
150
|
|
|
165
151
|
# install extra dependencies
|
|
166
|
-
$ pip install -e git+https://github.com/pytorch/torchx.git#egg=torchx[dev]
|
|
152
|
+
$ pip install -e git+https://github.com/meta-pytorch/torchx.git#egg=torchx[dev]
|
|
167
153
|
```
|
|
168
154
|
|
|
169
155
|
### Docker
|
|
170
156
|
|
|
171
157
|
TorchX provides a docker container for using as as part of a TorchX role.
|
|
172
158
|
|
|
173
|
-
See: https://github.com/pytorch/torchx/pkgs/container/torchx
|
|
159
|
+
See: https://github.com/meta-pytorch/torchx/pkgs/container/torchx
|
|
174
160
|
|
|
175
161
|
## Contributing
|
|
176
162
|
|
|
177
|
-
We welcome PRs! See the [CONTRIBUTING](https://github.com/pytorch/torchx/blob/main/CONTRIBUTING.md) file.
|
|
163
|
+
We welcome PRs! See the [CONTRIBUTING](https://github.com/meta-pytorch/torchx/blob/main/CONTRIBUTING.md) file.
|
|
178
164
|
|
|
179
165
|
## License
|
|
180
166
|
|
|
181
|
-
TorchX is BSD licensed, as found in the [LICENSE](https://github.com/pytorch/torchx/blob/main/LICENSE) file.
|
|
167
|
+
TorchX is BSD licensed, as found in the [LICENSE](https://github.com/meta-pytorch/torchx/blob/main/LICENSE) file.
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
torchx/__init__.py,sha256=QFDTdJacncWYWHL-2QyWdY5MUck3jVfSPRRGdvedcKc,355
|
|
2
|
+
torchx/_version.py,sha256=TzDuXIviDldFbXAhGe33redQcoP33jIsVR_hMyqSgdc,250
|
|
2
3
|
torchx/notebook.py,sha256=Rc6XUMzSq7NXtsYdtVluE6T89LpEhcba-3ANxuaLCCU,1008
|
|
3
|
-
torchx/version.py,sha256=
|
|
4
|
+
torchx/version.py,sha256=YcE66UkBxYHMQMtjVts4jF3l6Qeaj1gK_LzxU77l8Bo,975
|
|
4
5
|
torchx/apps/__init__.py,sha256=fE0IHi1JJpxsNVBNzWNee2thrNXFFRhY94c80RxNSIE,231
|
|
5
6
|
torchx/apps/serve/__init__.py,sha256=Md3cCHD7Ano9kV15PqGbicgUO-RMdh4aVy1yKiDt_xE,208
|
|
6
7
|
torchx/apps/serve/serve.py,sha256=u_h8agld1TwIPq5GRosHL3uxhkljNfS65McLB77O0OE,4386
|
|
@@ -14,27 +15,27 @@ torchx/cli/cmd_base.py,sha256=SdqMtqi04CEqnzcgcS35DbDbsBeMxSgEhfynfpIkMGk,790
|
|
|
14
15
|
torchx/cli/cmd_cancel.py,sha256=NKfOCu_44Lch9vliGSQ0Uv6BVqpUqj7Tob652TI-ua4,835
|
|
15
16
|
torchx/cli/cmd_configure.py,sha256=1kTv0qbsbV44So74plAySwWu56pQrqjhfW_kbfdC3Rw,1722
|
|
16
17
|
torchx/cli/cmd_describe.py,sha256=E5disbHoKTsqYKp2s3DaFW9GDLCCOgdOc3pQoHKoyCs,1283
|
|
17
|
-
torchx/cli/cmd_list.py,sha256=
|
|
18
|
+
torchx/cli/cmd_list.py,sha256=alkS9aIaDI8lX3W8uj8Vtr3IU3G2VeCuokKSd3zOFug,1409
|
|
18
19
|
torchx/cli/cmd_log.py,sha256=v-EZYUDOcG95rEgTnrsmPJMUyxM9Mk8YFAJtUxtgViE,5475
|
|
19
|
-
torchx/cli/cmd_run.py,sha256=
|
|
20
|
+
torchx/cli/cmd_run.py,sha256=z8wS-M2W9hHZfLkA6DFiV6Y0LFS9KfEBc_NTwAwdviQ,18780
|
|
20
21
|
torchx/cli/cmd_runopts.py,sha256=NWZiP8XpQjfTDJgays2c6MgL_8wxFoeDge6NstaZdKk,1302
|
|
21
22
|
torchx/cli/cmd_status.py,sha256=22IAEmKs0qkG6kJi83u9dRX2Q-ntT7yehVx7FxtY-vQ,2114
|
|
22
|
-
torchx/cli/cmd_tracker.py,sha256=
|
|
23
|
+
torchx/cli/cmd_tracker.py,sha256=9gmOmYi-89qQRGQfSrXCTto7ve54_JKFqs_wa7oRUA8,5223
|
|
23
24
|
torchx/cli/colors.py,sha256=yLMes7e_UoLAfhxE0W6edhc58t83UHAlnCN2ANPeuXw,568
|
|
24
25
|
torchx/cli/main.py,sha256=1Jf2cnO6Y2W69Adt88avmNPVrL6ZR4Hkff6GVB4293k,3484
|
|
25
|
-
torchx/components/__init__.py,sha256=
|
|
26
|
+
torchx/components/__init__.py,sha256=JaVte0j9Gqi6IrjZKudJ2Kr3gkdHsvlCdRTo-zYpSRo,11815
|
|
26
27
|
torchx/components/component_test_base.py,sha256=22iNSdVa_qTW3SMM30Pw5UEWlK4DZVw0C03EqYiaLOI,4150
|
|
27
|
-
torchx/components/dist.py,sha256=
|
|
28
|
+
torchx/components/dist.py,sha256=6DNPEvHVqEifmM8g1L7HVY169cQv_7tSfSlh3o6lTp4,14930
|
|
28
29
|
torchx/components/interpret.py,sha256=g8gkKdDJvsBfX1ZrpVT7n2bMEtmwRV_1AqDyAnnQ_aA,697
|
|
29
30
|
torchx/components/metrics.py,sha256=1gbp8BfzZWGa7PD1db5vRADlONzmae4qSBUUdCWayr0,2814
|
|
30
31
|
torchx/components/serve.py,sha256=uxIC5gU2ecg0EJIPX_oEPzNNOXRAre4j2eXusrgwGAI,2156
|
|
31
32
|
torchx/components/structured_arg.py,sha256=8jMcd0rtUmzCKEQKJ_JYzxSkMMK9q0fYjkwAs6wo78E,9595
|
|
32
33
|
torchx/components/train.py,sha256=vtrQXRcD7bIcbb3lSeyD9BBlIe1mv1WNW6rnLK9R0Mw,1259
|
|
33
|
-
torchx/components/utils.py,sha256=
|
|
34
|
+
torchx/components/utils.py,sha256=IMjihhgs7nO67YtTetUBjN_CRpyIyyQsaJBkp7mpHfk,9368
|
|
34
35
|
torchx/components/integration_tests/__init__.py,sha256=Md3cCHD7Ano9kV15PqGbicgUO-RMdh4aVy1yKiDt_xE,208
|
|
35
|
-
torchx/components/integration_tests/component_provider.py,sha256=
|
|
36
|
+
torchx/components/integration_tests/component_provider.py,sha256=g-4ig1vtd5Vzgug0VAKRAFUt6KAV3TgQrBCrwRSJ7ZY,3981
|
|
36
37
|
torchx/components/integration_tests/integ_tests.py,sha256=O8jd8Jq5O0mns7xzIFsHexBDHkIIAIfELQkWCzNPzRw,5165
|
|
37
|
-
torchx/distributed/__init__.py,sha256=
|
|
38
|
+
torchx/distributed/__init__.py,sha256=kh9YzDwWX7zFJJ8StR9qhMM2V3-66INs9i3ztDF-1ho,10252
|
|
38
39
|
torchx/examples/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
39
40
|
torchx/examples/torchx_out_of_sync_training.py,sha256=sXiI1G8aGsfuvxRdBszDgM8pSplqhgfXjRnAcgRwNGM,397
|
|
40
41
|
torchx/examples/apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -46,48 +47,35 @@ torchx/examples/apps/lightning/interpret.py,sha256=Hd3kE5a6FyhxCmJBfTzb4Tlj518zh
|
|
|
46
47
|
torchx/examples/apps/lightning/model.py,sha256=4CgObWfANqDN9emYSdmCpbRe_V_Lef_Hd3M-yayDbZE,4045
|
|
47
48
|
torchx/examples/apps/lightning/profiler.py,sha256=SSSihnwjeUTkBoz0E3qn1b-wbkfUIowscx2ND_37zyw,1915
|
|
48
49
|
torchx/examples/apps/lightning/train.py,sha256=0wvvshGHvZowePB4LfclXwn40X7i9euM0ReETWBcPSo,6253
|
|
49
|
-
torchx/examples/pipelines/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
50
|
-
torchx/examples/pipelines/kfp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
51
|
-
torchx/examples/pipelines/kfp/advanced_pipeline.py,sha256=U5N_XmpxbuEIh-hDayjJ5Lnk2lYvmgr7oznFnsKUk5g,8431
|
|
52
|
-
torchx/examples/pipelines/kfp/dist_pipeline.py,sha256=xFn59P1S22o2zOJ2LhlIkhjYH3le0zp2sLPNj5idTnE,2203
|
|
53
|
-
torchx/examples/pipelines/kfp/intro_pipeline.py,sha256=oWdMHPLWf5nKRm0hS7psF0yUp8Tf7tfR-Sm3YuUCmWk,2776
|
|
54
50
|
torchx/pipelines/__init__.py,sha256=2MbRVk5xwRjg-d2qPemeXpEhDsocMQumPQ53lsesZAI,606
|
|
55
|
-
torchx/pipelines/kfp/__init__.py,sha256=8iJ8lql_fxwuk9VCYSxXnX6tPL228fB5mDZpOs-kpn4,736
|
|
56
|
-
torchx/pipelines/kfp/adapter.py,sha256=5GeHULjb1kxG6wJtYVLpNkgdzUi4iYEaR42VFOwT6fY,9045
|
|
57
|
-
torchx/pipelines/kfp/version.py,sha256=mYBxd6bm4MeR34D--xo-JLQ9wHeAl_ZQLwbItCf9tr0,539
|
|
58
51
|
torchx/runner/__init__.py,sha256=x8Sz7s_tLxPgJgvWIhK4ju9BNZU61uBFywGwDY6CqJs,315
|
|
59
|
-
torchx/runner/api.py,sha256=
|
|
60
|
-
torchx/runner/config.py,sha256=
|
|
61
|
-
torchx/runner/events/__init__.py,sha256=
|
|
62
|
-
torchx/runner/events/api.py,sha256=
|
|
52
|
+
torchx/runner/api.py,sha256=xQpgiUz9jCX4zZriubbWk4tTJRe7MxNJQK64g0o7KQ8,30438
|
|
53
|
+
torchx/runner/config.py,sha256=SaKOB50d79WaMFPWK8CC4as6UaNFaRGhrBkfajq3KC4,18311
|
|
54
|
+
torchx/runner/events/__init__.py,sha256=cMiNjnr4eUNQ2Nxxtu4nsvN5lu56b-a6nJ-ct3i7DQk,5536
|
|
55
|
+
torchx/runner/events/api.py,sha256=bvxKBAYK8LzbrBNaNLgL1x0aivtfANmWo1EMGOrSR8k,2668
|
|
63
56
|
torchx/runner/events/handlers.py,sha256=ThHCIJW21BfBgB7b6ftyjASJmD1KdizpjuTtsyqnvJs,522
|
|
64
57
|
torchx/runtime/__init__.py,sha256=Wxje2BryzeQneFu5r6P9JJiEKG-_C9W1CcZ_JNrKT6g,593
|
|
65
58
|
torchx/runtime/tracking/__init__.py,sha256=dYnAPnrXYREfPXkpHhdOFkcYIODWEbA13PdD-wLQYBo,3055
|
|
66
59
|
torchx/runtime/tracking/api.py,sha256=SmUQyUKZqG3KlAhT7CJOGqRz1O274E4m63wQeOVq3CU,5472
|
|
67
|
-
torchx/schedulers/__init__.py,sha256=
|
|
68
|
-
torchx/schedulers/api.py,sha256=
|
|
69
|
-
torchx/schedulers/aws_batch_scheduler.py,sha256
|
|
60
|
+
torchx/schedulers/__init__.py,sha256=FQN9boQM4mwOD3sK9LZ3GBgw-gJ7Vx4MFj6z6ATQIrc,2211
|
|
61
|
+
torchx/schedulers/api.py,sha256=smoUv1ocfqsBRmesXbz9i1F86zBOixZ8QHxYmI_MzgQ,14649
|
|
62
|
+
torchx/schedulers/aws_batch_scheduler.py,sha256=-HpjNVhSFBDxZo3cebK-3YEguB49dxoaud2gz30cAVM,29437
|
|
70
63
|
torchx/schedulers/aws_sagemaker_scheduler.py,sha256=flN8GumKE2Dz4X_foAt6Jnvt-ZVojWs6pcyrHwB0hz0,20921
|
|
71
64
|
torchx/schedulers/devices.py,sha256=RjVcu22ZRl_9OKtOtmA1A3vNXgu2qD6A9ST0L0Hsg4I,1734
|
|
72
|
-
torchx/schedulers/docker_scheduler.py,sha256=
|
|
73
|
-
torchx/schedulers/gcp_batch_scheduler.py,sha256=JQuaEJVL_7NSa9AeUc_0Qo74XZNJk_kp6XwgunvlUKI,16281
|
|
65
|
+
torchx/schedulers/docker_scheduler.py,sha256=x-XHCqYnrmiW0dHfVA7hz7Fp2Qgw7fvMgRm058YOngY,16880
|
|
74
66
|
torchx/schedulers/ids.py,sha256=3E-_vwVYC-8Tv8kjuY9-W7TbOe_-Laqd8a65uIN3hQY,1798
|
|
75
67
|
torchx/schedulers/kubernetes_mcad_scheduler.py,sha256=1tuzq3OutCMdSPqg_dNmCHt_wyuSFKG0-ywLc3qITJo,42949
|
|
76
|
-
torchx/schedulers/kubernetes_scheduler.py,sha256=
|
|
77
|
-
torchx/schedulers/local_scheduler.py,sha256=
|
|
68
|
+
torchx/schedulers/kubernetes_scheduler.py,sha256=86ny9XXt9tdeV6Y7AlVFQ6vhxlviOdNeZUz4gOzU3cc,34478
|
|
69
|
+
torchx/schedulers/local_scheduler.py,sha256=ttnxFDy48_DSYDEW-no27OirFZOyfrjwJ2S1MwBUi74,41929
|
|
78
70
|
torchx/schedulers/lsf_scheduler.py,sha256=YS6Yel8tXJqLPxbcGz95lZG2nCi36AQXdNDyuBJePKg,17661
|
|
79
|
-
torchx/schedulers/
|
|
80
|
-
torchx/schedulers/slurm_scheduler.py,sha256=zM_9XYVm7sQ8NGN-N26D-2YIfE83JS3mvpPb40CDKcA,26411
|
|
71
|
+
torchx/schedulers/slurm_scheduler.py,sha256=vypGaCZe61bkyNkqRlK4Iwmk_NaAUQi-DsspaWd6BZw,31873
|
|
81
72
|
torchx/schedulers/streams.py,sha256=8_SLezgnWgfv_zXUsJCUM34-h2dtv25NmZuxEwkzmxw,2007
|
|
82
|
-
torchx/
|
|
83
|
-
torchx/
|
|
84
|
-
torchx/
|
|
85
|
-
torchx/specs/
|
|
86
|
-
torchx/specs/
|
|
87
|
-
torchx/specs/
|
|
88
|
-
torchx/specs/file_linter.py,sha256=QCwob5STTBuy8RsxaevTI-Dk6R8siDJn81LyaOwazes,12333
|
|
89
|
-
torchx/specs/finder.py,sha256=lMCS1hUR-x7j4sAjfJZnKFeS1RlkFTeJtit4EL_ErIo,18182
|
|
90
|
-
torchx/specs/named_resources_aws.py,sha256=ISjHtifRJqB8u7PeAMiyLyO_S0WCaZiK-CFF3qe6JDU,11415
|
|
73
|
+
torchx/specs/__init__.py,sha256=SXS4r_roOkbbAL-p7EY5fl5ou-AG7S9Ck-zKtRBdHOk,6760
|
|
74
|
+
torchx/specs/api.py,sha256=OrLX4gGa97qtjUbl3x_YnOKCdP0rQkVEruPIbNjo7fk,49230
|
|
75
|
+
torchx/specs/builders.py,sha256=Ye3of4MupJ-da8vLaX6_-nzGo_FRw1BFpYsX6dAZCNk,13730
|
|
76
|
+
torchx/specs/file_linter.py,sha256=z0c4mKJv47BWiPaWCdUM0A8kHwnj4b1s7oTmESuD9Tc,14407
|
|
77
|
+
torchx/specs/finder.py,sha256=gWQNEFrLYqrZoI0gMMhQ70YAC4sxqS0ZFpoWAmcVi44,17438
|
|
78
|
+
torchx/specs/named_resources_aws.py,sha256=ZNAbw6lD8NUlMfcJ-LpX14dMSaHO7m4Yt9iHwAF44yg,11674
|
|
91
79
|
torchx/specs/named_resources_generic.py,sha256=Sg4tAdqiiWDrDz2Lj_pnfsjzGIXKTou73wPseh6j55w,2646
|
|
92
80
|
torchx/specs/test/components/__init__.py,sha256=J8qjUOysmcMAek2KFN13mViOXZxTYc5vCrF02t3VuFU,223
|
|
93
81
|
torchx/specs/test/components/a/__init__.py,sha256=kdxEgnI8QBSBiuTjaB4qDD7JX84hWowyPWU4B2Cqe9A,561
|
|
@@ -95,29 +83,29 @@ torchx/specs/test/components/a/b/__init__.py,sha256=J8qjUOysmcMAek2KFN13mViOXZxT
|
|
|
95
83
|
torchx/specs/test/components/a/b/c.py,sha256=FhixafzNqpS5zvggtWIWLxRd6HIxsOmct-d1Hs-rDoc,554
|
|
96
84
|
torchx/specs/test/components/c/__init__.py,sha256=5CBMckkpqJUdxBQBYHGSsItqq1gj2V0UiCw02Qfq6MM,246
|
|
97
85
|
torchx/specs/test/components/c/d.py,sha256=2AjE-FmQXJTw3hws66O83ToQPmjOEZLDf-jDAKrrUkQ,546
|
|
98
|
-
torchx/tracker/__init__.py,sha256=
|
|
99
|
-
torchx/tracker/api.py,sha256=
|
|
86
|
+
torchx/tracker/__init__.py,sha256=qo39aOa0Dz9zt4TtFkqPeIaH7MNqdAkFlGaOFiDLXTI,4375
|
|
87
|
+
torchx/tracker/api.py,sha256=WZ7TYdbSVx_5h5MlX9EwQLRpxmIf0oKdiQwQ0zvkO3o,11262
|
|
100
88
|
torchx/tracker/mlflow.py,sha256=poeoIXVPzr2sxgi515fMGRH83KAFNL6XFILMh0EQ2Dw,14487
|
|
101
89
|
torchx/tracker/backend/__init__.py,sha256=fE0IHi1JJpxsNVBNzWNee2thrNXFFRhY94c80RxNSIE,231
|
|
102
90
|
torchx/tracker/backend/fsspec.py,sha256=528xKryBE27Rm_OHD7r2R6fmVAclknBtoy1s034Ny6c,10440
|
|
103
91
|
torchx/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
104
92
|
torchx/util/cuda.py,sha256=-ZTa1WCLnY2WtSWAdWufLQqZSDCZfZsloBuiS84LIkU,1099
|
|
105
93
|
torchx/util/datetime.py,sha256=hV6Sg0u5KTBe68yrmy_RGCC5su0i4Tb_mAYphWamiXI,405
|
|
106
|
-
torchx/util/entrypoints.py,sha256=
|
|
94
|
+
torchx/util/entrypoints.py,sha256=YUv7F-Vr4uuY4_82IBPdrz5vrch_qsx_dIr6e08kSD4,3800
|
|
107
95
|
torchx/util/io.py,sha256=HNpWLcFUX0WTAP3CsdamHz--FR5A4kSdLCPfNqa2UkA,1807
|
|
108
96
|
torchx/util/log_tee_helpers.py,sha256=wPyozmh9BOt_2d3Gxa0iNogwnjzwFitIIMBJOJ1arIw,6330
|
|
109
97
|
torchx/util/modules.py,sha256=o4y_d07gTpJ4nIVBcoUVJ0JtXIHEsEC5kbgBM6NGpgA,2135
|
|
110
98
|
torchx/util/session.py,sha256=r6M_nyzXgcbk1GgYGZ324F_ehRGCqjjdVk4YgKxMj8M,1214
|
|
111
99
|
torchx/util/shlex.py,sha256=eXEKu8KC3zIcd8tEy9_s8Ds5oma8BORr-0VGWNpG2dk,463
|
|
112
|
-
torchx/util/strings.py,sha256=
|
|
113
|
-
torchx/util/types.py,sha256=
|
|
100
|
+
torchx/util/strings.py,sha256=7Ef1loz2IYMrzeJ6Lewywi5cBIc3X3g7lSPbT1Tn_z4,664
|
|
101
|
+
torchx/util/types.py,sha256=E9dxAWQnsJkIDuHtg-poeOJ4etucSI_xP_Z5kNJX8uI,9229
|
|
114
102
|
torchx/workspace/__init__.py,sha256=FqN8AN4VhR1C_SBY10MggQvNZmyanbbuPuE-JCjkyUY,798
|
|
115
|
-
torchx/workspace/api.py,sha256=
|
|
103
|
+
torchx/workspace/api.py,sha256=UESQ4qgxXjsb6Y1wP9OGv2ixaFgaTs3SqghmNuOJIZM,10235
|
|
116
104
|
torchx/workspace/dir_workspace.py,sha256=npNW_IjUZm_yS5r-8hrRkH46ndDd9a_eApT64m1S1T4,2268
|
|
117
105
|
torchx/workspace/docker_workspace.py,sha256=PFu2KQNVC-0p2aKJ-W_BKA9ZOmXdCY2ABEkCExp3udQ,10269
|
|
118
|
-
torchx_nightly-2025.
|
|
119
|
-
torchx_nightly-2025.
|
|
120
|
-
torchx_nightly-2025.
|
|
121
|
-
torchx_nightly-2025.
|
|
122
|
-
torchx_nightly-2025.
|
|
123
|
-
torchx_nightly-2025.
|
|
106
|
+
torchx_nightly-2025.11.12.dist-info/licenses/LICENSE,sha256=WVHfXhFC0Ia8LTKt_nJVYobdqTJVg_4J3Crrfm2A8KQ,1721
|
|
107
|
+
torchx_nightly-2025.11.12.dist-info/METADATA,sha256=Wg2n6bsPSMaU-WZzo1y7uTF_sPQNWCjP8yu5-to3ihA,5324
|
|
108
|
+
torchx_nightly-2025.11.12.dist-info/WHEEL,sha256=SmOxYU7pzNKBqASvQJ7DjX3XGUF92lrGhMb3R6_iiqI,91
|
|
109
|
+
torchx_nightly-2025.11.12.dist-info/entry_points.txt,sha256=T328AMXeKI3JZnnxfkEew2ZcMN1oQDtkXjMz7lkV-P4,169
|
|
110
|
+
torchx_nightly-2025.11.12.dist-info/top_level.txt,sha256=pxew3bc2gsiViS0zADs0jb6kC5v8o_Yy_85fhHj_J1A,7
|
|
111
|
+
torchx_nightly-2025.11.12.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|