Skip to content

Commit 1e2cb22

Browse files
pakshafacebook-github-bot
authored andcommitted
Remove redundant SchedulerBackend in favor of str (#436)
Summary: Pull Request resolved: #436 Removed SchedulerBackend and replaced with str Reviewed By: d4l3k Differential Revision: D35185234 fbshipit-source-id: 8f2e0abbda6eaecc9e8aecd32e3775f2f7ca83be
1 parent afbb6f1 commit 1e2cb22

14 files changed

+29
-45
lines changed

torchx/components/component_test_base.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
AppHandle,
2828
AppState,
2929
CfgVal,
30-
SchedulerBackend,
3130
)
3231
from torchx.specs.api import _create_args_parser
3332
from torchx.specs.finder import get_component
@@ -38,7 +37,7 @@ class ComponentUtils:
3837
def run_appdef_on_scheduler(
3938
cls,
4039
app_def: AppDef,
41-
scheduler: SchedulerBackend,
40+
scheduler: str,
4241
cfg: Mapping[str, CfgVal],
4342
dryrun: bool = False,
4443
) -> Union[AppHandle, AppDryRunInfo]:

torchx/components/integration_tests/component_provider.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@
1111
import torchx.components.dist as dist_components
1212
import torchx.components.serve as serve_components
1313
import torchx.components.utils as utils_components
14-
from torchx.specs import AppDef, SchedulerBackend
14+
from torchx.specs import AppDef
1515

1616

1717
class ComponentProvider(ABC):
1818
"""
1919
Abstract class that represents generic component provider.
2020
"""
2121

22-
def __init__(self, scheduler: SchedulerBackend, image: str) -> None:
22+
def __init__(self, scheduler: str, image: str) -> None:
2323
self._scheduler = scheduler
2424
self._image = image
2525

@@ -75,7 +75,7 @@ def get_app_def(self) -> AppDef:
7575

7676

7777
class TouchComponentProvider(ComponentProvider):
78-
def __init__(self, image: str, scheduler: SchedulerBackend) -> None:
78+
def __init__(self, image: str, scheduler: str) -> None:
7979
super(TouchComponentProvider, self).__init__(image, scheduler)
8080
self._file_path = "<None>"
8181

@@ -98,7 +98,7 @@ def tearDown(self) -> None:
9898

9999

100100
class CopyComponentProvider(ComponentProvider):
101-
def __init__(self, image: str, scheduler: SchedulerBackend) -> None:
101+
def __init__(self, image: str, scheduler: str) -> None:
102102
super(CopyComponentProvider, self).__init__(image, scheduler)
103103
self._src_path = "<None>"
104104
self._dst_path = "<None>"

torchx/components/integration_tests/integ_tests.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@
1616
from pyre_extensions import none_throws
1717
from torchx.components.component_test_base import ComponentUtils
1818
from torchx.components.integration_tests.component_provider import ComponentProvider
19-
from torchx.specs import AppDef, CfgVal, SchedulerBackend
19+
from torchx.specs import AppDef, CfgVal
2020

2121

2222
@dataclass
2323
class SchedulerInfo:
24-
name: SchedulerBackend
24+
name: str
2525
image: str
2626
cfg: Mapping[str, CfgVal] = field(default_factory=dict)
2727

