Source code for xuance.mindspore.utils.device

import os
import platform
import xuance
import mindspore as ms


[docs] def set_device(expected_device: str): """ Set the computing device for a given deep learning framework. Args: dl_toolbox (str): The deep learning framework to use. Options: "torch", "tensorflow", "mindspore". expected_device (str): The desired computing device. Options: "cuda", "GPU", "gpu", "Ascend", "cpu", "CPU. Returns: str: The assigned computing device, which may differ from `expected_device` if the requested device is unavailable. """ device = expected_device if expected_device.upper() == "GPU": try: ms.set_context(device_target="GPU") except: device = "CPU" print("WARNING: GPU for MindSpore is not available, set the device as 'CPU'.") elif expected_device.upper() == "ASCEND": try: ms.set_context(device_target="Ascend") except: device = "CPU" print("WARNING: Ascend for MindSpore is not available, set the device as 'CPU'.") elif expected_device.upper() == "CPU": device = "CPU" else: device = "CPU" print(f"WARNING: the device name {expected_device} is invalid, set the device as 'CPU'.") return device
[docs] def collect_device_info( rank: int = 0, agent=None, ) -> dict: """Collect runtime device / system info for reproducibility (MindSpore). Returns a JSON-serializable dict. """ info = { "Platform": platform.platform(), "Python": platform.python_version(), "XuanCe": xuance.__version__, "MindSpore": getattr(ms, "__version__", "unknown"), "PID": os.getpid(), "Rank": rank, # Helpful for debugging device visibility in different launchers/CI. "cuda_visible_devices": os.environ.get("CUDA_VISIBLE_DEVICES", None), "ascend_visible_devices": os.environ.get("ASCEND_VISIBLE_DEVICES", None), "device_id_env": os.environ.get("DEVICE_ID", None), "rank_id_env": os.environ.get("RANK_ID", None), "rank_size_env": os.environ.get("RANK_SIZE", None), } try: # MindSpore runtime device context (source of truth). device_target = ms.context.get_context("device_target") # e.g., "CPU", "GPU", "Ascend" device_id = ms.context.get_context("device_id") # int or None info["device_target"] = str(device_target) info["device_id"] = int(device_id) if device_id is not None else None # Simple availability flags derived from device_target. # (MindSpore does not provide a universal cuda.is_available() like PyTorch.) tgt = str(device_target).upper() info["GPU_Available"] = (tgt == "GPU") info["Ascend_Available"] = (tgt == "ASCEND") except Exception as e: # Keep it minimal but valid if context querying fails. info["device_info_error"] = repr(e) # Best-effort: record configured device in agent/config if your framework defines it. try: if agent is not None: cfg = getattr(agent, "config", None) if cfg is not None and hasattr(cfg, "device"): info["configured_device"] = str(getattr(cfg, "device")) except Exception: pass return info