torchx-nightly 2025.3.23__py3-none-any.whl → 2025.3.27__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/distributed/__init__.py +1 -3
- torchx/examples/apps/lightning/model.py +5 -6
- torchx/examples/apps/lightning/train.py +9 -2
- torchx/schedulers/api.py +19 -14
- torchx/schedulers/aws_batch_scheduler.py +3 -1
- torchx/schedulers/aws_sagemaker_scheduler.py +4 -1
- torchx/schedulers/docker_scheduler.py +3 -1
- torchx/schedulers/gcp_batch_scheduler.py +1 -1
- torchx/schedulers/kubernetes_mcad_scheduler.py +3 -1
- torchx/schedulers/kubernetes_scheduler.py +4 -1
- torchx/schedulers/local_scheduler.py +1 -1
- torchx/schedulers/lsf_scheduler.py +1 -1
- torchx/schedulers/ray_scheduler.py +3 -1
- torchx/schedulers/slurm_scheduler.py +3 -1
- torchx/specs/builders.py +11 -0
- torchx/specs/file_linter.py +7 -2
- {torchx_nightly-2025.3.23.dist-info → torchx_nightly-2025.3.27.dist-info}/METADATA +5 -5
- {torchx_nightly-2025.3.23.dist-info → torchx_nightly-2025.3.27.dist-info}/RECORD +22 -22
- {torchx_nightly-2025.3.23.dist-info → torchx_nightly-2025.3.27.dist-info}/LICENSE +0 -0
- {torchx_nightly-2025.3.23.dist-info → torchx_nightly-2025.3.27.dist-info}/WHEEL +0 -0
- {torchx_nightly-2025.3.23.dist-info → torchx_nightly-2025.3.27.dist-info}/entry_points.txt +0 -0
- {torchx_nightly-2025.3.23.dist-info → torchx_nightly-2025.3.27.dist-info}/top_level.txt +0 -0
torchx/distributed/__init__.py
CHANGED
|
@@ -83,9 +83,7 @@ def local_device() -> torch.device:
|
|
|
83
83
|
if dist.is_initialized():
|
|
84
84
|
default_pg = _get_default_group()
|
|
85
85
|
return (
|
|
86
|
-
local_cuda_device()
|
|
87
|
-
if default_pg.options.backend == "nccl"
|
|
88
|
-
else torch.device("cpu")
|
|
86
|
+
local_cuda_device() if default_pg.name() == "nccl" else torch.device("cpu")
|
|
89
87
|
)
|
|
90
88
|
else:
|
|
91
89
|
return torch.device("cuda") if has_cuda_devices() else torch.device("cpu")
|
|
@@ -23,7 +23,7 @@ import pytorch_lightning as pl
|
|
|
23
23
|
import torch
|
|
24
24
|
import torch.jit
|
|
25
25
|
from torch.nn import functional as F
|
|
26
|
-
from torchmetrics import
|
|
26
|
+
from torchmetrics.classification import MulticlassAccuracy
|
|
27
27
|
from torchvision.models.resnet import BasicBlock, ResNet
|
|
28
28
|
|
|
29
29
|
|
|
@@ -44,13 +44,12 @@ class TinyImageNetModel(pl.LightningModule):
|
|
|
44
44
|
|
|
45
45
|
# We use the torchvision resnet model with some small tweaks to match
|
|
46
46
|
# TinyImageNet.
|
|
47
|
-
m = ResNet(BasicBlock, layer_sizes)
|
|
47
|
+
m = ResNet(BasicBlock, layer_sizes, num_classes=200)
|
|
48
48
|
m.avgpool = torch.nn.AdaptiveAvgPool2d(1)
|
|
49
|
-
m.fc.out_features = 200
|
|
50
49
|
self.model: ResNet = m
|
|
51
50
|
|
|
52
|
-
self.train_acc =
|
|
53
|
-
self.val_acc =
|
|
51
|
+
self.train_acc = MulticlassAccuracy(num_classes=m.fc.out_features)
|
|
52
|
+
self.val_acc = MulticlassAccuracy(num_classes=m.fc.out_features)
|
|
54
53
|
|
|
55
54
|
# pyre-fixme[14]
|
|
56
55
|
def forward(self, x: torch.Tensor) -> torch.Tensor:
|
|
@@ -71,7 +70,7 @@ class TinyImageNetModel(pl.LightningModule):
|
|
|
71
70
|
def _step(
|
|
72
71
|
self,
|
|
73
72
|
step_name: str,
|
|
74
|
-
acc_metric:
|
|
73
|
+
acc_metric: MulticlassAccuracy,
|
|
75
74
|
batch: Tuple[torch.Tensor, torch.Tensor],
|
|
76
75
|
batch_idx: int,
|
|
77
76
|
) -> torch.Tensor:
|
|
@@ -60,6 +60,7 @@ import pytorch_lightning as pl
|
|
|
60
60
|
import torch
|
|
61
61
|
from pytorch_lightning.callbacks import ModelCheckpoint
|
|
62
62
|
from pytorch_lightning.loggers import TensorBoardLogger
|
|
63
|
+
from torch.distributed.elastic.multiprocessing import errors
|
|
63
64
|
from torchx.examples.apps.lightning.data import (
|
|
64
65
|
create_random_data,
|
|
65
66
|
download_data,
|
|
@@ -85,7 +86,12 @@ def parse_args(argv: List[str]) -> argparse.Namespace:
|
|
|
85
86
|
parser.add_argument(
|
|
86
87
|
"--batch_size", type=int, default=32, help="batch size to use for training"
|
|
87
88
|
)
|
|
88
|
-
parser.add_argument(
|
|
89
|
+
parser.add_argument(
|
|
90
|
+
"--num_samples",
|
|
91
|
+
type=int,
|
|
92
|
+
default=32,
|
|
93
|
+
help="number of samples in the dataset",
|
|
94
|
+
)
|
|
89
95
|
parser.add_argument(
|
|
90
96
|
"--data_path",
|
|
91
97
|
type=str,
|
|
@@ -126,6 +132,7 @@ def get_model_checkpoint(args: argparse.Namespace) -> Optional[ModelCheckpoint]:
|
|
|
126
132
|
)
|
|
127
133
|
|
|
128
134
|
|
|
135
|
+
@errors.record
|
|
129
136
|
def main(argv: List[str]) -> None:
|
|
130
137
|
with tempfile.TemporaryDirectory() as tmpdir:
|
|
131
138
|
args = parse_args(argv)
|
|
@@ -138,7 +145,7 @@ def main(argv: List[str]) -> None:
|
|
|
138
145
|
if not args.data_path:
|
|
139
146
|
data_path = os.path.join(tmpdir, "data")
|
|
140
147
|
os.makedirs(data_path)
|
|
141
|
-
create_random_data(data_path)
|
|
148
|
+
create_random_data(data_path, args.num_samples)
|
|
142
149
|
else:
|
|
143
150
|
data_path = download_data(args.data_path, tmpdir)
|
|
144
151
|
|
torchx/schedulers/api.py
CHANGED
|
@@ -94,9 +94,11 @@ class ListAppResponse:
|
|
|
94
94
|
|
|
95
95
|
|
|
96
96
|
T = TypeVar("T")
|
|
97
|
+
A = TypeVar("A")
|
|
98
|
+
D = TypeVar("D")
|
|
97
99
|
|
|
98
100
|
|
|
99
|
-
class Scheduler(abc.ABC, Generic[T]):
|
|
101
|
+
class Scheduler(abc.ABC, Generic[T, A, D]):
|
|
100
102
|
"""
|
|
101
103
|
An interface abstracting functionalities of a scheduler.
|
|
102
104
|
Implementers need only implement those methods annotated with
|
|
@@ -126,7 +128,7 @@ class Scheduler(abc.ABC, Generic[T]):
|
|
|
126
128
|
|
|
127
129
|
def submit(
|
|
128
130
|
self,
|
|
129
|
-
app:
|
|
131
|
+
app: A,
|
|
130
132
|
cfg: T,
|
|
131
133
|
workspace: Optional[str] = None,
|
|
132
134
|
) -> str:
|
|
@@ -150,7 +152,7 @@ class Scheduler(abc.ABC, Generic[T]):
|
|
|
150
152
|
return self.schedule(dryrun_info)
|
|
151
153
|
|
|
152
154
|
@abc.abstractmethod
|
|
153
|
-
def schedule(self, dryrun_info:
|
|
155
|
+
def schedule(self, dryrun_info: D) -> str:
|
|
154
156
|
"""
|
|
155
157
|
Same as ``submit`` except that it takes an ``AppDryRunInfo``.
|
|
156
158
|
Implementers are encouraged to implement this method rather than
|
|
@@ -166,7 +168,7 @@ class Scheduler(abc.ABC, Generic[T]):
|
|
|
166
168
|
|
|
167
169
|
raise NotImplementedError()
|
|
168
170
|
|
|
169
|
-
def submit_dryrun(self, app:
|
|
171
|
+
def submit_dryrun(self, app: A, cfg: T) -> D:
|
|
170
172
|
"""
|
|
171
173
|
Rather than submitting the request to run the app, returns the
|
|
172
174
|
request object that would have been submitted to the underlying
|
|
@@ -179,14 +181,16 @@ class Scheduler(abc.ABC, Generic[T]):
|
|
|
179
181
|
resolved_cfg = self.run_opts().resolve(cfg)
|
|
180
182
|
# pyre-fixme: _submit_dryrun takes Generic type for resolved_cfg
|
|
181
183
|
dryrun_info = self._submit_dryrun(app, resolved_cfg)
|
|
182
|
-
|
|
183
|
-
|
|
184
|
+
|
|
185
|
+
if isinstance(app, AppDef):
|
|
186
|
+
for role in app.roles:
|
|
187
|
+
dryrun_info = role.pre_proc(self.backend, dryrun_info)
|
|
184
188
|
dryrun_info._app = app
|
|
185
189
|
dryrun_info._cfg = resolved_cfg
|
|
186
190
|
return dryrun_info
|
|
187
191
|
|
|
188
192
|
@abc.abstractmethod
|
|
189
|
-
def _submit_dryrun(self, app:
|
|
193
|
+
def _submit_dryrun(self, app: A, cfg: T) -> D:
|
|
190
194
|
raise NotImplementedError()
|
|
191
195
|
|
|
192
196
|
def run_opts(self) -> runopts:
|
|
@@ -345,18 +349,19 @@ class Scheduler(abc.ABC, Generic[T]):
|
|
|
345
349
|
"""
|
|
346
350
|
pass
|
|
347
351
|
|
|
348
|
-
def _validate(self, app:
|
|
352
|
+
def _validate(self, app: A, scheduler: str, cfg: T) -> None:
|
|
349
353
|
"""
|
|
350
354
|
Validates after workspace build whether application is consistent with the scheduler.
|
|
351
355
|
|
|
352
356
|
Raises error if application is not compatible with scheduler
|
|
353
357
|
"""
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
358
|
+
if isinstance(app, AppDef):
|
|
359
|
+
for role in app.roles:
|
|
360
|
+
if role.resource == NULL_RESOURCE:
|
|
361
|
+
raise ValueError(
|
|
362
|
+
f"No resource for role: {role.image}."
|
|
363
|
+
f" Did you forget to attach resource to the role"
|
|
364
|
+
)
|
|
360
365
|
|
|
361
366
|
|
|
362
367
|
def filter_regex(regex: str, data: Iterable[str]) -> Iterable[str]:
|
|
@@ -363,7 +363,9 @@ class AWSBatchOpts(TypedDict, total=False):
|
|
|
363
363
|
execution_role_arn: Optional[str]
|
|
364
364
|
|
|
365
365
|
|
|
366
|
-
class AWSBatchScheduler(
|
|
366
|
+
class AWSBatchScheduler(
|
|
367
|
+
DockerWorkspaceMixin, Scheduler[AWSBatchOpts, AppDef, AppDryRunInfo[BatchJob]]
|
|
368
|
+
):
|
|
367
369
|
"""
|
|
368
370
|
AWSBatchScheduler is a TorchX scheduling interface to AWS Batch.
|
|
369
371
|
|
|
@@ -156,7 +156,10 @@ def _merge_ordered(
|
|
|
156
156
|
return merged
|
|
157
157
|
|
|
158
158
|
|
|
159
|
-
class AWSSageMakerScheduler(
|
|
159
|
+
class AWSSageMakerScheduler(
|
|
160
|
+
DockerWorkspaceMixin,
|
|
161
|
+
Scheduler[AWSSageMakerOpts, AppDef, AppDryRunInfo[AWSSageMakerJob]],
|
|
162
|
+
):
|
|
160
163
|
"""
|
|
161
164
|
AWSSageMakerScheduler is a TorchX scheduling interface to AWS SageMaker.
|
|
162
165
|
|
|
@@ -128,7 +128,9 @@ class DockerOpts(TypedDict, total=False):
|
|
|
128
128
|
privileged: bool
|
|
129
129
|
|
|
130
130
|
|
|
131
|
-
class DockerScheduler(
|
|
131
|
+
class DockerScheduler(
|
|
132
|
+
DockerWorkspaceMixin, Scheduler[DockerOpts, AppDef, AppDryRunInfo[DockerJob]]
|
|
133
|
+
):
|
|
132
134
|
"""
|
|
133
135
|
DockerScheduler is a TorchX scheduling interface to Docker.
|
|
134
136
|
|
|
@@ -104,7 +104,7 @@ class GCPBatchOpts(TypedDict, total=False):
|
|
|
104
104
|
location: Optional[str]
|
|
105
105
|
|
|
106
106
|
|
|
107
|
-
class GCPBatchScheduler(Scheduler[GCPBatchOpts]):
|
|
107
|
+
class GCPBatchScheduler(Scheduler[GCPBatchOpts, AppDef, AppDryRunInfo[GCPBatchJob]]):
|
|
108
108
|
"""
|
|
109
109
|
GCPBatchScheduler is a TorchX scheduling interface to GCP Batch.
|
|
110
110
|
|
|
@@ -796,7 +796,9 @@ class KubernetesMCADOpts(TypedDict, total=False):
|
|
|
796
796
|
network: Optional[str]
|
|
797
797
|
|
|
798
798
|
|
|
799
|
-
class KubernetesMCADScheduler(
|
|
799
|
+
class KubernetesMCADScheduler(
|
|
800
|
+
DockerWorkspaceMixin, Scheduler[KubernetesMCADOpts, AppDef, AppDryRunInfo]
|
|
801
|
+
):
|
|
800
802
|
"""
|
|
801
803
|
KubernetesMCADScheduler is a TorchX scheduling interface to Kubernetes.
|
|
802
804
|
|
|
@@ -472,7 +472,10 @@ class KubernetesOpts(TypedDict, total=False):
|
|
|
472
472
|
priority_class: Optional[str]
|
|
473
473
|
|
|
474
474
|
|
|
475
|
-
class KubernetesScheduler(
|
|
475
|
+
class KubernetesScheduler(
|
|
476
|
+
DockerWorkspaceMixin,
|
|
477
|
+
Scheduler[KubernetesOpts, AppDef, AppDryRunInfo[KubernetesJob]],
|
|
478
|
+
):
|
|
476
479
|
"""
|
|
477
480
|
KubernetesScheduler is a TorchX scheduling interface to Kubernetes.
|
|
478
481
|
|
|
@@ -529,7 +529,7 @@ def _register_termination_signals() -> None:
|
|
|
529
529
|
signal.signal(signal.SIGINT, _terminate_process_handler)
|
|
530
530
|
|
|
531
531
|
|
|
532
|
-
class LocalScheduler(Scheduler[LocalOpts]):
|
|
532
|
+
class LocalScheduler(Scheduler[LocalOpts, AppDef, AppDryRunInfo[PopenRequest]]):
|
|
533
533
|
"""
|
|
534
534
|
Schedules on localhost. Containers are modeled as processes and
|
|
535
535
|
certain properties of the container that are either not relevant
|
|
@@ -114,7 +114,9 @@ if _has_ray:
|
|
|
114
114
|
requirements: Optional[str] = None
|
|
115
115
|
actors: List[RayActor] = field(default_factory=list)
|
|
116
116
|
|
|
117
|
-
class RayScheduler(
|
|
117
|
+
class RayScheduler(
|
|
118
|
+
TmpDirWorkspaceMixin, Scheduler[RayOpts, AppDef, AppDryRunInfo[RayJob]]
|
|
119
|
+
):
|
|
118
120
|
"""
|
|
119
121
|
RayScheduler is a TorchX scheduling interface to Ray. The job def
|
|
120
122
|
workers will be launched as Ray actors
|
|
@@ -259,7 +259,9 @@ fi
|
|
|
259
259
|
{self.materialize()}"""
|
|
260
260
|
|
|
261
261
|
|
|
262
|
-
class SlurmScheduler(
|
|
262
|
+
class SlurmScheduler(
|
|
263
|
+
DirWorkspaceMixin, Scheduler[SlurmOpts, AppDef, AppDryRunInfo[SlurmBatchRequest]]
|
|
264
|
+
):
|
|
263
265
|
"""
|
|
264
266
|
SlurmScheduler is a TorchX scheduling interface to slurm. TorchX expects
|
|
265
267
|
that slurm CLI tools are locally installed and job accounting is enabled.
|
torchx/specs/builders.py
CHANGED
|
@@ -25,6 +25,17 @@ def _create_args_parser(
|
|
|
25
25
|
config: Optional[Dict[str, Any]] = None,
|
|
26
26
|
) -> argparse.ArgumentParser:
|
|
27
27
|
parameters = inspect.signature(cmpnt_fn).parameters
|
|
28
|
+
return _create_args_parser_from_parameters(
|
|
29
|
+
cmpnt_fn, parameters, cmpnt_defaults, config
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def _create_args_parser_from_parameters(
|
|
34
|
+
cmpnt_fn: Callable[..., Any], # pyre-ignore[2]
|
|
35
|
+
parameters: Mapping[str, inspect.Parameter],
|
|
36
|
+
cmpnt_defaults: Optional[Dict[str, str]] = None,
|
|
37
|
+
config: Optional[Dict[str, Any]] = None,
|
|
38
|
+
) -> argparse.ArgumentParser:
|
|
28
39
|
function_desc, args_desc = get_fn_docstring(cmpnt_fn)
|
|
29
40
|
script_parser = argparse.ArgumentParser(
|
|
30
41
|
prog=f"torchx run <run args...> {cmpnt_fn.__name__} ",
|
torchx/specs/file_linter.py
CHANGED
|
@@ -180,6 +180,11 @@ class TorchxFunctionArgsValidator(TorchxFunctionValidator):
|
|
|
180
180
|
|
|
181
181
|
|
|
182
182
|
class TorchxReturnValidator(TorchxFunctionValidator):
|
|
183
|
+
|
|
184
|
+
def __init__(self, supported_return_type: str) -> None:
|
|
185
|
+
super().__init__()
|
|
186
|
+
self._supported_return_type = supported_return_type
|
|
187
|
+
|
|
183
188
|
def _get_return_annotation(
|
|
184
189
|
self, app_specs_func_def: ast.FunctionDef
|
|
185
190
|
) -> Optional[str]:
|
|
@@ -203,7 +208,7 @@ class TorchxReturnValidator(TorchxFunctionValidator):
|
|
|
203
208
|
* AppDef
|
|
204
209
|
* specs.AppDef
|
|
205
210
|
"""
|
|
206
|
-
supported_return_annotation =
|
|
211
|
+
supported_return_annotation = self._supported_return_type
|
|
207
212
|
return_annotation = self._get_return_annotation(app_specs_func_def)
|
|
208
213
|
linter_errors = []
|
|
209
214
|
if not return_annotation:
|
|
@@ -252,7 +257,7 @@ class TorchFunctionVisitor(ast.NodeVisitor):
|
|
|
252
257
|
if validators is None:
|
|
253
258
|
self.validators: List[TorchxFunctionValidator] = [
|
|
254
259
|
TorchxFunctionArgsValidator(),
|
|
255
|
-
TorchxReturnValidator(),
|
|
260
|
+
TorchxReturnValidator("AppDef"),
|
|
256
261
|
]
|
|
257
262
|
else:
|
|
258
263
|
self.validators = validators
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: torchx-nightly
|
|
3
|
-
Version: 2025.3.
|
|
3
|
+
Version: 2025.3.27
|
|
4
4
|
Summary: TorchX SDK and Components
|
|
5
5
|
Home-page: https://github.com/pytorch/torchx
|
|
6
6
|
Author: TorchX Devs
|
|
@@ -55,11 +55,11 @@ Requires-Dist: pytorch-lightning==2.3.1; extra == "dev"
|
|
|
55
55
|
Requires-Dist: tensorboard==2.14.0; extra == "dev"
|
|
56
56
|
Requires-Dist: sagemaker==2.224.4; extra == "dev"
|
|
57
57
|
Requires-Dist: torch-model-archiver>=0.4.2; extra == "dev"
|
|
58
|
-
Requires-Dist: torch
|
|
59
|
-
Requires-Dist: torchmetrics==
|
|
58
|
+
Requires-Dist: torch>=2.6.0; extra == "dev"
|
|
59
|
+
Requires-Dist: torchmetrics==1.6.3; extra == "dev"
|
|
60
60
|
Requires-Dist: torchserve>=0.10.0; extra == "dev"
|
|
61
|
-
Requires-Dist: torchtext==0.
|
|
62
|
-
Requires-Dist: torchvision==0.
|
|
61
|
+
Requires-Dist: torchtext==0.18.0; extra == "dev"
|
|
62
|
+
Requires-Dist: torchvision==0.21.0; extra == "dev"
|
|
63
63
|
Requires-Dist: ts==0.5.1; extra == "dev"
|
|
64
64
|
Requires-Dist: ray[default]; extra == "dev"
|
|
65
65
|
Requires-Dist: wheel; extra == "dev"
|
|
@@ -34,7 +34,7 @@ torchx/components/utils.py,sha256=QRBxBm1OnNhOhpPs0lKdbJ8_mNhWYMklY6cl1gPIw9A,93
|
|
|
34
34
|
torchx/components/integration_tests/__init__.py,sha256=Md3cCHD7Ano9kV15PqGbicgUO-RMdh4aVy1yKiDt_xE,208
|
|
35
35
|
torchx/components/integration_tests/component_provider.py,sha256=cFNGqmclcZTJlOW_YGf5XEuGeWloTmcJEAh02Aob_PQ,3995
|
|
36
36
|
torchx/components/integration_tests/integ_tests.py,sha256=O8jd8Jq5O0mns7xzIFsHexBDHkIIAIfELQkWCzNPzRw,5165
|
|
37
|
-
torchx/distributed/__init__.py,sha256=
|
|
37
|
+
torchx/distributed/__init__.py,sha256=lobebigfujmRTe_SJw07_a9iohBxDhq2iiPsV1YcKjw,10247
|
|
38
38
|
torchx/examples/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
39
39
|
torchx/examples/torchx_out_of_sync_training.py,sha256=sXiI1G8aGsfuvxRdBszDgM8pSplqhgfXjRnAcgRwNGM,397
|
|
40
40
|
torchx/examples/apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -43,9 +43,9 @@ torchx/examples/apps/datapreproc/datapreproc.py,sha256=cu88O_WZgqZ6g7jVIG2kagAVb
|
|
|
43
43
|
torchx/examples/apps/lightning/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
44
44
|
torchx/examples/apps/lightning/data.py,sha256=kSv_DFqtFVkNjZ46HT7GApImc9lMD7liy929dUrFWwM,6610
|
|
45
45
|
torchx/examples/apps/lightning/interpret.py,sha256=Hd3kE5a6FyhxCmJBfTzb4Tlj518zhX8V0XvZfzu4nqE,5256
|
|
46
|
-
torchx/examples/apps/lightning/model.py,sha256=
|
|
46
|
+
torchx/examples/apps/lightning/model.py,sha256=4CgObWfANqDN9emYSdmCpbRe_V_Lef_Hd3M-yayDbZE,4045
|
|
47
47
|
torchx/examples/apps/lightning/profiler.py,sha256=SSSihnwjeUTkBoz0E3qn1b-wbkfUIowscx2ND_37zyw,1915
|
|
48
|
-
torchx/examples/apps/lightning/train.py,sha256=
|
|
48
|
+
torchx/examples/apps/lightning/train.py,sha256=0wvvshGHvZowePB4LfclXwn40X7i9euM0ReETWBcPSo,6253
|
|
49
49
|
torchx/examples/pipelines/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
50
50
|
torchx/examples/pipelines/kfp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
51
51
|
torchx/examples/pipelines/kfp/advanced_pipeline.py,sha256=U5N_XmpxbuEIh-hDayjJ5Lnk2lYvmgr7oznFnsKUk5g,8431
|
|
@@ -65,27 +65,27 @@ torchx/runtime/__init__.py,sha256=Wxje2BryzeQneFu5r6P9JJiEKG-_C9W1CcZ_JNrKT6g,59
|
|
|
65
65
|
torchx/runtime/tracking/__init__.py,sha256=dYnAPnrXYREfPXkpHhdOFkcYIODWEbA13PdD-wLQYBo,3055
|
|
66
66
|
torchx/runtime/tracking/api.py,sha256=SmUQyUKZqG3KlAhT7CJOGqRz1O274E4m63wQeOVq3CU,5472
|
|
67
67
|
torchx/schedulers/__init__.py,sha256=gwy1opmKOPzQ_Lqh2GY0chYycLmdissLfd4846mPEMY,2334
|
|
68
|
-
torchx/schedulers/api.py,sha256=
|
|
69
|
-
torchx/schedulers/aws_batch_scheduler.py,sha256=
|
|
70
|
-
torchx/schedulers/aws_sagemaker_scheduler.py,sha256=
|
|
68
|
+
torchx/schedulers/api.py,sha256=zNClZPz6bKKeZcZ9SjrpWeYAVFxvKHjqqouRuld-X5Y,14538
|
|
69
|
+
torchx/schedulers/aws_batch_scheduler.py,sha256=h95d3OBhxkB7QJlJaDY3s1H7EG0eLXnCXxAPU8Ume3w,28130
|
|
70
|
+
torchx/schedulers/aws_sagemaker_scheduler.py,sha256=spmcTEZ_o05pdTzpXr5gmOA-a9W0xH-YX6AioqX78l8,20950
|
|
71
71
|
torchx/schedulers/devices.py,sha256=RjVcu22ZRl_9OKtOtmA1A3vNXgu2qD6A9ST0L0Hsg4I,1734
|
|
72
|
-
torchx/schedulers/docker_scheduler.py,sha256=
|
|
73
|
-
torchx/schedulers/gcp_batch_scheduler.py,sha256=
|
|
72
|
+
torchx/schedulers/docker_scheduler.py,sha256=cNFjZm2zv6_v4wtDtou8PJTz0esxnXHc0UbSvrT1ER4,16810
|
|
73
|
+
torchx/schedulers/gcp_batch_scheduler.py,sha256=Noul_a01FGjDaa3ohAJbx_Pjhy4SN1TPwl4TyHY75-0,16281
|
|
74
74
|
torchx/schedulers/ids.py,sha256=3E-_vwVYC-8Tv8kjuY9-W7TbOe_-Laqd8a65uIN3hQY,1798
|
|
75
|
-
torchx/schedulers/kubernetes_mcad_scheduler.py,sha256
|
|
76
|
-
torchx/schedulers/kubernetes_scheduler.py,sha256=
|
|
77
|
-
torchx/schedulers/local_scheduler.py,sha256=
|
|
78
|
-
torchx/schedulers/lsf_scheduler.py,sha256=
|
|
79
|
-
torchx/schedulers/ray_scheduler.py,sha256=
|
|
80
|
-
torchx/schedulers/slurm_scheduler.py,sha256=
|
|
75
|
+
torchx/schedulers/kubernetes_mcad_scheduler.py,sha256=-NHxKAW9bGnQ-4hpFhciZTlFJryPb3O_9oKv3f7MzuM,42954
|
|
76
|
+
torchx/schedulers/kubernetes_scheduler.py,sha256=7AR3ccfta0NXqahxz9LVrv-vkdZnYTAHzw-sh_aLNDs,28242
|
|
77
|
+
torchx/schedulers/local_scheduler.py,sha256=JMSGAO9RXeUiEz8BOTA_EnHDOd065oJ_tyV1E__m3OQ,41882
|
|
78
|
+
torchx/schedulers/lsf_scheduler.py,sha256=e6BmJC6dNNNzzwATgJu5Sq4HxAPw_hI3EJFRojzAMlE,17690
|
|
79
|
+
torchx/schedulers/ray_scheduler.py,sha256=0uEuIqsO0QyaDxTRxaVuXmsA3cEKeSXgUSfVzIPJKo0,17507
|
|
80
|
+
torchx/schedulers/slurm_scheduler.py,sha256=RC1ze2w0oaoQDLgercW7yHz1rGv5FVB6em4HYbLmQRg,19434
|
|
81
81
|
torchx/schedulers/streams.py,sha256=8_SLezgnWgfv_zXUsJCUM34-h2dtv25NmZuxEwkzmxw,2007
|
|
82
82
|
torchx/schedulers/ray/__init__.py,sha256=fE0IHi1JJpxsNVBNzWNee2thrNXFFRhY94c80RxNSIE,231
|
|
83
83
|
torchx/schedulers/ray/ray_common.py,sha256=pyNYFvTKVwdjDAeCBNbPwAWwVNmlLOJWExfn90XY8u8,610
|
|
84
84
|
torchx/schedulers/ray/ray_driver.py,sha256=RdaCLfth16ky-5PDVOWRe_RuheWJu9xufWux2F9T7iw,12302
|
|
85
85
|
torchx/specs/__init__.py,sha256=T8xUCz7iVE6OsUL5P4Pzy2B8ZY_YinCVDwUer5Q-XPc,6179
|
|
86
86
|
torchx/specs/api.py,sha256=ISdnfGH1R0-1Ah23UsPOZQT3WH63dIMj9CxA3QRoP0g,38046
|
|
87
|
-
torchx/specs/builders.py,sha256=
|
|
88
|
-
torchx/specs/file_linter.py,sha256=
|
|
87
|
+
torchx/specs/builders.py,sha256=f5Yy8KoL2OgPUiqJRkZ4E6lboq5Srkh5mD17F0EBdeg,10506
|
|
88
|
+
torchx/specs/file_linter.py,sha256=QCwob5STTBuy8RsxaevTI-Dk6R8siDJn81LyaOwazes,12333
|
|
89
89
|
torchx/specs/finder.py,sha256=N8EJcxYmG8ZBreB5FgvufGq-CnNOmvVYUpAdflkv7K8,17312
|
|
90
90
|
torchx/specs/named_resources_aws.py,sha256=ISjHtifRJqB8u7PeAMiyLyO_S0WCaZiK-CFF3qe6JDU,11415
|
|
91
91
|
torchx/specs/named_resources_generic.py,sha256=Sg4tAdqiiWDrDz2Lj_pnfsjzGIXKTou73wPseh6j55w,2646
|
|
@@ -115,9 +115,9 @@ torchx/workspace/__init__.py,sha256=FqN8AN4VhR1C_SBY10MggQvNZmyanbbuPuE-JCjkyUY,
|
|
|
115
115
|
torchx/workspace/api.py,sha256=PtDkGTC5lX03pRoYpuMz2KCmM1ZOycRP1UknqvNb97Y,6341
|
|
116
116
|
torchx/workspace/dir_workspace.py,sha256=npNW_IjUZm_yS5r-8hrRkH46ndDd9a_eApT64m1S1T4,2268
|
|
117
117
|
torchx/workspace/docker_workspace.py,sha256=PFu2KQNVC-0p2aKJ-W_BKA9ZOmXdCY2ABEkCExp3udQ,10269
|
|
118
|
-
torchx_nightly-2025.3.
|
|
119
|
-
torchx_nightly-2025.3.
|
|
120
|
-
torchx_nightly-2025.3.
|
|
121
|
-
torchx_nightly-2025.3.
|
|
122
|
-
torchx_nightly-2025.3.
|
|
123
|
-
torchx_nightly-2025.3.
|
|
118
|
+
torchx_nightly-2025.3.27.dist-info/LICENSE,sha256=WVHfXhFC0Ia8LTKt_nJVYobdqTJVg_4J3Crrfm2A8KQ,1721
|
|
119
|
+
torchx_nightly-2025.3.27.dist-info/METADATA,sha256=jSQP5YcLXfKbeA7Y9odUtBm17FJlWolH1uG5leqq4ZI,6168
|
|
120
|
+
torchx_nightly-2025.3.27.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
|
|
121
|
+
torchx_nightly-2025.3.27.dist-info/entry_points.txt,sha256=T328AMXeKI3JZnnxfkEew2ZcMN1oQDtkXjMz7lkV-P4,169
|
|
122
|
+
torchx_nightly-2025.3.27.dist-info/top_level.txt,sha256=pxew3bc2gsiViS0zADs0jb6kC5v8o_Yy_85fhHj_J1A,7
|
|
123
|
+
torchx_nightly-2025.3.27.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|