torchx/runner/api.py

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
AppHandle,
2323
AppStatus,
2424
CfgVal,
25-
SchedulerBackend,
2625
UnknownAppException,
2726
from_function,
2827
make_app_handle,
@@ -50,7 +49,7 @@ class Runner:
5049
def __init__(
5150
self,
5251
name: str,
53-
schedulers: Dict[SchedulerBackend, Scheduler],
52+
schedulers: Dict[str, Scheduler],
5453
component_defaults: Optional[Dict[str, Dict[str, str]]] = None,
5554
) -> None:
5655
"""
@@ -102,7 +101,7 @@ def run_component(
102101
self,
103102
component: str,
104103
component_args: List[str],
105-
scheduler: SchedulerBackend,
104+
scheduler: str,
106105
cfg: Optional[Mapping[str, CfgVal]] = None,
107106
workspace: Optional[str] = None,
108107
) -> AppHandle:
@@ -151,7 +150,7 @@ def dryrun_component(
151150
self,
152151
component: str,
153152
component_args: List[str],
154-
scheduler: SchedulerBackend,
153+
scheduler: str,
155154
cfg: Optional[Mapping[str, CfgVal]] = None,
156155
workspace: Optional[str] = None,
157156
) -> AppDryRunInfo:
@@ -170,7 +169,7 @@ def dryrun_component(
170169
def run(
171170
self,
172171
app: AppDef,
173-
scheduler: SchedulerBackend,
172+
scheduler: str,
174173
cfg: Optional[Mapping[str, CfgVal]] = None,
175174
workspace: Optional[str] = None,
176175
) -> AppHandle:
@@ -237,7 +236,7 @@ def name(self) -> str:
237236
def dryrun(
238237
self,
239238
app: AppDef,
240-
scheduler: SchedulerBackend,
239+
scheduler: str,
241240
cfg: Optional[Mapping[str, CfgVal]] = None,
242241
workspace: Optional[str] = None,
243242
) -> AppDryRunInfo:
@@ -317,7 +316,7 @@ def run_opts(self) -> Dict[str, runopts]:
317316
for scheduler_backend, scheduler in self._schedulers.items()
318317
}
319318

320-
def scheduler_backends(self) -> List[SchedulerBackend]:
319+
def scheduler_backends(self) -> List[str]:
321320
"""
322321
Returns a list of all supported scheduler backends.
323322
"""
@@ -535,7 +534,7 @@ def log_lines(
535534
)
536535
return log_iter
537536

538-
def _scheduler(self, scheduler: SchedulerBackend) -> Scheduler:
537+
def _scheduler(self, scheduler: str) -> Scheduler:
539538
sched = self._schedulers.get(scheduler)
540539
if not sched:
541540
raise KeyError(

torchx/schedulers/__init__.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import torchx.schedulers.local_scheduler as local_scheduler
1414
import torchx.schedulers.slurm_scheduler as slurm_scheduler
1515
from torchx.schedulers.api import Scheduler
16-
from torchx.specs.api import SchedulerBackend
1716
from torchx.util.entrypoints import load_group
1817
from typing_extensions import Protocol
1918

@@ -73,7 +72,7 @@ def get_default_scheduler_name() -> str:
7372

7473
def get_schedulers(
7574
session_name: str, **scheduler_params: object
76-
) -> Dict[SchedulerBackend, Scheduler]:
75+
) -> Dict[str, Scheduler]:
7776
"""
7877
get_schedulers returns all available schedulers.
7978
"""

torchx/schedulers/api.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
CfgVal,
2222
Role,
2323
RoleStatus,
24-
SchedulerBackend,
2524
runopts,
2625
)
2726
from torchx.workspace.api import Workspace
@@ -70,7 +69,7 @@ class Scheduler(abc.ABC):
7069
``@abc.abstractmethod``.
7170
"""
7271

73-
def __init__(self, backend: SchedulerBackend, session_name: str) -> None:
72+
def __init__(self, backend: str, session_name: str) -> None:
7473
self.backend = backend
7574
self.session_name = session_name
7675

@@ -284,7 +283,7 @@ def log_iter(
284283
f"{self.__class__.__qualname__} does not support application log iteration"
285284
)
286285

