get-available-resources

Par mkurman · zorai

Cette skill doit être utilisée au début de toute tâche scientifique gourmande en ressources afin de détecter et de signaler les ressources système disponibles (cœurs CPU, GPU, mémoire, espace disque). Elle crée un fichier JSON contenant les informations sur les ressources ainsi que des recommandations stratégiques qui orientent les décisions relatives à l'approche computationnelle : recours au traitement parallèle (joblib, multiprocessing), au calcul out-of-core (Dask, Zarr), à l'accélération GPU (PyTorch, JAX) ou à des stratégies économes en mémoire. Utilisez cette skill avant de lancer des analyses, d'entraîner des modèles, de traiter de grands datasets ou toute tâche pour laquelle les contraintes en ressources sont déterminantes.

npx skills add https://github.com/mkurman/zorai --skill get-available-resources

Obtenir les ressources disponibles

Aperçu

Détectez les ressources informatiques disponibles et générez des recommandations stratégiques pour les tâches de calcul scientifique. Cette skill identifie automatiquement les capacités CPU, la disponibilité GPU (NVIDIA CUDA, AMD ROCm, Apple Silicon Metal), les contraintes mémoire et l'espace disque pour aider à prendre des décisions éclairées concernant les approches informatiques.

Quand utiliser cette skill

Utilisez cette skill de manière proactive avant toute tâche informatique intensive :

  • Avant l'analyse de données : Déterminez si les datasets peuvent être chargés en mémoire ou nécessitent un traitement hors-mémoire
  • Avant l'entraînement de modèles : Vérifiez si l'accélération GPU est disponible et quel backend utiliser
  • Avant le traitement parallèle : Identifiez le nombre optimal de workers pour joblib, multiprocessing ou Dask
  • Avant les opérations sur fichiers volumineux : Vérifiez l'espace disque suffisant et les stratégies de stockage appropriées
  • À l'initialisation du projet : Comprenez les capacités de base pour prendre des décisions architecturales

Scénarios d'exemple :

  • « Aide-moi à analyser ce dataset de génomique de 50 Go » → Utilisez d'abord cette skill pour déterminer si Dask/Zarr sont nécessaires
  • « Entraîne un réseau de neurones sur ces données » → Utilisez cette skill pour détecter les GPU disponibles et les backends
  • « Traite 10 000 fichiers en parallèle » → Utilisez cette skill pour déterminer le nombre optimal de workers
  • « Exécute une simulation informatiquement intensive » → Utilisez cette skill pour comprendre les contraintes de ressources

Fonctionnement de cette skill

Détection des ressources

La skill exécute scripts/detect_resources.py pour détecter automatiquement :

  1. Informations CPU

    • Nombre de cœurs physiques et logiques
    • Architecture et modèle du processeur
    • Informations de fréquence CPU
  2. Informations GPU

    • GPUs NVIDIA : Détection via nvidia-smi, signale la VRAM, la version du driver, la capacité de calcul
    • GPUs AMD : Détection via rocm-smi
    • Apple Silicon : Détecte les puces M1/M2/M3/M4 avec support Metal et mémoire unifiée
  3. Informations mémoire

    • RAM totale et disponible
    • Pourcentage d'utilisation mémoire actuel
    • Disponibilité de l'espace swap
  4. Informations d'espace disque

    • Espace disque total et disponible pour le répertoire de travail
    • Pourcentage d'utilisation actuel
  5. Informations du système d'exploitation

    • Type d'OS (macOS, Linux, Windows)
    • Version et release de l'OS
    • Version Python

Format de sortie

La skill génère un fichier .claude_resources.json dans le répertoire de travail actuel contenant :

