mcpField
G
get-available-resources

get-available-resources

github.com/crazymsn云与 DevOps2335 次安装22 周前更新
代码仓库

关于 get-available-resources

Get Available Resources 是面向科学计算的技能,可检测计算机的 CPU、GPU、内存、磁盘和操作系统,并生成资源相关建议。研究人员可在高负载任务前据此选择数据处理、并行化和加速方案。

主要功能

  1. 01检测 CPU 与 GPU 能力
  2. 02报告内存和磁盘可用量
  3. 03识别操作系统和 Python 版本
  4. 04将资源信息写入 JSON
  5. 05建议并行、内存和 GPU 策略

适用场景

  1. 01判断数据集是否适合载入内存
  2. 02在训练模型前选择 GPU 后端
  3. 03估算并行处理的工作进程数
  4. 04大型文件操作前检查磁盘容量

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/crazymsn/academic-skills --skill get-available-resources

安装后在 Claude Code 中输入/get-available-resources确认已加载。

附带文件scripts/detect_resources.py

详细介绍

获取可用资源

概述

检测可用的计算资源,并为科学计算任务生成策略建议。此技能会自动识别 CPU 能力、GPU 可用性(NVIDIA CUDA、AMD ROCm、Apple Silicon Metal)、内存限制和磁盘空间,帮助你做出明智的计算方案选择。

何时使用此技能

在执行任何计算密集型任务前,主动使用此技能:

  • 数据分析前:确定数据集能否载入内存,还是需要进行外存处理
  • 模型训练前:检查是否提供 GPU 加速,以及应使用哪个后端
  • 并行处理前:确定 joblib、multiprocessing 或 Dask 的最佳工作进程数
  • 大型文件操作前:确认磁盘空间充足,并选择合适的存储策略
  • 项目初始化时:了解基础能力,为架构决策提供依据

示例场景:

  • “帮我分析这个 50GB 的基因组数据集” → 先使用此技能,确定是否需要 Dask/Zarr
  • “用这些数据训练神经网络” → 使用此技能检测可用的 GPU 和后端
  • “并行处理 10,000 个文件” → 使用此技能确定最佳工作进程数
  • “运行计算密集型模拟” → 使用此技能了解资源限制

此技能的工作方式

资源检测

此技能会运行 scripts/detect_resources.py,自动检测:

  1. CPU 信息

    • 物理核心数和逻辑核心数
    • 处理器架构和型号
    • CPU 频率信息
  2. GPU 信息

    • NVIDIA GPU:通过 nvidia-smi 检测,并报告显存、驱动程序版本和计算能力
    • AMD GPU:通过 rocm-smi 检测
    • Apple Silicon:检测支持 Metal 和统一内存的 M1/M2/M3/M4 芯片
  3. 内存信息

    • RAM 总量和可用量
    • 当前内存使用率
    • 交换空间可用量
  4. 磁盘空间信息

    • 工作目录的磁盘空间总量和可用量
    • 当前使用率
  5. 操作系统信息

    • 操作系统类型(macOS、Linux、Windows)
    • 操作系统版本和发行版本
    • Python 版本
输出格式

此技能会在当前工作目录中生成 .claude_resources.json 文件,其中包含:

{
  "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"
    }
  }
}
策略建议

此技能会根据上下文生成建议:

并行处理建议:

  • 高并行度(8 个或更多核心):使用 Dask、joblib 或 multiprocessing,工作进程数 = 核心数 - 2
  • 中等并行度(4–7 个核心):使用 joblib 或 multiprocessing,工作进程数 = 核心数 - 1
  • 顺序处理(少于 4 个核心):优先采用顺序处理,以避免额外开销

内存策略建议:

  • 内存受限(可用内存少于 4GB):使用 Zarr、Dask 或 H5py 进行外存处理
  • 内存适中(可用内存为 4–16GB):对于大于 2GB 的数据集,使用 Dask/Zarr
  • 内存充足(可用内存超过 16GB):大多数数据集都可以直接载入内存