287-
def _validate(self, app: AppDef, scheduler: SchedulerBackend) -> None:
286+
def _validate(self, app: AppDef, scheduler: str) -> None:
288287
"""
289288
Validates whether application is consistent with the scheduler.
290289

torchx/schedulers/aws_batch_scheduler.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,6 @@
6464
AppDef,
6565
AppState,
6666
Role,
67-
SchedulerBackend,
6867
macros,
6968
runopts,
7069
CfgVal,
@@ -363,7 +362,7 @@ def _submit_dryrun(
363362
info._cfg = cfg
364363
return info
365364

366-
def _validate(self, app: AppDef, scheduler: SchedulerBackend) -> None:
365+
def _validate(self, app: AppDef, scheduler: str) -> None:
367366
# Skip validation step
368367
pass
369368

torchx/schedulers/docker_scheduler.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
ReplicaStatus,
3131
Role,
3232
RoleStatus,
33-
SchedulerBackend,
3433
is_terminal,
3534
macros,
3635
runopts,
@@ -295,7 +294,7 @@ def _submit_dryrun(
295294
info._cfg = cfg
296295
return info
297296

298-
def _validate(self, app: AppDef, scheduler: SchedulerBackend) -> None:
297+
def _validate(self, app: AppDef, scheduler: str) -> None:
299298
# Skip validation step
300299
pass
301300

torchx/schedulers/kubernetes_scheduler.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@
6161
RetryPolicy,
6262
Role,
6363
RoleStatus,
64-
SchedulerBackend,
6564
macros,
6665
runopts,
6766
BindMount,
@@ -572,7 +571,7 @@ def _submit_dryrun(
572571
info._cfg = cfg
573572
return info
574573

575-
def _validate(self, app: AppDef, scheduler: SchedulerBackend) -> None:
574+
def _validate(self, app: AppDef, scheduler: str) -> None:
576575
# Skip validation step
577576
pass
578577

torchx/schedulers/local_scheduler.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@
5151
AppState,
5252
CfgVal,
5353
Role,
54-
SchedulerBackend,
5554
is_terminal,
5655
macros,
5756
runopts,
@@ -602,7 +601,7 @@ def run_opts(self) -> runopts:
602601
)
603602
return opts
604603

605-
def _validate(self, app: AppDef, scheduler: SchedulerBackend) -> None:
604+
def _validate(self, app: AppDef, scheduler: str) -> None:
606605
# Skip validation step for local application
607606
pass
608607

torchx/schedulers/ray_scheduler.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
from torchx.specs import (
2929
AppDef,
3030
CfgVal,
31-
SchedulerBackend,
3231
macros,
3332
runopts,
3433
Role,
@@ -274,7 +273,7 @@ def _submit_dryrun(
274273

275274
return AppDryRunInfo(job, repr)
276275

277-
def _validate(self, app: AppDef, scheduler: SchedulerBackend) -> None:
276+
def _validate(self, app: AppDef, scheduler: str) -> None:
278277
if scheduler != "ray":
279278
raise ValueError(
280279
f"An unknown scheduler backend '{scheduler}' has been passed to the Ray scheduler."

torchx/schedulers/slurm_scheduler.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
ReplicaStatus,
3232
Role,
3333
RoleStatus,
34-
SchedulerBackend,
3534
macros,
3635
runopts,
3736
)
@@ -383,7 +382,7 @@ def _submit_dryrun(
383382

384383
return AppDryRunInfo(req, repr)
385384

386-
def _validate(self, app: AppDef, scheduler: SchedulerBackend) -> None:
385+
def _validate(self, app: AppDef, scheduler: str) -> None:
387386
# Skip validation step for slurm
388387
pass
389388

torchx/specs/__init__.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
RetryPolicy,
3838
Role,
3939
RoleStatus,
40-
SchedulerBackend,
4140
UnknownAppException,
4241
UnknownSchedulerException,
4342
from_function,

torchx/specs/api.py

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,6 @@
3838
)
3939

4040

41-
SchedulerBackend = str
42-
43-
4441
# ========================================
4542
# ==== Distributed AppDef API =======
4643
# ========================================
@@ -87,7 +84,7 @@ def copy(original: "Resource", **capabilities: Any) -> "Resource":
8784
NULL_RESOURCE: Resource = Resource(cpu=-1, gpu=-1, memMB=-1)
8885

8986
# used as "*" scheduler backend
90-
ALL: SchedulerBackend = "all"
87+
ALL: str = "all"
9188

9289
# sentinel value used to represent missing string attributes, such as image or entrypoint
9390
MISSING: str = "<MISSING>"
@@ -299,7 +296,7 @@ class Role:
299296

300297
def pre_proc(
301298
self,
302-
scheduler: SchedulerBackend,
299+
scheduler: str,
303300
# pyre-fixme[24]: AppDryRunInfo was designed to work with Any request object
304301
dryrun_info: "AppDryRunInfo",
305302
# pyre-fixme[24]: AppDryRunInfo was designed to work with Any request object
@@ -501,7 +498,7 @@ def __init__(self, request: T, fmt: Callable[[T], str]) -> None:
501498
# unless there is a good reason to
502499
self._app: Optional[AppDef] = None
503500
self._cfg: Mapping[str, CfgVal] = {}
504-
self._scheduler: Optional[SchedulerBackend] = None
501+
self._scheduler: Optional[str] = None
505502

506503
def __repr__(self) -> str:
507504
return self._fmt(self.request)
@@ -712,7 +709,7 @@ def __init__(self, app_handle: str) -> None:
712709

713710

714711
class UnknownSchedulerException(Exception):
715-
def __init__(self, scheduler_backend: SchedulerBackend) -> None:
712+
def __init__(self, scheduler_backend: str) -> None:
716713
super().__init__(
717714
f"Scheduler backend: {scheduler_backend} does not exist."
718715
f" Use session.scheduler_backends() to see all supported schedulers"
@@ -737,13 +734,11 @@ def __init__(self, app_handle: "AppHandle") -> None:
737734
)
738735

739736

740-
def make_app_handle(
741-
scheduler_backend: SchedulerBackend, session_name: str, app_id: str
742-
) -> str:
737+
def make_app_handle(scheduler_backend: str, session_name: str, app_id: str) -> str:
743738
return f"{scheduler_backend}://{session_name}/{app_id}"
744739

745740

746-
def parse_app_handle(app_handle: AppHandle) -> Tuple[SchedulerBackend, str, str]:
741+
def parse_app_handle(app_handle: AppHandle) -> Tuple[str, str, str]:
747742
"""
748743
parses the app handle into ```(scheduler_backend, session_name, and app_id)```
749744
"""

0 commit comments

Comments
 (0)