{
  "timestamp": "2025-10-23T10:30:00",
  "os": {
    "system": "Darwin",
    "release": "25.0.0",
    "machine": "arm64"
  },
  "cpu": {
    "physical_cores": 8,
    "logical_cores": 8,
    "architecture": "arm64"
  },
  "memory": {
    "total_gb": 16.0,
    "available_gb": 8.5,
    "percent_used": 46.9
  },
  "disk": {
    "total_gb": 500.0,
    "available_gb": 200.0,
    "percent_used": 60.0
  },
  "gpu": {
    "nvidia_gpus": [],
    "amd_gpus": [],
    "apple_silicon": {
      "name": "Apple M2",
      "type": "Apple Silicon",
      "backend": "Metal",
      "unified_memory": true
    },
    "total_gpus": 1,
    "available_backends": ["Metal"]
  },
  "recommendations": {
    "parallel_processing": {
      "strategy": "high_parallelism",
      "suggested_workers": 6,
      "libraries": ["joblib", "multiprocessing", "dask"]
    },
    "memory_strategy": {
      "strategy": "moderate_memory",
      "libraries": ["dask", "zarr"],
      "note": "Consider chunking for datasets > 2GB"
    },
    "gpu_acceleration": {
      "available": true,
      "backends": ["Metal"],
      "suggested_libraries": ["pytorch-mps", "tensorflow-metal", "jax-metal"]
    },
    "large_data_handling": {
      "strategy": "disk_abundant",
      "note": "Sufficient space for large intermediate files"
    }
  }
}

Recommandations stratégiques

La skill génère des recommandations sensibles au contexte :

Recommandations de traitement parallèle :

  • Haut parallélisme (8+ cœurs) : Utilisez Dask, joblib ou multiprocessing avec workers = cœurs - 2
  • Parallélisme modéré (4-7 cœurs) : Utilisez joblib ou multiprocessing avec workers = cœurs - 1
  • Séquentiel (< 4 cœurs) : Préférez le traitement séquentiel pour éviter les frais généraux

Recommandations de stratégie mémoire :

  • Mémoire limitée (< 4 Go disponibles) : Utilisez Zarr, Dask ou H5py pour le traitement hors-mémoire
  • Mémoire modérée (4-16 Go disponibles) : Utilisez Dask/Zarr pour les datasets > 2 Go
  • Mémoire abondante (> 16 Go disponibles) : Pouvez charger la plupart des datasets directement en mémoire

Recommandations d'accélération GPU :

  • GPUs NVIDIA détectés : Utilisez PyTorch, TensorFlow, JAX, CuPy ou RAPIDS
  • GPUs AMD détectés : Utilisez PyTorch-ROCm ou TensorFlow-ROCm
  • Apple Silicon détecté : Utilisez PyTorch avec backend MPS, TensorFlow-Metal ou JAX-Metal
  • Aucun GPU détecté : Utilisez des bibliothèques optimisées pour CPU

Recommandations de gestion des données volumineuses :

  • Disque limité (< 10 Go) : Utilisez des stratégies de streaming ou de compression
  • Disque modéré (10-100 Go) : Utilisez les formats Zarr, H5py ou Parquet
  • Disque abondant (> 100 Go) : Pouvez créer librement de gros fichiers intermédiaires

Instructions d'utilisation

Étape 1 : Exécuter la détection des ressources

Exécutez le script de détection au démarrage de toute tâche informatique intensive :

python scripts/detect_resources.py

Arguments optionnels :

  • -o, --output <path> : Spécifiez un chemin de sortie personnalisé (défaut : .claude_resources.json)
  • -v, --verbose : Imprimez les informations complètes sur les ressources vers stdout

Étape 2 : Lire et appliquer les recommandations

Après avoir exécuté la détection, lisez le fichier .claude_resources.json généré pour informer les décisions informatiques :

# Exemple : Utilisez les recommandations dans le code
import json

with open('.claude_resources.json', 'r') as f:
    resources = json.load(f)

# Vérifiez la stratégie de traitement parallèle
if resources['recommendations']['parallel_processing']['strategy'] == 'high_parallelism':
    n_jobs = resources['recommendations']['parallel_processing']['suggested_workers']
    # Utilisez joblib, Dask ou multiprocessing avec n_jobs workers