GPU 加速建议:

  • 检测到 NVIDIA GPU:使用 PyTorch、TensorFlow、JAX、CuPy 或 RAPIDS
  • 检测到 AMD GPU:使用 PyTorch-ROCm 或 TensorFlow-ROCm
  • 检测到 Apple Silicon:使用带有 MPS 后端的 PyTorch、TensorFlow-Metal 或 JAX-Metal
  • 未检测到 GPU:使用针对 CPU 优化的库

大型数据处理建议:

  • 磁盘空间受限(少于 10GB):采用流式处理或压缩策略
  • 磁盘空间适中(10–100GB):使用 Zarr、H5py 或 Parquet 格式
  • 磁盘空间充足(超过 100GB):可自由创建大型中间文件

使用说明

第 1 步:运行资源检测

在任何计算密集型任务开始时,执行检测脚本:

python scripts/detect_resources.py

可选参数:

  • -o, --output <path>:指定自定义输出路径(默认:.claude_resources.json)
  • -v, --verbose:在标准输出中打印完整资源信息
步骤 2:阅读并应用建议

运行检测后,阅读生成的 .claude_resources.json 文件,为计算决策提供参考:

# Example: Use recommendations in code
import json

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

# Check parallel processing strategy
if resources['recommendations']['parallel_processing']['strategy'] == 'high_parallelism':
    n_jobs = resources['recommendations']['parallel_processing']['suggested_workers']
    # Use joblib, Dask, or multiprocessing with n_jobs workers

# Check memory strategy
if resources['recommendations']['memory_strategy']['strategy'] == 'memory_constrained':
    # Use Dask, Zarr, or H5py for out-of-core processing
    import dask.array as da
    # Load data in chunks

# Check GPU availability
if resources['recommendations']['gpu_acceleration']['available']:
    backends = resources['recommendations']['gpu_acceleration']['backends']
    # Use appropriate GPU library based on available backend
步骤 3:做出明智的决策

利用资源信息和建议,做出合理的选择:

数据加载:

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

if dataset_size_gb > memory_available_gb * 0.5:
    # Dataset is large relative to memory, use Dask
    import dask.dataframe as dd
    df = dd.read_csv('large_file.csv')
else:
    # Dataset fits in memory, use pandas
    import pandas as pd
    df = pd.read_csv('large_file.csv')

并行处理:

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
)

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)

依赖项

检测脚本需要以下 Python 包:

uv pip install psutil

其他所有功能均使用 Python 标准库模块(json、os、platform、subprocess、sys、pathlib)。

平台支持

  • macOS:全面支持,包括 Apple Silicon(M1/M2/M3/M4)GPU 检测
  • Linux:全面支持,包括 NVIDIA(nvidia-smi)和 AMD(rocm-smi)GPU 检测
  • Windows:全面支持,包括 NVIDIA GPU 检测

最佳实践

  1. 尽早运行:在项目开始时或执行重要计算任务前运行资源检测
  2. 定期重新运行:系统资源会随时间变化(内存用量、磁盘空间)
  3. 扩容前检查:在增加并行工作进程或数据规模前验证资源
  4. 记录决策:将 .claude_resources.json 文件保留在项目目录中,记录资源感知型决策
  5. 配合版本管理使用:不同机器的能力各不相同;资源文件有助于保持可移植性

故障排除

未检测到 GPU:

  • 确保已安装 GPU 驱动程序(nvidia-smi、rocm-smi,或 Apple Silicon 对应的 system_profiler)
  • 检查 GPU 工具是否位于系统 PATH 中
  • 确认 GPU 未被其他进程占用

脚本执行失败:

  • 确保已安装 psutil:uv pip install psutil
  • 检查 Python 版本兼容性(Python 3.6+)
  • 确认脚本具有执行权限:chmod +x scripts/detect_resources.py

内存读数不准确:

  • 内存读数是瞬时快照;实际可用内存会持续变化
  • 检测前关闭其他应用,以准确获取“可用”内存
  • 可考虑多次运行检测并对结果取平均值

评论

支持 Markdown