torchmonarch-nightly 2025.6.16__cp310-cp310-manylinux2014_x86_64.whl → 2025.6.17__cp310-cp310-manylinux2014_x86_64.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.
- monarch/_rust_bindings.so +0 -0
- monarch/common/device_mesh.py +9 -5
- monarch/common/shape.py +3 -0
- monarch/common/tensor.py +25 -4
- monarch/mesh_controller.py +10 -5
- monarch/monarch_controller +0 -0
- monarch/proc_mesh.py +62 -8
- monarch/sim_mesh.py +4 -2
- monarch/tools/components/hyperactor.py +4 -3
- tests/test_python_actors.py +21 -1
- {torchmonarch_nightly-2025.6.16.dist-info → torchmonarch_nightly-2025.6.17.dist-info}/METADATA +1 -1
- {torchmonarch_nightly-2025.6.16.dist-info → torchmonarch_nightly-2025.6.17.dist-info}/RECORD +16 -16
- {torchmonarch_nightly-2025.6.16.dist-info → torchmonarch_nightly-2025.6.17.dist-info}/WHEEL +0 -0
- {torchmonarch_nightly-2025.6.16.dist-info → torchmonarch_nightly-2025.6.17.dist-info}/entry_points.txt +0 -0
- {torchmonarch_nightly-2025.6.16.dist-info → torchmonarch_nightly-2025.6.17.dist-info}/licenses/LICENSE +0 -0
- {torchmonarch_nightly-2025.6.16.dist-info → torchmonarch_nightly-2025.6.17.dist-info}/top_level.txt +0 -0
monarch/_rust_bindings.so
CHANGED
Binary file
|
monarch/common/device_mesh.py
CHANGED
@@ -244,24 +244,24 @@ class DeviceMesh(Referenceable, MeshTrait):
|
|
244
244
|
def rotate(self, **kwargs: Dict[str, int]):
|
245
245
|
raise NotImplementedError()
|
246
246
|
|
247
|
-
def rank(self, dims: Union[str, Sequence[str]]) ->
|
247
|
+
def rank(self, dims: Union[str, Sequence[str]]) -> torch.Tensor:
|
248
248
|
self.define_remotely()
|
249
249
|
if isinstance(dims, str):
|
250
250
|
if dims not in self.names:
|
251
251
|
raise KeyError(f"{self} does not have dimension {repr(dims)}")
|
252
252
|
return _remote(
|
253
|
-
|
253
|
+
_rank,
|
254
254
|
propagate=lambda _self, _dims: torch.full((), 0, dtype=torch.long),
|
255
255
|
)(self, dims)
|
256
256
|
|
257
|
-
combined_rank = 0
|
257
|
+
combined_rank: Any = 0
|
258
258
|
for dim in dims:
|
259
259
|
combined_rank *= self.size(dim)
|
260
260
|
combined_rank += self.rank(dim)
|
261
261
|
return combined_rank
|
262
262
|
|
263
263
|
@property
|
264
|
-
def ranks(self) -> dict[str,
|
264
|
+
def ranks(self) -> dict[str, torch.Tensor]:
|
265
265
|
return {dim: self.rank(dim) for dim in self.names}
|
266
266
|
|
267
267
|
def process_idx(self):
|
@@ -334,6 +334,10 @@ class _ActiveMesh(TorchDispatchMode):
|
|
334
334
|
return _remote(func, propagate=func)(*args, **kwargs)
|
335
335
|
|
336
336
|
|
337
|
+
def _rank(mesh, dim):
|
338
|
+
return torch.full((), mesh.dims[dim].rank, dtype=torch.long)
|
339
|
+
|
340
|
+
|
337
341
|
@contextmanager
|
338
342
|
def _dispatch():
|
339
343
|
global _dispatch_enabled
|
@@ -401,7 +405,7 @@ def to_mesh(
|
|
401
405
|
|
402
406
|
def slice_mesh(
|
403
407
|
tensors: Any,
|
404
|
-
**kwargs:
|
408
|
+
**kwargs: Union[int, slice],
|
405
409
|
) -> Any:
|
406
410
|
"""
|
407
411
|
Performs the slice_mesh operation for each tensor in tensors.
|
monarch/common/shape.py
CHANGED
@@ -44,6 +44,9 @@ class MeshTrait(ABC):
|
|
44
44
|
@abstractmethod
|
45
45
|
def _labels(self) -> Tuple[str, ...]: ...
|
46
46
|
|
47
|
+
# mesh trait guarentees that its own calls to _new_with_shape
|
48
|
+
# will only ever select a shape that is a subspace of the
|
49
|
+
# current _ndslice.
|
47
50
|
@abstractmethod
|
48
51
|
def _new_with_shape(self, shape: Shape) -> Self: ...
|
49
52
|
|
monarch/common/tensor.py
CHANGED
@@ -7,17 +7,20 @@
|
|
7
7
|
# pyre-unsafe
|
8
8
|
import itertools
|
9
9
|
import traceback
|
10
|
+
import typing
|
10
11
|
import warnings
|
11
12
|
from collections import defaultdict
|
12
13
|
from typing import (
|
13
14
|
Any,
|
14
15
|
Callable,
|
16
|
+
cast,
|
15
17
|
Dict,
|
16
18
|
Iterable,
|
17
19
|
List,
|
18
20
|
Literal,
|
19
21
|
NamedTuple,
|
20
22
|
Optional,
|
23
|
+
runtime_checkable,
|
21
24
|
Sequence,
|
22
25
|
TYPE_CHECKING,
|
23
26
|
TypeVar,
|
@@ -35,7 +38,8 @@ from .base_tensor import BaseTensor
|
|
35
38
|
from .borrows import StorageAliases
|
36
39
|
|
37
40
|
if TYPE_CHECKING:
|
38
|
-
from .device_mesh import DeviceMesh
|
41
|
+
from monarch.common.device_mesh import DeviceMesh
|
42
|
+
|
39
43
|
from .fake import fake_call
|
40
44
|
from .function import Propagator, ResolvableFunction
|
41
45
|
from .invocation import Invocation
|
@@ -52,6 +56,12 @@ _valid_reduce = Literal[
|
|
52
56
|
T = TypeVar("T")
|
53
57
|
|
54
58
|
|
59
|
+
@runtime_checkable
|
60
|
+
class HasDeviceMesh(typing.Protocol):
|
61
|
+
@property
|
62
|
+
def _device_mesh(self) -> "DeviceMesh": ...
|
63
|
+
|
64
|
+
|
55
65
|
class DropLocation(NamedTuple):
|
56
66
|
tensor_id: int
|
57
67
|
traceback: List[traceback.FrameSummary]
|
@@ -167,7 +177,11 @@ class Tensor(Referenceable, BaseTensor):
|
|
167
177
|
self._on_first_use(self)
|
168
178
|
self._on_first_use = None
|
169
179
|
|
170
|
-
def to_mesh(
|
180
|
+
def to_mesh(
|
181
|
+
self,
|
182
|
+
mesh: Union["DeviceMesh", "HasDeviceMesh"],
|
183
|
+
stream: Optional["Stream"] = None,
|
184
|
+
):
|
171
185
|
"""
|
172
186
|
Move data between one device mesh and another. Sizes of named dimensions must match.
|
173
187
|
If mesh has dimensions that self.mesh does not, it will broadcast to those dimensions.
|
@@ -177,6 +191,8 @@ class Tensor(Referenceable, BaseTensor):
|
|
177
191
|
t.slice_mesh(batch=0).to_mesh(t.mesh)
|
178
192
|
|
179
193
|
"""
|
194
|
+
if isinstance(mesh, HasDeviceMesh):
|
195
|
+
mesh = mesh._device_mesh
|
180
196
|
return MeshSliceTensor(self, self.mesh).to_mesh(mesh, stream)
|
181
197
|
|
182
198
|
def reduce_(
|
@@ -344,7 +360,7 @@ class Tensor(Referenceable, BaseTensor):
|
|
344
360
|
)
|
345
361
|
return r
|
346
362
|
|
347
|
-
def slice_mesh(self, **kwargs:
|
363
|
+
def slice_mesh(self, **kwargs: Union[int, slice]) -> "MeshSliceTensor":
|
348
364
|
# technically a slice of a device mesh and a device mesh are not same thing
|
349
365
|
# because a device mesh also has caches for doing collectives.
|
350
366
|
# but this is an easy way to create a MeshSliceTensor until we optimize
|
@@ -368,8 +384,13 @@ class MeshSliceTensor:
|
|
368
384
|
self.slicing = slicing
|
369
385
|
|
370
386
|
def to_mesh(
|
371
|
-
self,
|
387
|
+
self,
|
388
|
+
mesh: Union["DeviceMesh", "HasDeviceMesh"],
|
389
|
+
stream: Optional["Stream"] = None,
|
372
390
|
) -> "Tensor":
|
391
|
+
if isinstance(mesh, HasDeviceMesh):
|
392
|
+
mesh = mesh._device_mesh
|
393
|
+
|
373
394
|
if stream is None:
|
374
395
|
stream = self.tensor.stream
|
375
396
|
|
monarch/mesh_controller.py
CHANGED
@@ -11,7 +11,7 @@ import time
|
|
11
11
|
import traceback
|
12
12
|
from collections import deque
|
13
13
|
from logging import Logger
|
14
|
-
from typing import List, NamedTuple, Optional, Union
|
14
|
+
from typing import List, NamedTuple, Optional, TYPE_CHECKING, Union
|
15
15
|
|
16
16
|
import torch.utils._python_dispatch
|
17
17
|
|
@@ -24,7 +24,13 @@ from monarch._rust_bindings.monarch_extension.mesh_controller import _Controller
|
|
24
24
|
from monarch._rust_bindings.monarch_hyperactor.proc import ( # @manual=//monarch/monarch_extension:monarch_extension
|
25
25
|
ActorId,
|
26
26
|
)
|
27
|
-
|
27
|
+
|
28
|
+
if TYPE_CHECKING:
|
29
|
+
from monarch._rust_bindings.monarch_hyperactor.proc_mesh import (
|
30
|
+
ProcMesh as HyProcMesh,
|
31
|
+
)
|
32
|
+
from monarch.proc_mesh import ProcMesh
|
33
|
+
|
28
34
|
from monarch._rust_bindings.monarch_hyperactor.shape import Point
|
29
35
|
|
30
36
|
from monarch._rust_bindings.monarch_messages.debugger import DebuggerAction
|
@@ -33,7 +39,6 @@ from monarch.common.controller_api import LogMessage, MessageResult
|
|
33
39
|
from monarch.common.device_mesh import DeviceMesh, no_mesh
|
34
40
|
from monarch.common.invocation import DeviceException, RemoteException
|
35
41
|
from monarch.controller.debugger import read as debugger_read, write as debugger_write
|
36
|
-
from monarch.proc_mesh import ProcMesh
|
37
42
|
from monarch.rust_local_mesh import _get_worker_exec_info
|
38
43
|
from pyre_extensions import none_throws
|
39
44
|
|
@@ -41,7 +46,7 @@ logger: Logger = logging.getLogger(__name__)
|
|
41
46
|
|
42
47
|
|
43
48
|
class Controller(_Controller):
|
44
|
-
def __init__(self, workers: HyProcMesh) -> None:
|
49
|
+
def __init__(self, workers: "HyProcMesh") -> None:
|
45
50
|
super().__init__()
|
46
51
|
# Buffer for messages unrelated to debugging that are received while a
|
47
52
|
# debugger session is active.
|
@@ -250,7 +255,7 @@ class MeshClient(Client):
|
|
250
255
|
self.inner.drain_and_stop()
|
251
256
|
|
252
257
|
|
253
|
-
def spawn_tensor_engine(proc_mesh: ProcMesh) -> DeviceMesh:
|
258
|
+
def spawn_tensor_engine(proc_mesh: "ProcMesh") -> DeviceMesh:
|
254
259
|
# This argument to Controller
|
255
260
|
# is currently only used for debug printing. It should be fixed to
|
256
261
|
# report the proc ID instead of the rank it currently does.
|
monarch/monarch_controller
CHANGED
Binary file
|
monarch/proc_mesh.py
CHANGED
@@ -7,8 +7,22 @@
|
|
7
7
|
# pyre-strict
|
8
8
|
|
9
9
|
import sys
|
10
|
+
from contextlib import AbstractContextManager
|
11
|
+
|
12
|
+
from typing import (
|
13
|
+
Any,
|
14
|
+
cast,
|
15
|
+
Dict,
|
16
|
+
List,
|
17
|
+
Optional,
|
18
|
+
Sequence,
|
19
|
+
Type,
|
20
|
+
TYPE_CHECKING,
|
21
|
+
TypeVar,
|
22
|
+
)
|
10
23
|
|
11
|
-
|
24
|
+
if TYPE_CHECKING:
|
25
|
+
import torch
|
12
26
|
|
13
27
|
import monarch
|
14
28
|
from monarch import ActorFuture as Future
|
@@ -24,7 +38,9 @@ from monarch._rust_bindings.monarch_hyperactor.shape import Shape, Slice
|
|
24
38
|
from monarch.actor_mesh import _Actor, _ActorMeshRefImpl, Actor, ActorMeshRef
|
25
39
|
|
26
40
|
from monarch.common._device_utils import _local_device_count
|
41
|
+
from monarch.common.device_mesh import DeviceMesh
|
27
42
|
from monarch.common.shape import MeshTrait
|
43
|
+
from monarch.mesh_controller import spawn_tensor_engine
|
28
44
|
from monarch.rdma import RDMAManager
|
29
45
|
|
30
46
|
T = TypeVar("T")
|
@@ -45,25 +61,43 @@ def _allocate_blocking(alloc: Alloc) -> "ProcMesh":
|
|
45
61
|
|
46
62
|
|
47
63
|
class ProcMesh(MeshTrait):
|
48
|
-
def __init__(
|
64
|
+
def __init__(
|
65
|
+
self,
|
66
|
+
hy_proc_mesh: HyProcMesh,
|
67
|
+
_mock_shape: Optional[Shape] = None,
|
68
|
+
_device_mesh: Optional[DeviceMesh] = None,
|
69
|
+
) -> None:
|
49
70
|
self._proc_mesh = hy_proc_mesh
|
71
|
+
self._mock_shape: Optional[Shape] = _mock_shape
|
50
72
|
self._mailbox: Mailbox = self._proc_mesh.client
|
51
|
-
self._rdma_manager: RDMAManager =
|
52
|
-
|
53
|
-
|
73
|
+
self._rdma_manager: Optional[RDMAManager] = None
|
74
|
+
self._maybe_device_mesh: Optional[DeviceMesh] = _device_mesh
|
75
|
+
if _mock_shape is None:
|
76
|
+
self._rdma_manager = self._spawn_blocking("rdma_manager", RDMAManager)
|
77
|
+
|
78
|
+
@property
|
79
|
+
def _shape(self) -> Shape:
|
80
|
+
return self._proc_mesh.shape if self._mock_shape is None else self._mock_shape
|
54
81
|
|
55
82
|
@property
|
56
83
|
def _ndslice(self) -> Slice:
|
57
|
-
return self.
|
84
|
+
return self._shape.ndslice
|
58
85
|
|
59
86
|
@property
|
60
87
|
def _labels(self) -> List[str]:
|
61
|
-
return self.
|
88
|
+
return self._shape.labels
|
62
89
|
|
63
90
|
def _new_with_shape(self, shape: Shape) -> "ProcMesh":
|
64
|
-
|
91
|
+
device_mesh = (
|
92
|
+
None
|
93
|
+
if self._device_mesh is None
|
94
|
+
else self._device_mesh._new_with_shape(shape)
|
95
|
+
)
|
96
|
+
return ProcMesh(self._proc_mesh, _mock_shape=shape, _device_mesh=device_mesh)
|
65
97
|
|
66
98
|
def spawn(self, name: str, Class: Type[T], *args: Any, **kwargs: Any) -> Future[T]:
|
99
|
+
if self._mock_shape is not None:
|
100
|
+
raise NotImplementedError("NYI: spawn on slice of a proc mesh.")
|
67
101
|
return Future(
|
68
102
|
lambda: self._spawn_nonblocking(name, Class, *args, **kwargs),
|
69
103
|
lambda: self._spawn_blocking(name, Class, *args, **kwargs),
|
@@ -120,6 +154,26 @@ class ProcMesh(MeshTrait):
|
|
120
154
|
service._create(args, kwargs)
|
121
155
|
return cast(T, service)
|
122
156
|
|
157
|
+
@property
|
158
|
+
def _device_mesh(self) -> "DeviceMesh":
|
159
|
+
if self._maybe_device_mesh is None:
|
160
|
+
if self._mock_shape is not None:
|
161
|
+
raise NotImplementedError(
|
162
|
+
"NYI: activating a proc mesh must first happen on the root proc_mesh until we fix spawning on submeshes."
|
163
|
+
)
|
164
|
+
self._maybe_device_mesh = spawn_tensor_engine(self)
|
165
|
+
return self._maybe_device_mesh
|
166
|
+
|
167
|
+
# pyre-ignore
|
168
|
+
def activate(self) -> AbstractContextManager:
|
169
|
+
return self._device_mesh.activate()
|
170
|
+
|
171
|
+
def rank_tensor(self, dim: str | Sequence[str]) -> "torch.Tensor":
|
172
|
+
return self._device_mesh.rank(dim)
|
173
|
+
|
174
|
+
def rank_tensors(self) -> Dict[str, "torch.Tensor"]:
|
175
|
+
return self._device_mesh.ranks
|
176
|
+
|
123
177
|
|
124
178
|
async def local_proc_mesh_nonblocking(
|
125
179
|
*, gpus: Optional[int] = None, hosts: int = 1
|
monarch/sim_mesh.py
CHANGED
@@ -201,9 +201,11 @@ class Bootstrap:
|
|
201
201
|
|
202
202
|
proxy_addr = proxy_addr or f"unix!@{_random_id()}-proxy"
|
203
203
|
self.bootstrap_addr: str = f"sim!unix!@system,{proxy_addr}"
|
204
|
-
|
204
|
+
|
205
|
+
client_proxy_addr = f"unix!@{_random_id()}-proxy"
|
206
|
+
self.client_listen_addr: str = f"sim!unix!@client,{client_proxy_addr}"
|
205
207
|
self.client_bootstrap_addr: str = (
|
206
|
-
f"sim!unix!@client,{
|
208
|
+
f"sim!unix!@client,{client_proxy_addr},unix!@system,{proxy_addr}"
|
207
209
|
)
|
208
210
|
bootstrap_simulator_backend(self.bootstrap_addr, proxy_addr, world_size)
|
209
211
|
|
@@ -25,6 +25,7 @@ def proc_mesh(
|
|
25
25
|
meshes: list[str] = _DEFAULT_MESHES,
|
26
26
|
env: Optional[dict[str, str]] = None,
|
27
27
|
port: int = mesh_spec.DEFAULT_REMOTE_ALLOCATOR_PORT,
|
28
|
+
program: str = "monarch_bootstrap", # installed with monarch wheel (as console script)
|
28
29
|
) -> specs.AppDef:
|
29
30
|
"""
|
30
31
|
Args:
|
@@ -33,6 +34,7 @@ def proc_mesh(
|
|
33
34
|
meshes: list of mesh specs of the form "{name}:{num_hosts}:{host_type}"
|
34
35
|
env: environment variables to be passed to the main command (e.g. ENV1=v1,ENV2=v2,ENV3=v3)
|
35
36
|
port: the port that the remote process allocator runs on (must be reachable from the client)
|
37
|
+
program: path to the binary that the remote process allocator spawns on an allocation request
|
36
38
|
"""
|
37
39
|
|
38
40
|
appdef = specs.AppDef(name)
|
@@ -41,11 +43,10 @@ def proc_mesh(
|
|
41
43
|
mesh_role = specs.Role(
|
42
44
|
name=mesh.name,
|
43
45
|
image=image,
|
44
|
-
entrypoint="process_allocator", #
|
46
|
+
entrypoint="process_allocator", # run "cargo install monarch_hyperactor" to get this binary
|
45
47
|
args=[
|
46
|
-
"mesh-worker",
|
47
48
|
f"--port={port}",
|
48
|
-
"--program=
|
49
|
+
f"--program={program}",
|
49
50
|
],
|
50
51
|
num_replicas=mesh.num_hosts,
|
51
52
|
resource=specs.resource(h=mesh.host_type),
|
tests/test_python_actors.py
CHANGED
@@ -391,10 +391,13 @@ def test_rust_binding_modules_correct() -> None:
|
|
391
391
|
check(bindings, "monarch._rust_bindings")
|
392
392
|
|
393
393
|
|
394
|
-
|
394
|
+
two_gpu = pytest.mark.skipif(
|
395
395
|
torch.cuda.device_count() < 2,
|
396
396
|
reason="Not enough GPUs, this test requires at least 2 GPUs",
|
397
397
|
)
|
398
|
+
|
399
|
+
|
400
|
+
@two_gpu
|
398
401
|
def test_tensor_engine() -> None:
|
399
402
|
pm = proc_mesh(gpus=2).get()
|
400
403
|
|
@@ -591,3 +594,20 @@ async def test_actor_tls() -> None:
|
|
591
594
|
|
592
595
|
assert 2 == await am.get.call_one()
|
593
596
|
# assert 4 == await am.get_async.call_one()
|
597
|
+
|
598
|
+
|
599
|
+
@two_gpu
|
600
|
+
def test_proc_mesh_tensor_engine() -> None:
|
601
|
+
pm = proc_mesh(gpus=2).get()
|
602
|
+
with pm.activate():
|
603
|
+
f = 10 * pm.rank_tensor("gpus").cuda()
|
604
|
+
a = monarch.inspect(f, hosts=0, gpus=0)
|
605
|
+
b = monarch.inspect(f, hosts=0, gpus=1)
|
606
|
+
|
607
|
+
one = pm.slice(gpus=1)
|
608
|
+
with one.activate():
|
609
|
+
sliced_b = monarch.slice_mesh(f, gpus=1).to_mesh(one)
|
610
|
+
c = monarch.inspect(sliced_b * 10)
|
611
|
+
assert a == 0
|
612
|
+
assert b == 10
|
613
|
+
assert c == 100
|
{torchmonarch_nightly-2025.6.16.dist-info → torchmonarch_nightly-2025.6.17.dist-info}/RECORD
RENAMED
@@ -1,5 +1,5 @@
|
|
1
1
|
monarch/__init__.py,sha256=iUvWHc0-7Q2tovRoRxOIiA3TsefMXCbWl-jEfQ2djew,6897
|
2
|
-
monarch/_rust_bindings.so,sha256=
|
2
|
+
monarch/_rust_bindings.so,sha256=BIOc6AH_iVbNSGCnF3de-4l9bp82KlPwWxBWUCMKf40,40709968
|
3
3
|
monarch/_testing.py,sha256=jOIOG6jcZBzvEvG_DwSnwCkaMVXvSun6sJAG6nXemww,7859
|
4
4
|
monarch/actor_mesh.py,sha256=nAW65WFEWMJWCv8zuH9GSOyTNXwFN8QNqZxMZTuSYxw,25537
|
5
5
|
monarch/allocator.py,sha256=ylvYTf31o-PT385cYJPhi17uNbC4yl_RAraqD0fVe4g,4112
|
@@ -10,13 +10,13 @@ monarch/fetch.py,sha256=61jxo7sx4QNUTkc0_rF5NaJROen4tKbAaiIjrXWLOvg,1705
|
|
10
10
|
monarch/future.py,sha256=lcdFEe7m1shYPPuvZ1RkS6JUIChEKGBWe3v7x_nu4Hg,731
|
11
11
|
monarch/gradient_generator.py,sha256=Rl3dmXGceTdCc1mYBg2JciR88ywGPnW7TVkL86KwqEA,6366
|
12
12
|
monarch/memory.py,sha256=ol86dBhFAJqg78iF25-BuK0wuwj1onR8FIioZ_B0gjw,1377
|
13
|
-
monarch/mesh_controller.py,sha256=
|
14
|
-
monarch/monarch_controller,sha256=
|
13
|
+
monarch/mesh_controller.py,sha256=am1QP7dvn0OH1z9ADSKm41APs1HY_dHcBAhOVP-QDmE,10427
|
14
|
+
monarch/monarch_controller,sha256=yEs4PlEWgSMnRUSNWyFKvT5LmpkJ9p7GRi6WF-nsdM0,20347496
|
15
15
|
monarch/notebook.py,sha256=zu9MKDFKf1-rCM2TqFSRJjMBeiWuKcJSyUFLvoZRQzs,25949
|
16
16
|
monarch/opaque_module.py,sha256=oajOu_WD1hD4hxE8HDdO-tvWY7KDHWd7VaAhJEa5L2I,10446
|
17
17
|
monarch/opaque_object.py,sha256=IVpll4pyuKZMo_EnPh4s0qnx8RlAcJrJ1yoLX6E75wQ,2782
|
18
18
|
monarch/pdb_wrapper.py,sha256=gm46AZnfR4amH1vYFWnWivEv5MaU3Nb6KIWjSM8KjWM,4052
|
19
|
-
monarch/proc_mesh.py,sha256=
|
19
|
+
monarch/proc_mesh.py,sha256=5RaKPQZJD-sKzEAbqMorKsZA7SOUzIflk3Fn6cdfzvw,8607
|
20
20
|
monarch/profiler.py,sha256=TQ9fnVM8H7smBWtYdB_6Irtzz8DBOmcp7U1T3wlUmco,4911
|
21
21
|
monarch/python_local_mesh.py,sha256=YsureIzR9uGlNVrKd4vRghxOXBeYabkt9lICRErfRAI,3536
|
22
22
|
monarch/random.py,sha256=f9QR7Esu4Vxqxs-KCf5QYyVqlWvXJ3-UtG90L_h4j40,1527
|
@@ -24,7 +24,7 @@ monarch/rdma.py,sha256=1pNh11S_FWeETRgkdUpauTMUlodrRohIq1UfQjKVnN8,5418
|
|
24
24
|
monarch/remote_class.py,sha256=-OAowzU1aDP6i4ik_SjXntVUC9h4dqAzgqwohkQ6Grc,4167
|
25
25
|
monarch/rust_backend_mesh.py,sha256=1htC62of4MgFtkezWGlsxSFtKJdc0CIeqeSuOx7yu3M,9944
|
26
26
|
monarch/rust_local_mesh.py,sha256=7ASptybn3wy4J7eoBc7LhGW4j4AA6bigl5Kuhyflw8s,47405
|
27
|
-
monarch/sim_mesh.py,sha256=
|
27
|
+
monarch/sim_mesh.py,sha256=kDsbubv28YFg9ZQN4urt3oJGzR3CnnUiATnjUiSxrkE,12256
|
28
28
|
monarch/telemetry.py,sha256=7JUZWaoD2Yn5Ae_7kNhkLFRBLYaSGfH071_m_qfVehI,525
|
29
29
|
monarch/tensor_worker_main.py,sha256=Nbarl2sJKIddLeaRFsaUnqOerLHjzggUr9SqCr2_GYI,8300
|
30
30
|
monarch/tensorboard.py,sha256=MnLgH5lbqeUJauEuirEgR6L_qYl2NGdtwZOWIAuOZao,2587
|
@@ -50,7 +50,7 @@ monarch/common/client.py,sha256=axo37s_z17nYQGOZG5fi_0zUEJ_8qw7INjs-Kw2vaVo,2493
|
|
50
50
|
monarch/common/constants.py,sha256=ohvsVYMpfeWopv3KXDAeHWDFLukwc-OY37VRxpKNBE8,300
|
51
51
|
monarch/common/context_manager.py,sha256=GOeyaFbyCqvQmkJ0oI7q6IxRd8_0mVyYKZRccI8iaug,1067
|
52
52
|
monarch/common/controller_api.py,sha256=djGkK5aSd-V6pBkr3uBCXbfJv3OKf2o2VbBXJgFF2WI,3202
|
53
|
-
monarch/common/device_mesh.py,sha256=
|
53
|
+
monarch/common/device_mesh.py,sha256=jo_qEIRlX6KzBlP2BUSS4XEELL-6_H08a47bUz8QYsA,12159
|
54
54
|
monarch/common/fake.py,sha256=h57Cggz2qXNqImZ7yPuOZOSe9-l9i553ki1z-YHlgQA,1801
|
55
55
|
monarch/common/function.py,sha256=V8kdgSRTvild2SpcewWa5IETX3QiWDZQ2BEIDFa5zz8,4374
|
56
56
|
monarch/common/function_caching.py,sha256=HVdbWtv6Eea7ENMWi8iv36w1G1TaVuUJhkUX_JxGx5A,5060
|
@@ -67,9 +67,9 @@ monarch/common/recording.py,sha256=hoI9VY_FyW_xVx-jmfsKydqX5vW2GulwcDWsBdUVOm8,4
|
|
67
67
|
monarch/common/reference.py,sha256=O26lkzEeVwj0S1xEy-OLqdHVnACmmlbQCUmXRrW4n1Q,938
|
68
68
|
monarch/common/remote.py,sha256=qZWXkShX20l07TseQSpVECh2yXZaVKYUvQXkeEM-zvY,9220
|
69
69
|
monarch/common/selection.py,sha256=lpWFbZs3ArYy29e-53eoAVAjQFksf1RvZz9NvM0CUW4,308
|
70
|
-
monarch/common/shape.py,sha256=
|
70
|
+
monarch/common/shape.py,sha256=B-7DI768ZhT8ECUNCJcI7DfCB7iDFGFH0r-HmXaAfcM,8296
|
71
71
|
monarch/common/stream.py,sha256=_ejoxafHtdD10lLzznRCXKwrkZ_ZH9k_VTgiA5yfBrI,3583
|
72
|
-
monarch/common/tensor.py,sha256=
|
72
|
+
monarch/common/tensor.py,sha256=G26E8-qv7HnjZfz3Ka5a-u3vb6DadcDChOn6wpjkeZo,29273
|
73
73
|
monarch/common/tensor_factory.py,sha256=qm8NZx-5ezMAFjNLiXQvb66okm5XgdboB_GRarGOdN0,801
|
74
74
|
monarch/common/tree.py,sha256=1DG3siiE7ixBV6v5cwN8RT_17aJhYZTE-L3i7wZe2_c,2282
|
75
75
|
monarch/controller/__init__.py,sha256=J8qjUOysmcMAek2KFN13mViOXZxTYc5vCrF02t3VuFU,223
|
@@ -110,7 +110,7 @@ monarch/tools/cli.py,sha256=66F7dr90bh27P3kOCmxwJkVmWv2v4wBrkifvwqwUwFE,4967
|
|
110
110
|
monarch/tools/commands.py,sha256=BfmXndJmU_cZP4cMPlknkxGca1NjqYd8_ReDePWksXw,6908
|
111
111
|
monarch/tools/mesh_spec.py,sha256=JLykhgy1dClXiNbH1Qsl2fX5MbqplQAhl8LGoragvbo,3702
|
112
112
|
monarch/tools/components/__init__.py,sha256=J8qjUOysmcMAek2KFN13mViOXZxTYc5vCrF02t3VuFU,223
|
113
|
-
monarch/tools/components/hyperactor.py,sha256=
|
113
|
+
monarch/tools/components/hyperactor.py,sha256=Ryi1X07VLcaQVlpc4af65JNBbZtOb9IAlKxSKMZ1AW4,2120
|
114
114
|
monarch/tools/config/__init__.py,sha256=OPSflEmJB2zxAaRVzzWSWXV5M5vlknLgpulGdW1ze5U,510
|
115
115
|
monarch/tools/config/defaults.py,sha256=34a3HQhyXqt9qR2SYMVCROoNsnwk37rIwLXXiKwqtog,1894
|
116
116
|
monarch/worker/__init__.py,sha256=J8qjUOysmcMAek2KFN13mViOXZxTYc5vCrF02t3VuFU,223
|
@@ -144,7 +144,7 @@ tests/test_future.py,sha256=cXzaNi2YDwVyjR541ScXmgktX1YFsKzbl8wep0DMVbk,3032
|
|
144
144
|
tests/test_grad_generator.py,sha256=p4Pm4kMEeGldt2jUVAkGKCB0mLccKI28pltH6OTGbQA,3412
|
145
145
|
tests/test_mock_cuda.py,sha256=5hisElxeLJ5MHw3KM9gwxBiXiMaG-Rm382u3AsQcDOI,3068
|
146
146
|
tests/test_pdb_actor.py,sha256=5KJhuhcZDPWMdjC6eAtDdwnz1W7jNFXvIrMSFaCWaPw,3858
|
147
|
-
tests/test_python_actors.py,sha256=
|
147
|
+
tests/test_python_actors.py,sha256=YiDJaMFoQ3xPGq602QTuhRM8CsgZo5pttKMKAnLm6io,17773
|
148
148
|
tests/test_remote_functions.py,sha256=5nxYB8dfA9NT9f9Od9O3htgQtPbiRNiXZ1Kgtn75sOQ,50056
|
149
149
|
tests/test_rust_backend.py,sha256=94S3R995ZkyIhEiBsM5flcjf5X7bscEAHBtInbTRFe8,7776
|
150
150
|
tests/test_signal_safe_block_on.py,sha256=bmal0XgzJowZXJV6T1Blow5a-vZluYWusCThLMGxyTE,3336
|
@@ -154,9 +154,9 @@ tests/simulator/test_profiling.py,sha256=TGYCfzTLdkpIwnOuO6KApprmrgPIRQe60KRX3wk
|
|
154
154
|
tests/simulator/test_simulator.py,sha256=LO8lA0ssY-OGEBL5ipEu74f97Y765TEwfUOv-DtIptM,14568
|
155
155
|
tests/simulator/test_task.py,sha256=ipqBDuDAysuo1xOB9S5psaFvwe6VATD43IovCTSs0t4,2327
|
156
156
|
tests/simulator/test_worker.py,sha256=QrWWIJ3HDgDLkBPRc2mwYPlOQoXQcj1qRfc0WUfKkFY,3507
|
157
|
-
torchmonarch_nightly-2025.6.
|
158
|
-
torchmonarch_nightly-2025.6.
|
159
|
-
torchmonarch_nightly-2025.6.
|
160
|
-
torchmonarch_nightly-2025.6.
|
161
|
-
torchmonarch_nightly-2025.6.
|
162
|
-
torchmonarch_nightly-2025.6.
|
157
|
+
torchmonarch_nightly-2025.6.17.dist-info/licenses/LICENSE,sha256=e0Eotbf_rHOYPuEUlppIbvwy4SN98CZnl_hqwvbDA4Q,1530
|
158
|
+
torchmonarch_nightly-2025.6.17.dist-info/METADATA,sha256=xnYwQ3UlDfJcHRWA86w2X71Fzl0Eddvs4u4UKveyIuo,2772
|
159
|
+
torchmonarch_nightly-2025.6.17.dist-info/WHEEL,sha256=_wZSFk0d90K9wOBp8Q-UGxshyiJ987JoPiyUBNC6VLk,104
|
160
|
+
torchmonarch_nightly-2025.6.17.dist-info/entry_points.txt,sha256=sqfQ16oZqjEvttUI-uj9BBXIIE6jt05bYFSmy-2hyXI,106
|
161
|
+
torchmonarch_nightly-2025.6.17.dist-info/top_level.txt,sha256=E-ZssZzyM17glpVrh-S9--qJ-w9p2EjuYOuNw9tQ4Eg,33
|
162
|
+
torchmonarch_nightly-2025.6.17.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
{torchmonarch_nightly-2025.6.16.dist-info → torchmonarch_nightly-2025.6.17.dist-info}/top_level.txt
RENAMED
File without changes
|