# Vérifiez la stratégie mémoire
if resources['recommendations']['memory_strategy']['strategy'] == 'memory_constrained':
    # Utilisez Dask, Zarr ou H5py pour le traitement hors-mémoire
    import dask.array as da
    # Chargez les données par chunks

# Vérifiez la disponibilité GPU
if resources['recommendations']['gpu_acceleration']['available']:
    backends = resources['recommendations']['gpu_acceleration']['backends']
    # Utilisez la bibliothèque GPU appropriée en fonction du backend disponible

Étape 3 : Prendre des décisions éclairées

Utilisez les informations de ressources et les recommandations pour faire des choix stratégiques :

Pour le chargement de données :

memory_available_gb = resources['memory']['available_gb']
dataset_size_gb = 10

if dataset_size_gb > memory_available_gb * 0.5:
    # Le dataset est volumineux par rapport à la mémoire, utilisez Dask
    import dask.dataframe as dd
    df = dd.read_csv('large_file.csv')
else:
    # Le dataset tient en mémoire, utilisez pandas
    import pandas as pd
    df = pd.read_csv('large_file.csv')

Pour le traitement parallèle :

from joblib import Parallel, delayed

n_jobs = resources['recommendations']['parallel_processing'].get('suggested_workers', 1)

results = Parallel(n_jobs=n_jobs)(
    delayed(process_function)(item) for item in data
)

Pour l'accélération GPU :

import torch

if 'CUDA' in resources['gpu']['available_backends']:
    device = torch.device('cuda')
elif 'Metal' in resources['gpu']['available_backends']:
    device = torch.device('mps')
else:
    device = torch.device('cpu')

model = model.to(device)

Dépendances

Le script de détection nécessite les packages Python suivants :

uv pip install psutil

Toutes les autres fonctionnalités utilisent les modules de la bibliothèque standard Python (json, os, platform, subprocess, sys, pathlib).

Support des plateformes

  • macOS : Support complet incluant la détection GPU Apple Silicon (M1/M2/M3/M4)
  • Linux : Support complet incluant la détection GPU NVIDIA (nvidia-smi) et AMD (rocm-smi)
  • Windows : Support complet incluant la détection GPU NVIDIA

Bonnes pratiques

  1. Exécutez tôt : Lancez la détection des ressources au début des projets ou avant les tâches informatiques majeures
  2. Réexécutez périodiquement : Les ressources système changent au fil du temps (utilisation mémoire, espace disque)
  3. Vérifiez avant de monter en charge : Vérifiez les ressources avant d'augmenter le nombre de workers parallèles ou les tailles de données
  4. Documentez les décisions : Conservez le fichier .claude_resources.json dans les répertoires de projet pour documenter les décisions sensibles aux ressources
  5. Utilisez avec versioning : Les différentes machines ont des capacités différentes ; les fichiers de ressources aident à maintenir la portabilité

Dépannage

GPU non détecté :

  • Assurez-vous que les drivers GPU sont installés (nvidia-smi, rocm-smi ou system_profiler pour Apple Silicon)
  • Vérifiez que les utilitaires GPU sont dans le PATH système
  • Vérifiez que le GPU n'est pas utilisé par d'autres processus

L'exécution du script échoue :

  • Assurez-vous que psutil est installé : uv pip install psutil
  • Vérifiez la compatibilité de la version Python (Python 3.6+)
  • Vérifiez que le script a les permissions d'exécution : chmod +x scripts/detect_resources.py

Lectures mémoire inexactes :

  • Les lectures mémoire sont des snapshots ; la mémoire disponible réelle change constamment
  • Fermez les autres applications avant la détection pour une lecture précise de la mémoire « disponible »
  • Envisagez d'exécuter la détection plusieurs fois et de faire la moyenne des résultats

Skills similaires