← back to Exo
Use tmpdir for coordination file (#1624)
eaed92952cc43315d195c0ab45d2996e48a98886 · 2026-02-26 10:59:36 +0000 · ciaranbor
## Motivation
Coordination files for MLX distributed init were written to the current
working directory (./hosts_*.json)
## Changes
- Move coordination file creation to a tempfile.TemporaryDirectory(),
which auto-cleans on context manager exit
Files touched
M src/exo/worker/engines/mlx/utils_mlx.py
Diff
commit eaed92952cc43315d195c0ab45d2996e48a98886
Author: ciaranbor <81697641+ciaranbor@users.noreply.github.com>
Date: Thu Feb 26 10:59:36 2026 +0000
Use tmpdir for coordination file (#1624)
## Motivation
Coordination files for MLX distributed init were written to the current
working directory (./hosts_*.json)
## Changes
- Move coordination file creation to a tempfile.TemporaryDirectory(),
which auto-cleans on context manager exit
---
src/exo/worker/engines/mlx/utils_mlx.py | 17 +++++------------
1 file changed, 5 insertions(+), 12 deletions(-)
diff --git a/src/exo/worker/engines/mlx/utils_mlx.py b/src/exo/worker/engines/mlx/utils_mlx.py
index 78f3be20..3199d6d9 100644
--- a/src/exo/worker/engines/mlx/utils_mlx.py
+++ b/src/exo/worker/engines/mlx/utils_mlx.py
@@ -2,6 +2,7 @@ import json
import os
import re
import sys
+import tempfile
import time
from pathlib import Path
from typing import Any, cast
@@ -98,14 +99,13 @@ def mlx_distributed_init(
rank = bound_instance.bound_shard.device_rank
logger.info(f"Starting initialization for rank {rank}")
- coordination_file = None
- try:
+ with tempfile.TemporaryDirectory() as tmpdir:
+ coordination_file = str(
+ Path(tmpdir) / f"hosts_{bound_instance.instance.instance_id}_{rank}.json"
+ )
# TODO: singleton instances
match bound_instance.instance:
case MlxRingInstance(hosts_by_node=hosts_by_node, ephemeral_port=_):
- coordination_file = (
- f"./hosts_{bound_instance.instance.instance_id}_{rank}.json"
- )
hosts_for_node = hosts_by_node[bound_instance.bound_node_id]
hosts_json = HostList.from_hosts(hosts_for_node).model_dump_json()
@@ -128,9 +128,6 @@ def mlx_distributed_init(
jaccl_devices[i][i] is None for i in range(len(jaccl_devices))
)
# Use RDMA connectivity matrix
- coordination_file = (
- f"./hosts_{bound_instance.instance.instance_id}_{rank}.json"
- )
jaccl_devices_json = json.dumps(jaccl_devices)
with open(coordination_file, "w") as f:
@@ -150,10 +147,6 @@ def mlx_distributed_init(
logger.info(f"Rank {rank} mlx distributed initialization complete")
return group
- finally:
- with contextlib.suppress(FileNotFoundError):
- if coordination_file:
- os.remove(coordination_file)
def initialize_mlx(
← ba611f9c Revert "report macmon failures more aggressively (#1618)" (#
·
back to Exo
·
move messaging into rust (#1549) db73c4fd →