Instructions to use Motif-Technologies/optimizer with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Kernels
How to use Motif-Technologies/optimizer with Kernels:
# !pip install kernels from kernels import get_kernel # a version (or an explicit revision) is required; see the "Files and versions" tab for the available ones kernel = get_kernel("Motif-Technologies/optimizer", version=1) - Notebooks
- Google Colab
- Kaggle
Commit ·
39c42e0
1
Parent(s): 35894d1
consider multi node
Browse files
torch-ext/optimizer/muon.py
CHANGED
|
@@ -112,6 +112,7 @@ def _all2all_gather(params, param_to_state, rank, comm_stream, none_grad,
|
|
| 112 |
for p in params:
|
| 113 |
state = param_to_state[id(p)]
|
| 114 |
dst = state.worker_rank
|
|
|
|
| 115 |
shard_elems = split_elems_for_src(p, state, rank, num_ranks)
|
| 116 |
g = p.grad
|
| 117 |
g = g.to_local().to(COMM_DTYPE).contiguous().view(-1)
|
|
@@ -601,11 +602,13 @@ class Muon(torch.optim.Optimizer):
|
|
| 601 |
if mesh is None:
|
| 602 |
mesh = p.device_mesh
|
| 603 |
shard_mesh, process_group = self.get_shard_mesh(p, self.rank)
|
|
|
|
| 604 |
elif mesh != p.device_mesh:
|
| 605 |
raise ValueError("All parameters must be on the same mesh.")
|
| 606 |
|
|
|
|
| 607 |
param_to_state[id(p)] = _muon_state()
|
| 608 |
-
param_to_state[id(p)].worker_rank = shard_mesh[round_robin].item()
|
| 609 |
param_to_state[id(p)].process_group = process_group
|
| 610 |
qk_clip_state = self.get_qk_clip_info(n, qk_logits)
|
| 611 |
param_to_state[id(p)].qk_clip_state = qk_clip_state
|
|
|
|
| 112 |
for p in params:
|
| 113 |
state = param_to_state[id(p)]
|
| 114 |
dst = state.worker_rank
|
| 115 |
+
assert dst < num_ranks
|
| 116 |
shard_elems = split_elems_for_src(p, state, rank, num_ranks)
|
| 117 |
g = p.grad
|
| 118 |
g = g.to_local().to(COMM_DTYPE).contiguous().view(-1)
|
|
|
|
| 602 |
if mesh is None:
|
| 603 |
mesh = p.device_mesh
|
| 604 |
shard_mesh, process_group = self.get_shard_mesh(p, self.rank)
|
| 605 |
+
self.rank = dist.get_rank(group=process_group)
|
| 606 |
elif mesh != p.device_mesh:
|
| 607 |
raise ValueError("All parameters must be on the same mesh.")
|
| 608 |
|
| 609 |
+
num_ranks = dist.get_world_size(group=process_group)
|
| 610 |
param_to_state[id(p)] = _muon_state()
|
| 611 |
+
param_to_state[id(p)].worker_rank = shard_mesh[round_robin].item() % num_ranks
|
| 612 |
param_to_state[id(p)].process_group = process_group
|
| 613 |
qk_clip_state = self.get_qk_clip_info(n, qk_logits)
|
| 614 |
param_to_state[id(p)].qk_clip_state = qk_clip_state
|