From eaed92952cc43315d195c0ab45d2996e48a98886 Mon Sep 17 00:00:00 2001 From: ciaranbor <81697641+ciaranbor@users.noreply.github.com> Date: Thu, 26 Feb 2026 10:59:36 +0000 Subject: [PATCH] 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(