Image-to-3DGS / utils /device.py
dgarch424's picture
Upload 20 files
bcf1530 verified
Raw
History Blame Contribute Delete
1.6 kB
"""
utils/device.py
───────────────
Hardware detection helpers used by every model loader.
"""
import logging
import torch
logger = logging.getLogger(__name__)
def best_device() -> torch.device:
"""Return the best available compute device."""
if torch.cuda.is_available():
dev = torch.device("cuda")
logger.info("Using CUDA: %s", torch.cuda.get_device_name(0))
elif torch.backends.mps.is_available():
dev = torch.device("mps")
logger.info("Using Apple MPS")
else:
dev = torch.device("cpu")
logger.info("Using CPU — inference will be slow")
return dev
def torch_dtype(device: torch.device) -> torch.dtype:
"""Choose float16 on GPU, float32 on CPU (avoids CPU fp16 ops)."""
return torch.float16 if device.type in ("cuda", "mps") else torch.float32
def vram_gb() -> float:
"""Return available VRAM in GB, 0.0 if no CUDA."""
if torch.cuda.is_available():
props = torch.cuda.get_device_properties(0)
return props.total_memory / (1024 ** 3)
return 0.0
def log_memory_stats() -> None:
if torch.cuda.is_available():
alloc = torch.cuda.memory_allocated() / (1024 ** 2)
reserved = torch.cuda.memory_reserved() / (1024 ** 2)
logger.debug("CUDA memory — allocated: %.1f MB reserved: %.1f MB", alloc, reserved)
def clear_cache() -> None:
"""Free GPU cache between pipeline stages."""
if torch.cuda.is_available():
torch.cuda.empty_cache()
import gc
gc.collect()