with one click
system-resources
机器资源信息采集(CPU/内存/GPU/磁盘/网卡)
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
机器资源信息采集(CPU/内存/GPU/磁盘/网卡)
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
DeepSpeed ZeRO 显存优化与训练加速
Flash Attention 版本选型与最佳配置
提交代码到远程仓库
NVIDIA Nsight Systems 系统级 GPU Profiling
Nsight Systems 自动检测、安装与升级
PyTorch Profiler 性能分析,提供算子级瓶颈定位
| name | system-resources |
| description | 机器资源信息采集(CPU/内存/GPU/磁盘/网卡) |
采集当前机器的 CPU、内存、GPU 显存、磁盘、网卡及 RDMA、GPU 拓扑等真实运行资源信息,并生成结构化报告,为代码优化和性能调优(如 batch size 选择、ZeRO Stage 选型、CPU Offload 可行性评估、多机通信策略等)提供数据支撑。
当用户需要了解当前机器的硬件资源状况时触发。适用场景包括:训练前评估硬件条件、排查 OOM 问题时查看显存/内存使用、选择并行策略前了解 GPU 拓扑和网卡带宽、评估 CPU Offload / NVMe Offload 可行性、性能调优时需要了解真实硬件瓶颈等。
你是系统资源分析专家。按以下步骤逐项采集当前机器的硬件资源信息,然后生成汇总报告并给出优化建议。
执行原则:每个步骤的命令都应实际运行,采集真实数据。命令不可用时跳过并标注"不可用"。
lscpu
关注指标:
| 指标 | 含义 | 优化关联 |
|---|---|---|
| Model name | CPU 型号 | 判断算力档次 |
| Socket(s) | 物理 CPU 数 | 多 socket 需注意 NUMA 绑核 |
| Core(s) per socket | 每 socket 核心数 | 影响 DataLoader num_workers 上限 |
| Thread(s) per core | 超线程倍数 | 逻辑核 = socket × core × thread |
| CPU(s) | 总逻辑核数 | DataLoader / CPU Offload 的并行能力 |
| NUMA node(s) | NUMA 节点数 | CPU Offload 时应绑定到 GPU 所在 NUMA 节点 |
| Flags (avx/avx2/avx512) | 向量指令集 | 影响 CPU 侧计算效率(如 DeepSpeedCPUAdam) |
如需查看 NUMA 与 CPU 核心的对应关系:
lscpu | grep "NUMA node"
free -h
关注指标:
| 指标 | 含义 | 优化关联 |
|---|---|---|
| total | 物理内存总量 | CPU Offload 可用空间上限 |
| used | 已使用内存 | 当前占用情况 |
| free | 空闲内存 | 可立即分配的内存 |
| available | 实际可用内存(含可回收缓存) | 最重要:真实可用于 Offload 的空间 |
| Swap total | 交换分区大小 | 0 表示无 swap(GPU 训练推荐无 swap) |
CPU Offload 可行性速算(FP16 + Adam 优化器):
如需更详细的内存信息:
cat /proc/meminfo | head -20
nvidia-smi
nvidia-smi --query-gpu=index,name,driver_version,memory.total,memory.used,memory.free,utilization.gpu,utilization.memory,temperature.gpu,power.draw,power.limit,clocks.current.sm,clocks.max.sm,pcie.link.gen.current,pcie.link.width.current --format=csv,noheader,nounits
关注指标:
| 指标 | 含义 | 优化关联 |
|---|---|---|
| name | GPU 型号 | 决定 Flash Attention 版本、FP8/BF16 支持 |
| memory.total | 显存总量 (MiB) | 决定 micro_batch_size、ZeRO Stage |
| memory.used | 已用显存 | 排查显存泄漏、判断是否有其他进程占用 |
| memory.free | 可用显存 | 实际可用于训练的显存 |
| utilization.gpu | GPU 计算利用率 (%) | 训练中 < 80% 说明有瓶颈(数据加载/通信/CPU 同步) |
| utilization.memory | 显存带宽利用率 (%) | 高值说明显存带宽受限 |
| temperature.gpu | GPU 温度 (°C) | > 80°C 需关注散热,可能降频 |
| power.draw / power.limit | 实际功耗 / 功耗上限 (W) | 接近上限说明计算密集 |
| pcie.link.gen / width | PCIe 代数和宽度 | Gen4 x16 = 32 GB/s,影响 CPU↔GPU 传输速度 |
nvidia-smi --query-compute-apps=pid,name,gpu_uuid,used_memory --format=csv
如果显存被占用但不知道被谁占了,此命令可定位进程。
| GPU 型号 | 架构 | 支持特性 |
|---|---|---|
| V100 | Volta | FP16,不支持 Flash Attention |
| A100 / A10 / A30 | Ampere | BF16、Flash Attention 2、Tensor Core |
| H100 / H200 / H20 | Hopper | BF16、FP8、Flash Attention 2/3、高带宽 NVLink |
| B200 / GB200 | Blackwell | FP4、Flash Attention 4 |
df -h | grep -v "tmpfs\|overlay\|shm" || df -h
过滤 tmpfs/overlay 等虚拟文件系统,聚焦实际存储。如过滤后无结果则显示全部。
lsblk -d -o NAME,SIZE,TYPE,ROTA,TRAN,MODEL 2>/dev/null || lsblk
关注指标:
| 指标 | 含义 | 优化关联 |
|---|---|---|
| 数据目录挂载点容量与使用率 | 数据存储空间 | 训练数据和 checkpoint 是否放得下 |
| NVMe 设备是否存在 | 高速本地存储 | ZeRO-Infinity NVMe Offload 的前提 |
| ROTA=0 | 非旋转介质(SSD/NVMe) | 数据 I/O 速度 |
| 存储类型(ceph/nfs/local) | 存储层级 | 本地 SSD > Ceph > NFS,训练数据应尽量放本地 |
NVMe Offload 可行性判断:
lsblk 中出现 nvme 设备 → 具备 NVMe Offload 条件ip -br link show | grep -v "lo\|docker\|veth\|br-"
-br为简洁输出模式,过滤容器虚拟网卡。
# 查看 bond 接口或主要物理网卡的速率
for iface in $(ip -br link show | awk '/bond|eth0|ens|eno/{print $1}' | head -10); do
echo "=== $iface ==="
ethtool "$iface" 2>/dev/null | grep -E "Speed|Link detected|Settings for" || echo " (无法获取)"
done
# 检查 RDMA 设备
ibstat 2>/dev/null | head -60 || echo "ibstat 不可用,跳过 RDMA 检查"
# 查看 RDMA 设备数量和状态摘要
ibstatus 2>/dev/null | grep -E "Infiniband|rate|state" | head -30 || echo "ibstatus 不可用"
关注指标:
| 指标 | 含义 | 优化关联 |
|---|---|---|
| 网卡速率 | 单口带宽 | 25/100/200 Gbps,影响多机通信吞吐 |
| Bond 配置 | 链路聚合 | 多口聚合可提升总带宽 |
| RDMA 状态 (Active/LinkUp) | GPUDirect RDMA 可用性 | 多机训练必须确认 RDMA 可用 |
| RDMA 速率 | RDMA 带宽 | 200 Gb/s (HDR) / 400 Gb/s (NDR) |
| RDMA 设备数量 | 可用 RDMA 通道数 | 影响 NCCL 通信并行度 |
nvidia-smi topo -m
关注指标:
| 连接类型 | 含义 | 带宽 |
|---|---|---|
| NV# (如 NV18) | NVLink 直连,#表示 link 数 | 每 link 50 GB/s (NVLink4),NV18 ≈ 900 GB/s |
| PIX | 同一 PCIe switch 下 | ~32 GB/s (PCIe Gen4 x16) |
| PHB | 经过 PCIe Host Bridge | ~32 GB/s |
| NODE | 同一 NUMA 节点,不同 PCIe switch | 较低 |
| SYS | 跨 NUMA 节点 | 最低,需经 CPU 互联 |
拓扑对优化的影响:
将以上采集结果整合为结构化报告:
# 机器资源摘要报告
## 硬件概览
| 项目 | 值 |
|------|-----|
| CPU | <型号> × <socket 数>,<总核心数> 核 / <总逻辑核数> 线程 |
| 内存 | 总量 <X> GB,可用 <Y> GB |
| GPU | <型号> × <数量>,单卡显存 <X> GB,总显存 <Y> GB |
| 存储 | 本地 NVMe: <有/无> (<容量>),数据目录: <挂载点> (<可用空间>) |
| 网卡 | <速率> × <数量>,RDMA: <可用/不可用> (<速率>) |
| GPU 互联 | <NVLink/PCIe>,拓扑: <描述> |
| CUDA | 驱动 <版本>,CUDA <版本> |
## GPU 状态详情
| GPU # | 型号 | 显存总量 | 已用 | 可用 | 利用率 | 温度 | 功耗 |
|-------|------|---------|------|------|--------|------|------|
| 0 | ... | ... | ... | ... | ... | ... | ... |
## 存储详情
| 挂载点 | 容量 | 已用 | 可用 | 类型 |
|--------|------|------|------|------|
| ... | ... | ... | ... | NVMe/SSD/Ceph/NFS |
## 网卡详情
| 接口 | 速率 | 状态 | 类型 |
|------|------|------|------|
| ... | ... | UP/DOWN | Ethernet/RDMA |
## 资源评估与优化建议
### 显存预算
- 单卡可用显存:<X> GB
- 4 卡总可用显存:<Y> GB
- **建议**:<根据显存推荐 ZeRO Stage 和 micro_batch_size 范围>
### CPU Offload 可行性
- 可用 CPU 内存:<X> GB
- 可支撑 offload 的最大模型参数量:约 <Y>B(按 12 bytes/参数估算)
- **建议**:<是否推荐 CPU Offload,适合多大模型>
### NVMe Offload 可行性
- NVMe 可用空间:<X> TB
- **建议**:<是否具备 ZeRO-Infinity 条件>
### 多机通信
- RDMA 状态:<可用/不可用>
- 网卡带宽:<X> Gb/s
- **建议**:<是否推荐 GPUDirect RDMA,通信优化策略>
### 并行策略
- GPU 互联:<NVLink 描述>
- **建议**:<TP/PP/DP 策略建议>
### 数据 I/O
- 数据存储位置:<本地/远程>
- 存储类型:<NVMe/SSD/Ceph/NFS>
- **建议**:<数据加载优化建议,是否需要预拷贝到本地>
### CPU 绑核
- NUMA 节点数:<N>
- **建议**:<DeepSpeed --bind_cores_to_rank / numactl 建议>
| 硬件指标 | 阈值 / 条件 | 推荐优化操作 |
|---|---|---|
| GPU 显存 < 40 GB | 单卡 V100-32G / A10-24G | ZeRO Stage 2+, gradient checkpointing, micro_batch=1 |
| GPU 显存 40-80 GB | 单卡 A100-40G/80G | ZeRO Stage 2 起步,按模型大小升级 |
| GPU 显存 > 80 GB | 单卡 H100-80G / H20-96G | ZeRO Stage 1-2 可训练较大模型 |
| CPU 内存 > 模型参数×12B | 内存充足 | 可安全启用 offload_optimizer 到 CPU |
| CPU 内存 < 模型参数×12B | 内存不足 | 不宜启用 CPU Offload,或考虑 NVMe Offload |
| NVMe 可用 | lsblk 中有 nvme 设备 | 可启用 ZeRO-Infinity NVMe Offload |
| 无 NVMe | 仅 HDD/远程存储 | 不可用 NVMe Offload,依赖 GPU+CPU 内存 |
| RDMA 可用 | ibstat 显示 Active | 多机训练启用 GPUDirect RDMA,设置 NCCL 环境变量 |
| RDMA 不可用 | ibstat 不存在或 Down | 多机通信走 TCP/IP,带宽受限,考虑 ZeRO++ 量化通信 |
| NVLink 互联 | nvidia-smi topo 显示 NV# | 优先在 NVLink 组内做张量并行(TP) |
| 仅 PCIe 互联 | topo 显示 PIX/PHB/SYS | 避免 TP,优先数据并行 + ZeRO |
| GPU 利用率 < 50% | nvidia-smi utilization.gpu | 瓶颈可能在数据加载或 CPU-GPU 同步,用 profiler 进一步分析 |
| GPU 温度 > 80°C | temperature.gpu > 80 | 可能触发降频,检查散热/功耗限制 |
| 数据在远程存储 (NFS/Ceph) | df 显示远程挂载 | 预拷贝训练数据到本地 NVMe/SSD |
| 数据在本地 NVMe | df 显示本地 nvme | I/O 通常不是瓶颈 |
| NUMA ≥ 2 | lscpu NUMA nodes ≥ 2 | CPU Offload 时建议绑核(--bind_cores_to_rank 或 numactl) |
| CPU 核心数 > 32 | 多核服务器 | DataLoader num_workers 建议 4-8 per GPU |
如需一次性采集所有信息,运行以下脚本:
echo "========== CPU =========="
lscpu | grep -E "Model name|Socket|Core|Thread|CPU\(s\)|NUMA|Flags" | head -15
echo -e "\n========== 内存 =========="
free -h
echo -e "\n========== GPU =========="
nvidia-smi --query-gpu=index,name,memory.total,memory.used,memory.free,utilization.gpu,temperature.gpu,power.draw,power.limit --format=csv 2>/dev/null || echo "nvidia-smi 不可用"
echo -e "\n========== GPU 拓扑 =========="
nvidia-smi topo -m 2>/dev/null || echo "nvidia-smi topo 不可用"
echo -e "\n========== 磁盘 =========="
lsblk -d -o NAME,SIZE,TYPE,ROTA,TRAN,MODEL 2>/dev/null || lsblk
echo "---"
df -h | grep -vE "tmpfs|overlay|shm|udev|proc" || df -h
echo -e "\n========== 网卡 =========="
ip -br link show | grep -vE "lo|docker|veth|br-" | head -20
echo -e "\n========== RDMA =========="
ibstatus 2>/dev/null | grep -E "Infiniband|rate|state" | head -20 || echo "RDMA 不可用"
echo -e "\n========== GPU 进程 =========="
nvidia-smi --query-compute-apps=pid,name,used_memory --format=csv 2>/dev/null || echo "无 GPU 进程"
# 持续监控 GPU(每 1 秒刷新)
nvidia-smi -l 1
# 仅看显存使用
nvidia-smi --query-gpu=index,memory.used,memory.total --format=csv
# 查看 NVLink 状态和带宽
nvidia-smi nvlink --status
# 查看 GPU 时钟频率(是否被降频)
nvidia-smi --query-gpu=index,clocks.current.sm,clocks.max.sm,clocks.current.memory,clocks.max.memory --format=csv
# 查看 ECC 错误(排查硬件问题)
nvidia-smi --query-gpu=index,ecc.errors.corrected.volatile.total,ecc.errors.uncorrected.volatile.total --format=csv
# 查看 PCIe 带宽(rx/tx 吞吐)
nvidia-smi dmon -s t -c 5