--- name: gpu_info kind: function lang: py domain: ml version: "1.0.0" purity: impure signature: "def gpu_info() -> list[dict]" description: "Consulta nvidia-smi para obtener informacion de cada GPU NVIDIA: nombre, VRAM total y libre, version de driver y CUDA. Devuelve lista vacia si nvidia-smi no esta disponible, sin lanzar excepcion." tags: [gpu, nvidia, cuda, vram, hardware, probe, ml, nvidia-smi, pendiente-usar] uses_functions: [] uses_types: [] returns: [] returns_optional: false error_type: "error_go_core" imports: [] params: [] output: "lista de dicts por GPU con claves: index (int), name (str), vram_total_mb (int), vram_free_mb (int), driver_version (str), cuda_version (str). Lista vacia si nvidia-smi no esta disponible." tested: true tests: - "sin nvidia-smi devuelve lista vacia" - "formato CSV correcto devuelve lista con un dict por GPU" - "fila malformada en CSV se ignora sin excepcion" test_file_path: "python/functions/ml/tests/test_gpu_info.py" file_path: "python/functions/ml/gpu_info.py" --- ## Ejemplo ```python from ml.gpu_info import gpu_info gpus = gpu_info() # Sin nvidia-smi: [] # Con una GPU: # [ # { # "index": 0, # "name": "NVIDIA GeForce RTX 4090", # "vram_total_mb": 24564, # "vram_free_mb": 22000, # "driver_version": "535.183.01", # "cuda_version": "8.9" # } # ] for gpu in gpus: pct = 100 * (1 - gpu["vram_free_mb"] / gpu["vram_total_mb"]) print(f"GPU {gpu['index']}: {gpu['name']} — VRAM {pct:.1f}% usada") ``` ## Notas - Usa `--query-gpu=compute_cap` como aproximacion de la version CUDA soportada. El campo `cuda_version` del output es la compute capability (ej. "8.9"), no la version CUDA del driver. - Robusto a `FileNotFoundError` (nvidia-smi no instalado), `TimeoutExpired` (driver colgado), y `OSError`. - Para datos de torch (no nvidia-smi), usar `cuda_available`. - impure: consulta hardware y estado del sistema en tiempo de ejecucion.