torchx-nightly 2025.9.28__py3-none-any.whl → 2025.11.17__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.
Potentially problematic release.
This version of torchx-nightly might be problematic. Click here for more details.
- torchx/_version.py +8 -0
- torchx/cli/cmd_run.py +10 -5
- torchx/cli/cmd_tracker.py +1 -1
- torchx/components/__init__.py +1 -1
- torchx/components/dist.py +9 -3
- torchx/components/utils.py +1 -1
- torchx/distributed/__init__.py +1 -1
- torchx/runner/api.py +30 -22
- torchx/runner/config.py +2 -0
- torchx/schedulers/__init__.py +8 -9
- torchx/schedulers/api.py +9 -4
- torchx/schedulers/aws_batch_scheduler.py +44 -1
- torchx/schedulers/docker_scheduler.py +3 -0
- torchx/schedulers/kubernetes_scheduler.py +200 -17
- torchx/schedulers/slurm_scheduler.py +11 -2
- torchx/specs/__init__.py +30 -7
- torchx/specs/api.py +215 -10
- torchx/specs/file_linter.py +1 -1
- torchx/specs/finder.py +1 -1
- 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/version.py +2 -2
- torchx/workspace/__init__.py +1 -1
- torchx/workspace/api.py +65 -110
- {torchx_nightly-2025.9.28.dist-info → torchx_nightly-2025.11.17.dist-info}/METADATA +34 -21
- {torchx_nightly-2025.9.28.dist-info → torchx_nightly-2025.11.17.dist-info}/RECORD +32 -31
- {torchx_nightly-2025.9.28.dist-info → torchx_nightly-2025.11.17.dist-info}/WHEEL +1 -1
- {torchx_nightly-2025.9.28.dist-info → torchx_nightly-2025.11.17.dist-info}/entry_points.txt +0 -0
- {torchx_nightly-2025.9.28.dist-info → torchx_nightly-2025.11.17.dist-info/licenses}/LICENSE +0 -0
- {torchx_nightly-2025.9.28.dist-info → torchx_nightly-2025.11.17.dist-info}/top_level.txt +0 -0
torchx/workspace/api.py
CHANGED
|
@@ -8,25 +8,16 @@
|
|
|
8
8
|
|
|
9
9
|
import abc
|
|
10
10
|
import fnmatch
|
|
11
|
+
import logging
|
|
11
12
|
import posixpath
|
|
12
|
-
import shutil
|
|
13
13
|
import tempfile
|
|
14
14
|
import warnings
|
|
15
15
|
from dataclasses import dataclass
|
|
16
|
-
from
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
Iterable,
|
|
22
|
-
Mapping,
|
|
23
|
-
Tuple,
|
|
24
|
-
TYPE_CHECKING,
|
|
25
|
-
TypeVar,
|
|
26
|
-
Union,
|
|
27
|
-
)
|
|
28
|
-
|
|
29
|
-
from torchx.specs import AppDef, CfgVal, Role, runopts
|
|
16
|
+
from typing import Any, Dict, Generic, Iterable, Mapping, Tuple, TYPE_CHECKING, TypeVar
|
|
17
|
+
|
|
18
|
+
from torchx.specs import AppDef, CfgVal, Role, runopts, Workspace
|
|
19
|
+
|
|
20
|
+
logger: logging.Logger = logging.getLogger(__name__)
|
|
30
21
|
|
|
31
22
|
if TYPE_CHECKING:
|
|
32
23
|
from fsspec import AbstractFileSystem
|
|
@@ -88,71 +79,6 @@ class WorkspaceBuilder(Generic[PackageType, WorkspaceConfigType]):
|
|
|
88
79
|
pass
|
|
89
80
|
|
|
90
81
|
|
|
91
|
-
@dataclass
|
|
92
|
-
class Workspace:
|
|
93
|
-
"""
|
|
94
|
-
Specifies a local "workspace" (a set of directories). Workspaces are ad-hoc built
|
|
95
|
-
into an (usually ephemeral) image. This effectively mirrors the local code changes
|
|
96
|
-
at job submission time.
|
|
97
|
-
|
|
98
|
-
For example:
|
|
99
|
-
|
|
100
|
-
1. ``projects={"~/github/torch": "torch"}`` copies ``~/github/torch/**`` into ``$REMOTE_WORKSPACE_ROOT/torch/**``
|
|
101
|
-
2. ``projects={"~/github/torch": ""}`` copies ``~/github/torch/**`` into ``$REMOTE_WORKSPACE_ROOT/**``
|
|
102
|
-
|
|
103
|
-
The exact location of ``$REMOTE_WORKSPACE_ROOT`` is implementation dependent and varies between
|
|
104
|
-
different implementations of :py:class:`~torchx.workspace.api.WorkspaceMixin`.
|
|
105
|
-
Check the scheduler documentation for details on which workspace it supports.
|
|
106
|
-
|
|
107
|
-
Note: ``projects`` maps the location of the local project to a sub-directory in the remote workspace root directory.
|
|
108
|
-
Typically the local project location is a directory path (e.g. ``/home/foo/github/torch``).
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
Attributes:
|
|
112
|
-
projects: mapping of local project to the sub-dir in the remote workspace dir.
|
|
113
|
-
"""
|
|
114
|
-
|
|
115
|
-
projects: dict[str, str]
|
|
116
|
-
|
|
117
|
-
def is_unmapped_single_project(self) -> bool:
|
|
118
|
-
"""
|
|
119
|
-
Returns ``True`` if this workspace only has 1 project
|
|
120
|
-
and its target mapping is an empty string.
|
|
121
|
-
"""
|
|
122
|
-
return len(self.projects) == 1 and not next(iter(self.projects.values()))
|
|
123
|
-
|
|
124
|
-
@staticmethod
|
|
125
|
-
def from_str(workspace: str) -> "Workspace":
|
|
126
|
-
import yaml
|
|
127
|
-
|
|
128
|
-
projects = yaml.safe_load(workspace)
|
|
129
|
-
if isinstance(projects, str): # single project workspace
|
|
130
|
-
projects = {projects: ""}
|
|
131
|
-
else: # multi-project workspace
|
|
132
|
-
# Replace None mappings with "" (empty string)
|
|
133
|
-
projects = {k: ("" if v is None else v) for k, v in projects.items()}
|
|
134
|
-
|
|
135
|
-
return Workspace(projects)
|
|
136
|
-
|
|
137
|
-
def __str__(self) -> str:
|
|
138
|
-
"""
|
|
139
|
-
Returns a string representation of the Workspace by concatenating
|
|
140
|
-
the project mappings using ';' as a delimiter and ':' between key and value.
|
|
141
|
-
If the single-project workspace with no target mapping, then simply
|
|
142
|
-
returns the src (local project dir)
|
|
143
|
-
|
|
144
|
-
NOTE: meant to be used for logging purposes not serde.
|
|
145
|
-
Therefore not symmetric with :py:func:`Workspace.from_str`.
|
|
146
|
-
|
|
147
|
-
"""
|
|
148
|
-
if self.is_unmapped_single_project():
|
|
149
|
-
return next(iter(self.projects))
|
|
150
|
-
else:
|
|
151
|
-
return ";".join(
|
|
152
|
-
k if not v else f"{k}:{v}" for k, v in self.projects.items()
|
|
153
|
-
)
|
|
154
|
-
|
|
155
|
-
|
|
156
82
|
class WorkspaceMixin(abc.ABC, Generic[T]):
|
|
157
83
|
"""
|
|
158
84
|
Note: (Prototype) this interface may change without notice!
|
|
@@ -178,45 +104,72 @@ class WorkspaceMixin(abc.ABC, Generic[T]):
|
|
|
178
104
|
"""
|
|
179
105
|
return runopts()
|
|
180
106
|
|
|
181
|
-
def
|
|
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(
|
|
182
133
|
self,
|
|
183
134
|
role: Role,
|
|
184
|
-
workspace: Union[Workspace, str],
|
|
185
135
|
cfg: Mapping[str, CfgVal],
|
|
136
|
+
build_cache: dict[object, object],
|
|
186
137
|
) -> None:
|
|
187
138
|
"""
|
|
188
|
-
Same as :py:meth:`build_workspace_and_update_role` but
|
|
189
|
-
|
|
190
|
-
|
|
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.
|
|
191
145
|
|
|
192
|
-
|
|
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
|
|
193
150
|
:py:meth:`build_workspace_and_update_role`.
|
|
194
151
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
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.
|
|
198
155
|
|
|
199
|
-
Subclasses can override this method to customize multi-project
|
|
200
|
-
workspace building logic.
|
|
201
156
|
"""
|
|
202
|
-
if isinstance(workspace, Workspace):
|
|
203
|
-
if not workspace.is_unmapped_single_project():
|
|
204
|
-
with tempfile.TemporaryDirectory(suffix="torchx_workspace_") as outdir:
|
|
205
|
-
for src, dst in workspace.projects.items():
|
|
206
|
-
dst_path = Path(outdir) / dst
|
|
207
|
-
if Path(src).is_file():
|
|
208
|
-
shutil.copy2(src, dst_path)
|
|
209
|
-
else: # src is dir
|
|
210
|
-
shutil.copytree(src, dst_path, dirs_exist_ok=True)
|
|
211
|
-
|
|
212
|
-
self.build_workspace_and_update_role(role, outdir, cfg)
|
|
213
|
-
return
|
|
214
|
-
else: # single project workspace with no target mapping (treat like a str workspace)
|
|
215
|
-
workspace = str(workspace)
|
|
216
|
-
|
|
217
|
-
self.build_workspace_and_update_role(role, workspace, cfg)
|
|
218
157
|
|
|
219
|
-
|
|
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
|
+
|
|
220
173
|
def build_workspace_and_update_role(
|
|
221
174
|
self,
|
|
222
175
|
role: Role,
|
|
@@ -224,6 +177,9 @@ class WorkspaceMixin(abc.ABC, Generic[T]):
|
|
|
224
177
|
cfg: Mapping[str, CfgVal],
|
|
225
178
|
) -> None:
|
|
226
179
|
"""
|
|
180
|
+
.. note:: DEPRECATED: Workspace subclasses should implement
|
|
181
|
+
:py:meth:`caching_build_workspace_and_update_role` over this method.
|
|
182
|
+
|
|
227
183
|
Builds the specified ``workspace`` with respect to ``img``
|
|
228
184
|
and updates the ``role`` to reflect the built workspace artifacts.
|
|
229
185
|
In the simplest case, this method builds a new image and updates
|
|
@@ -232,7 +188,7 @@ class WorkspaceMixin(abc.ABC, Generic[T]):
|
|
|
232
188
|
|
|
233
189
|
Note: this method mutates the passed ``role``.
|
|
234
190
|
"""
|
|
235
|
-
|
|
191
|
+
raise NotImplementedError("implement `caching_build_workspace_and_update_role`")
|
|
236
192
|
|
|
237
193
|
def dryrun_push_images(self, app: AppDef, cfg: Mapping[str, CfgVal]) -> T:
|
|
238
194
|
"""
|
|
@@ -275,7 +231,6 @@ def walk_workspace(
|
|
|
275
231
|
walk_workspace walks the filesystem path and applies the ignore rules
|
|
276
232
|
specified via ``ignore_name``.
|
|
277
233
|
This follows the rules for ``.dockerignore``.
|
|
278
|
-
https://docs.docker.com/engine/reference/builder/#dockerignore-file
|
|
279
234
|
"""
|
|
280
235
|
ignore_patterns = []
|
|
281
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.17
|
|
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
|
|
@@ -23,8 +23,10 @@ Requires-Dist: docker
|
|
|
23
23
|
Requires-Dist: filelock
|
|
24
24
|
Requires-Dist: fsspec>=2023.10.0
|
|
25
25
|
Requires-Dist: tabulate
|
|
26
|
-
Provides-Extra:
|
|
26
|
+
Provides-Extra: aws-batch
|
|
27
27
|
Requires-Dist: boto3; extra == "aws-batch"
|
|
28
|
+
Provides-Extra: kubernetes
|
|
29
|
+
Requires-Dist: kubernetes>=11; extra == "kubernetes"
|
|
28
30
|
Provides-Extra: dev
|
|
29
31
|
Requires-Dist: aiobotocore==2.20.0; extra == "dev"
|
|
30
32
|
Requires-Dist: ax-platform[mysql]==0.2.3; extra == "dev"
|
|
@@ -47,23 +49,34 @@ Requires-Dist: pytorch-lightning==2.5.0; extra == "dev"
|
|
|
47
49
|
Requires-Dist: tensorboard==2.14.0; extra == "dev"
|
|
48
50
|
Requires-Dist: sagemaker==2.230.0; extra == "dev"
|
|
49
51
|
Requires-Dist: torch-model-archiver>=0.4.2; extra == "dev"
|
|
50
|
-
Requires-Dist: torch
|
|
52
|
+
Requires-Dist: torch; extra == "dev"
|
|
51
53
|
Requires-Dist: torchmetrics==1.6.3; extra == "dev"
|
|
52
54
|
Requires-Dist: torchserve>=0.10.0; extra == "dev"
|
|
53
|
-
Requires-Dist: torchtext
|
|
54
|
-
Requires-Dist: torchvision
|
|
55
|
+
Requires-Dist: torchtext; extra == "dev"
|
|
56
|
+
Requires-Dist: torchvision; extra == "dev"
|
|
55
57
|
Requires-Dist: typing-extensions; extra == "dev"
|
|
56
58
|
Requires-Dist: ts==0.5.1; extra == "dev"
|
|
57
59
|
Requires-Dist: wheel; extra == "dev"
|
|
58
60
|
Requires-Dist: lintrunner; extra == "dev"
|
|
59
61
|
Requires-Dist: lintrunner-adapters; extra == "dev"
|
|
60
|
-
|
|
61
|
-
|
|
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
|
|
62
75
|
|
|
63
76
|
[](https://pypi.org/project/torchx/)
|
|
64
|
-
[](https://github.com/pytorch/torchx/blob/main/LICENSE)
|
|
65
|
-

|
|
66
|
-

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

|
|
79
|
+

|
|
67
80
|
[](https://codecov.io/gh/pytorch/torchx)
|
|
68
81
|
|
|
69
82
|
|
|
@@ -82,16 +95,16 @@ TorchX currently supports:
|
|
|
82
95
|
* Docker
|
|
83
96
|
* Local
|
|
84
97
|
|
|
85
|
-
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)
|
|
86
99
|
|
|
87
100
|
## Quickstart
|
|
88
101
|
|
|
89
|
-
See the [quickstart guide](https://pytorch.org/torchx/latest/quickstart.html).
|
|
102
|
+
See the [quickstart guide](https://meta-pytorch.org/torchx/latest/quickstart.html).
|
|
90
103
|
|
|
91
104
|
## Documentation
|
|
92
105
|
|
|
93
|
-
* [Stable Documentation](https://pytorch.org/torchx/latest/)
|
|
94
|
-
* [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/)
|
|
95
108
|
|
|
96
109
|
## Requirements
|
|
97
110
|
|
|
@@ -133,22 +146,22 @@ pip install torchx-nightly[dev]
|
|
|
133
146
|
|
|
134
147
|
```bash
|
|
135
148
|
# install torchx sdk and CLI from source
|
|
136
|
-
$ 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
|
|
137
150
|
|
|
138
151
|
# install extra dependencies
|
|
139
|
-
$ 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]
|
|
140
153
|
```
|
|
141
154
|
|
|
142
155
|
### Docker
|
|
143
156
|
|
|
144
157
|
TorchX provides a docker container for using as as part of a TorchX role.
|
|
145
158
|
|
|
146
|
-
See: https://github.com/pytorch/torchx/pkgs/container/torchx
|
|
159
|
+
See: https://github.com/meta-pytorch/torchx/pkgs/container/torchx
|
|
147
160
|
|
|
148
161
|
## Contributing
|
|
149
162
|
|
|
150
|
-
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.
|
|
151
164
|
|
|
152
165
|
## License
|
|
153
166
|
|
|
154
|
-
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
|
|
@@ -16,25 +17,25 @@ torchx/cli/cmd_configure.py,sha256=1kTv0qbsbV44So74plAySwWu56pQrqjhfW_kbfdC3Rw,1
|
|
|
16
17
|
torchx/cli/cmd_describe.py,sha256=E5disbHoKTsqYKp2s3DaFW9GDLCCOgdOc3pQoHKoyCs,1283
|
|
17
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
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
|
|
@@ -48,33 +49,33 @@ torchx/examples/apps/lightning/profiler.py,sha256=SSSihnwjeUTkBoz0E3qn1b-wbkfUIo
|
|
|
48
49
|
torchx/examples/apps/lightning/train.py,sha256=0wvvshGHvZowePB4LfclXwn40X7i9euM0ReETWBcPSo,6253
|
|
49
50
|
torchx/pipelines/__init__.py,sha256=2MbRVk5xwRjg-d2qPemeXpEhDsocMQumPQ53lsesZAI,606
|
|
50
51
|
torchx/runner/__init__.py,sha256=x8Sz7s_tLxPgJgvWIhK4ju9BNZU61uBFywGwDY6CqJs,315
|
|
51
|
-
torchx/runner/api.py,sha256=
|
|
52
|
-
torchx/runner/config.py,sha256=
|
|
52
|
+
torchx/runner/api.py,sha256=xQpgiUz9jCX4zZriubbWk4tTJRe7MxNJQK64g0o7KQ8,30438
|
|
53
|
+
torchx/runner/config.py,sha256=SaKOB50d79WaMFPWK8CC4as6UaNFaRGhrBkfajq3KC4,18311
|
|
53
54
|
torchx/runner/events/__init__.py,sha256=cMiNjnr4eUNQ2Nxxtu4nsvN5lu56b-a6nJ-ct3i7DQk,5536
|
|
54
55
|
torchx/runner/events/api.py,sha256=bvxKBAYK8LzbrBNaNLgL1x0aivtfANmWo1EMGOrSR8k,2668
|
|
55
56
|
torchx/runner/events/handlers.py,sha256=ThHCIJW21BfBgB7b6ftyjASJmD1KdizpjuTtsyqnvJs,522
|
|
56
57
|
torchx/runtime/__init__.py,sha256=Wxje2BryzeQneFu5r6P9JJiEKG-_C9W1CcZ_JNrKT6g,593
|
|
57
58
|
torchx/runtime/tracking/__init__.py,sha256=dYnAPnrXYREfPXkpHhdOFkcYIODWEbA13PdD-wLQYBo,3055
|
|
58
59
|
torchx/runtime/tracking/api.py,sha256=SmUQyUKZqG3KlAhT7CJOGqRz1O274E4m63wQeOVq3CU,5472
|
|
59
|
-
torchx/schedulers/__init__.py,sha256=
|
|
60
|
-
torchx/schedulers/api.py,sha256=
|
|
61
|
-
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
|
|
62
63
|
torchx/schedulers/aws_sagemaker_scheduler.py,sha256=flN8GumKE2Dz4X_foAt6Jnvt-ZVojWs6pcyrHwB0hz0,20921
|
|
63
64
|
torchx/schedulers/devices.py,sha256=RjVcu22ZRl_9OKtOtmA1A3vNXgu2qD6A9ST0L0Hsg4I,1734
|
|
64
|
-
torchx/schedulers/docker_scheduler.py,sha256=
|
|
65
|
+
torchx/schedulers/docker_scheduler.py,sha256=x-XHCqYnrmiW0dHfVA7hz7Fp2Qgw7fvMgRm058YOngY,16880
|
|
65
66
|
torchx/schedulers/ids.py,sha256=3E-_vwVYC-8Tv8kjuY9-W7TbOe_-Laqd8a65uIN3hQY,1798
|
|
66
67
|
torchx/schedulers/kubernetes_mcad_scheduler.py,sha256=1tuzq3OutCMdSPqg_dNmCHt_wyuSFKG0-ywLc3qITJo,42949
|
|
67
|
-
torchx/schedulers/kubernetes_scheduler.py,sha256=
|
|
68
|
+
torchx/schedulers/kubernetes_scheduler.py,sha256=86ny9XXt9tdeV6Y7AlVFQ6vhxlviOdNeZUz4gOzU3cc,34478
|
|
68
69
|
torchx/schedulers/local_scheduler.py,sha256=ttnxFDy48_DSYDEW-no27OirFZOyfrjwJ2S1MwBUi74,41929
|
|
69
70
|
torchx/schedulers/lsf_scheduler.py,sha256=YS6Yel8tXJqLPxbcGz95lZG2nCi36AQXdNDyuBJePKg,17661
|
|
70
|
-
torchx/schedulers/slurm_scheduler.py,sha256=
|
|
71
|
+
torchx/schedulers/slurm_scheduler.py,sha256=vypGaCZe61bkyNkqRlK4Iwmk_NaAUQi-DsspaWd6BZw,31873
|
|
71
72
|
torchx/schedulers/streams.py,sha256=8_SLezgnWgfv_zXUsJCUM34-h2dtv25NmZuxEwkzmxw,2007
|
|
72
|
-
torchx/specs/__init__.py,sha256=
|
|
73
|
-
torchx/specs/api.py,sha256=
|
|
73
|
+
torchx/specs/__init__.py,sha256=TaC0AveTebkCMo5hmdY1wGpo09vFDqzWnsT166ionTw,7108
|
|
74
|
+
torchx/specs/api.py,sha256=OrLX4gGa97qtjUbl3x_YnOKCdP0rQkVEruPIbNjo7fk,49230
|
|
74
75
|
torchx/specs/builders.py,sha256=Ye3of4MupJ-da8vLaX6_-nzGo_FRw1BFpYsX6dAZCNk,13730
|
|
75
|
-
torchx/specs/file_linter.py,sha256=
|
|
76
|
-
torchx/specs/finder.py,sha256=
|
|
77
|
-
torchx/specs/named_resources_aws.py,sha256=
|
|
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
|
|
78
79
|
torchx/specs/named_resources_generic.py,sha256=Sg4tAdqiiWDrDz2Lj_pnfsjzGIXKTou73wPseh6j55w,2646
|
|
79
80
|
torchx/specs/test/components/__init__.py,sha256=J8qjUOysmcMAek2KFN13mViOXZxTYc5vCrF02t3VuFU,223
|
|
80
81
|
torchx/specs/test/components/a/__init__.py,sha256=kdxEgnI8QBSBiuTjaB4qDD7JX84hWowyPWU4B2Cqe9A,561
|
|
@@ -82,15 +83,15 @@ torchx/specs/test/components/a/b/__init__.py,sha256=J8qjUOysmcMAek2KFN13mViOXZxT
|
|
|
82
83
|
torchx/specs/test/components/a/b/c.py,sha256=FhixafzNqpS5zvggtWIWLxRd6HIxsOmct-d1Hs-rDoc,554
|
|
83
84
|
torchx/specs/test/components/c/__init__.py,sha256=5CBMckkpqJUdxBQBYHGSsItqq1gj2V0UiCw02Qfq6MM,246
|
|
84
85
|
torchx/specs/test/components/c/d.py,sha256=2AjE-FmQXJTw3hws66O83ToQPmjOEZLDf-jDAKrrUkQ,546
|
|
85
|
-
torchx/tracker/__init__.py,sha256=
|
|
86
|
-
torchx/tracker/api.py,sha256=
|
|
86
|
+
torchx/tracker/__init__.py,sha256=qo39aOa0Dz9zt4TtFkqPeIaH7MNqdAkFlGaOFiDLXTI,4375
|
|
87
|
+
torchx/tracker/api.py,sha256=WZ7TYdbSVx_5h5MlX9EwQLRpxmIf0oKdiQwQ0zvkO3o,11262
|
|
87
88
|
torchx/tracker/mlflow.py,sha256=poeoIXVPzr2sxgi515fMGRH83KAFNL6XFILMh0EQ2Dw,14487
|
|
88
89
|
torchx/tracker/backend/__init__.py,sha256=fE0IHi1JJpxsNVBNzWNee2thrNXFFRhY94c80RxNSIE,231
|
|
89
90
|
torchx/tracker/backend/fsspec.py,sha256=528xKryBE27Rm_OHD7r2R6fmVAclknBtoy1s034Ny6c,10440
|
|
90
91
|
torchx/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
91
92
|
torchx/util/cuda.py,sha256=-ZTa1WCLnY2WtSWAdWufLQqZSDCZfZsloBuiS84LIkU,1099
|
|
92
93
|
torchx/util/datetime.py,sha256=hV6Sg0u5KTBe68yrmy_RGCC5su0i4Tb_mAYphWamiXI,405
|
|
93
|
-
torchx/util/entrypoints.py,sha256=
|
|
94
|
+
torchx/util/entrypoints.py,sha256=YUv7F-Vr4uuY4_82IBPdrz5vrch_qsx_dIr6e08kSD4,3800
|
|
94
95
|
torchx/util/io.py,sha256=HNpWLcFUX0WTAP3CsdamHz--FR5A4kSdLCPfNqa2UkA,1807
|
|
95
96
|
torchx/util/log_tee_helpers.py,sha256=wPyozmh9BOt_2d3Gxa0iNogwnjzwFitIIMBJOJ1arIw,6330
|
|
96
97
|
torchx/util/modules.py,sha256=o4y_d07gTpJ4nIVBcoUVJ0JtXIHEsEC5kbgBM6NGpgA,2135
|
|
@@ -98,13 +99,13 @@ torchx/util/session.py,sha256=r6M_nyzXgcbk1GgYGZ324F_ehRGCqjjdVk4YgKxMj8M,1214
|
|
|
98
99
|
torchx/util/shlex.py,sha256=eXEKu8KC3zIcd8tEy9_s8Ds5oma8BORr-0VGWNpG2dk,463
|
|
99
100
|
torchx/util/strings.py,sha256=7Ef1loz2IYMrzeJ6Lewywi5cBIc3X3g7lSPbT1Tn_z4,664
|
|
100
101
|
torchx/util/types.py,sha256=E9dxAWQnsJkIDuHtg-poeOJ4etucSI_xP_Z5kNJX8uI,9229
|
|
101
|
-
torchx/workspace/__init__.py,sha256=
|
|
102
|
-
torchx/workspace/api.py,sha256=
|
|
102
|
+
torchx/workspace/__init__.py,sha256=FqN8AN4VhR1C_SBY10MggQvNZmyanbbuPuE-JCjkyUY,798
|
|
103
|
+
torchx/workspace/api.py,sha256=UESQ4qgxXjsb6Y1wP9OGv2ixaFgaTs3SqghmNuOJIZM,10235
|
|
103
104
|
torchx/workspace/dir_workspace.py,sha256=npNW_IjUZm_yS5r-8hrRkH46ndDd9a_eApT64m1S1T4,2268
|
|
104
105
|
torchx/workspace/docker_workspace.py,sha256=PFu2KQNVC-0p2aKJ-W_BKA9ZOmXdCY2ABEkCExp3udQ,10269
|
|
105
|
-
torchx_nightly-2025.
|
|
106
|
-
torchx_nightly-2025.
|
|
107
|
-
torchx_nightly-2025.
|
|
108
|
-
torchx_nightly-2025.
|
|
109
|
-
torchx_nightly-2025.
|
|
110
|
-
torchx_nightly-2025.
|
|
106
|
+
torchx_nightly-2025.11.17.dist-info/licenses/LICENSE,sha256=WVHfXhFC0Ia8LTKt_nJVYobdqTJVg_4J3Crrfm2A8KQ,1721
|
|
107
|
+
torchx_nightly-2025.11.17.dist-info/METADATA,sha256=iim6P-wiEztRPHgcWaQCa9_f0GsU-GyxHBILL2cyVJg,5324
|
|
108
|
+
torchx_nightly-2025.11.17.dist-info/WHEEL,sha256=SmOxYU7pzNKBqASvQJ7DjX3XGUF92lrGhMb3R6_iiqI,91
|
|
109
|
+
torchx_nightly-2025.11.17.dist-info/entry_points.txt,sha256=T328AMXeKI3JZnnxfkEew2ZcMN1oQDtkXjMz7lkV-P4,169
|
|
110
|
+
torchx_nightly-2025.11.17.dist-info/top_level.txt,sha256=pxew3bc2gsiViS0zADs0jb6kC5v8o_Yy_85fhHj_J1A,7
|
|
111
|
+
torchx_nightly-2025.11.17.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|