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.

@@ -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 Accuracy
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 = Accuracy()
53
- self.val_acc = Accuracy()
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: Accuracy,
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("--num_samples", type=int, default=10, help="num_samples")
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: AppDef,
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: AppDryRunInfo) -> str:
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: AppDef, cfg: T) -> AppDryRunInfo:
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
- for role in app.roles:
183
- dryrun_info = role.pre_proc(self.backend, dryrun_info)
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: AppDef, cfg: T) -> AppDryRunInfo:
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: AppDef, scheduler: str, cfg: T) -> None:
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
- for role in app.roles:
355
- if role.resource == NULL_RESOURCE:
356
- raise ValueError(
357
- f"No resource for role: {role.image}."
358
- f" Did you forget to attach resource to the role"
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(DockerWorkspaceMixin, Scheduler[AWSBatchOpts]):
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(DockerWorkspaceMixin, Scheduler[AWSSageMakerOpts]): # type: ignore[misc]
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(DockerWorkspaceMixin, Scheduler[DockerOpts]):
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(DockerWorkspaceMixin, Scheduler[KubernetesMCADOpts]):
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(DockerWorkspaceMixin, Scheduler[KubernetesOpts]):
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
@@ -395,7 +395,7 @@ class LsfBsub:
395
395
  {self.materialize()}"""
396
396
 
397
397
 
398
- class LsfScheduler(Scheduler[LsfOpts]):
398
+ class LsfScheduler(Scheduler[LsfOpts, AppDef, AppDryRunInfo]):
399
399
  """
400
400
  **Example: hello_world**
401
401
 
@@ -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(TmpDirWorkspaceMixin, Scheduler[RayOpts]):
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(DirWorkspaceMixin, Scheduler[SlurmOpts]):
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__} ",
@@ -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 = "AppDef"
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.23
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==2.2.1; extra == "dev"
59
- Requires-Dist: torchmetrics==0.10.3; extra == "dev"
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.17.1; extra == "dev"
62
- Requires-Dist: torchvision==0.17.1; extra == "dev"
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=pkB_V4eX0DnupRsmOGnINL2XGDM1oRLG0-fH7-feeNI,10280
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=ppj8pYkJ1Zj4kZX6JXULGgx3sYVfNIQ24OuDYXc5lYo,3947
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=MGSapykGv-m4nl0WyRC-yzhPWEI4bHQ5WKrniR6czQk,6099
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=h5gtxDz4gAMe4WN-caNFvZqpLE2DUqWpssGZng4J1Mc,14449
69
- torchx/schedulers/aws_batch_scheduler.py,sha256=8jRTmi5gtqyKUQfhMRqCQqNVM0drXdu8RS0xUfZby48,28091
70
- torchx/schedulers/aws_sagemaker_scheduler.py,sha256=x33J_tQFpRr_AUv5dWf1qxqG0dbmIjaqFHyrSnHWijw,20921
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=goeFEgEi0H3sagIDSsGPMOU9f-mcMbEFPo2gwHOco1k,16770
73
- torchx/schedulers/gcp_batch_scheduler.py,sha256=o0t70s7fpGgn8MqhkIPWV3ZuF0kc5KdLGYz5-YKVb9Y,16245
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=riUfzSBega0JcCbV9NspU_a5A46AD-74Jgf7JPvA2Is,42925
76
- torchx/schedulers/kubernetes_scheduler.py,sha256=W_vVvQVGjNUoasN-JIsOTU9f0qjpds2u3GteNblssGM,28193
77
- torchx/schedulers/local_scheduler.py,sha256=wOL-Js1fzEJY7RugNpFKu6BjmdHBgRf3llONFdwg-xQ,41845
78
- torchx/schedulers/lsf_scheduler.py,sha256=BkXKyWoVrCZznjfRFQ8oW3vzM0sBGkGmGUcSX71D-nE,17667
79
- torchx/schedulers/ray_scheduler.py,sha256=d10PtA-sEfHmDxF-GKog_Qro7FpIDCjSZbkKBdyj72E,17462
80
- torchx/schedulers/slurm_scheduler.py,sha256=A11XvI0-Wa7n3qc1IdrYcDaQEZhj0GiGf-PjHj0Byn8,19386
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=rejt-X68zxTE_8_MWeoQ30cOj6pJNe4DS9YRhjrSDuA,10127
88
- torchx/specs/file_linter.py,sha256=OOyDnfg9m_9BiyhXc3T0fhE_-ykKCJ32gxCQGbfT-yE,12157
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.23.dist-info/LICENSE,sha256=WVHfXhFC0Ia8LTKt_nJVYobdqTJVg_4J3Crrfm2A8KQ,1721
119
- torchx_nightly-2025.3.23.dist-info/METADATA,sha256=pkrGpNX0MsYSZPb5Izexow-b8-DOLyXfYMM8GbDUIfQ,6169
120
- torchx_nightly-2025.3.23.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
121
- torchx_nightly-2025.3.23.dist-info/entry_points.txt,sha256=T328AMXeKI3JZnnxfkEew2ZcMN1oQDtkXjMz7lkV-P4,169
122
- torchx_nightly-2025.3.23.dist-info/top_level.txt,sha256=pxew3bc2gsiViS0zADs0jb6kC5v8o_Yy_85fhHj_J1A,7
123
- torchx_nightly-2025.3.23.dist-info/RECORD,,
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,,