# GPU Cluster Monitoring (GCM)
- [facebookresearch/gcm: GPU Cluster Monitoring (GCM)](https://github.com/facebookresearch/gcm)
- [Meta GPU Cluster Monitoring (GCM)](https://facebookresearch.github.io/gcm/)
GPU Cluster Monitoring (GCM)は、[[Meta]] FAIR (Fundamental AI Research)のAIワークロードを支える大規模AI研究クラスター監視ツール群。Metaの数十万[[GPU]]規模のフリートで運用され、ジョブレベルの可視化と可用性向上を実現。
### システムアーキテクチャとデータフロー
GCMは[[OpenTelemetry]] (OTel) エコシステムをベースに、HPCスケジューラである[[Slurm]]のメタデータを統合するアーキテクチャを採用。
* **データ収集**: 各ノードのコレクターがGPUメトリクス(利用率、電力、温度等)やシステム統計を収集。
* **メタデータ付与**: `slurmprocessor`がOTelデータに対し、SlurmのジョブID、ユーザー名、パーティション情報等を動的に紐付け。
* **帰属解析**: 収集されたメトリクスを特定のジョブやユーザーに正確に帰属(Attribution)させ、リソース消費の透明性を確保。
### 主要コンポーネント
* **`gcm`**: メインの監視コンポーネント。クラスター全体の統計収集と集約を担当。
* **`slurmprocessor`**: SlurmのステートとOTelテレメトリーを橋渡しするカスタムプロセッサ。
* **`shelper`**: 運用補助のためのユーティリティツール群。
* **Health Checks Agent**: ジョブ実行の全ライフサイクル(事前、実行中、事後)で検証を実施。
### 収集メトリクスとテレメトリー
* **GPUメトリクス**: NVIDIA `nvml` および `dcgm` から取得される詳細データ(演算利用率、メモリ使用量、Xidエラー等)。
* **Slurm統計**: ジョブごとのCPU/メモリ利用状況、待機時間、実行時間。
* **システム健全性**: ネットワークスループット、ストレージI/O、ドライバ/カーネルの整合性。
### ヘルスチェックメカニズム
ジョブのライフサイクルに統合された多層的な検証を実施。
* **ハードウェア検証**: GPU、NVLink、メモリの物理的な故障検知。
* **ソフトウェアスタック**: OS、ドライバ、ライブラリのバージョン不整合や破損のチェック。
* **ネットワーク・ストレージ**: ノード間通信の疎通確認、共有ファイルシステム(Lustre等)へのアクセス検証。
* **サービス監視**: Slurmデーモンや各種エージェントの生存確認。
### 実装詳細
* **主要言語**: Python (約94%)、Go (約4%)。一部にCやJavaScriptを含む。
* **標準プロトコル**: OpenTelemetryを全面的に採用し、高い拡張性と相互運用性を確保。
* **ライセンス**: `gcm`はMITライセンス、`slurmprocessor`はApache 2.0ライセンス。
### 将来の展望
* AMD、Intel、カスタムアクセラレータ(MTIA等)への対応拡大。
* Slurm以外のスケジューラ(Kubernetes等)へのポーティング。
* コンテナ化(Docker)およびHelmチャートによるデプロイの簡素化。
---
コードリーディングでわかったこと。
## 1. GCM Monitoring(gcm CLI)でできること
- Slurmの状態を定期収集して可視化
- 収集対象:
- ジョブ実行/待機状況(sacct, squeue)
- ノード状態(sinfo)
- スケジューラ診断(sdiag)
- QoS/ユーザー/優先度/フェアシェア(sacctmgr, sprio, sshare)
- クラスタ設定(scontrol, scontrol show config)
- GPUテレメトリ(NVML: 使用率・温度・電力・メモリ・ECC系)
- ストレージ情報(statvfs や Pure情報)
- 代表的な機能:
- slurm_monitor: クラスタ全体の集約メトリクス生成
- slurm_job_monitor: ノード情報とジョブ情報をリアルタイム収集
- sacct_running: 実行中ジョブの追跡
- sacct_backfill: 過去データの分割バックフィル(並列/再試行/クラスタ間同期)
- fsacct + sacct_publish: sacct出力の厳密フィルタ+整形公開
## 2. Health Checks(health_checks CLI)でできること
- ノード健全性チェックを用途別に実行
- 主なカテゴリ:
- GPU: check-dcgmi, check-nvidia-smi, check-nccl, cuda memtest
- ネットワーク/IB: check-hca, check-ib, check-ethlink
- ストレージ/デバイス: check-storage, check-blockdev, check-pci, check-airstore
- OS/サービス: check-process, check-service, check-node, check-syslogs, check-sensors, check-ipmitool
- セキュリティ/認証: check-authentication, check-ssh-certs
- 補助: check-telemetry
- 運用向け特性:
- prolog / epilog / nagios / app の実行タイプを想定
- 終了コードは OK/WARN/CRITICAL/UNKNOWN(Nagios互換)
- 各チェックにfeature flag(killswitch)を持たせて段階導入・緊急無効化可能
## 2. 出力(Exporter/Sink)でできること
- Monitoring/Health Checks 共通で出力先を切替可能
- 標準対応:
- stdout(確認用)
- file(NDJSON追記)
- otel(OTLPでログ/メトリクス送信)
- webhook(HTTP POST)
- do_nothing(ドライラン)
- graph_api(Meta内部向け)
- プラグイン方式なので新規Exporter追加が容易
## 3. Slurm Processor(OpenTelemetry Collector拡張)でできること
- 既存OTelデータ(metrics/logs/traces)に Slurmメタデータを付与
- GPU単位で job_id, job_name, username, partition, account などを紐付け
- 既存のOTelパイプラインに後段で追加し、GPUメトリクスの「誰のジョブか」を特定可能にする
## 4. Shelper(Goライブラリ)でできること
- 「GPU → Slurmジョブ」対応付けの基盤処理
- 3つの情報源モード(nvml, slurmd, slurmctld)を使い分け
- キャッシュ対応で slurmctld 負荷を抑制
- 上位の slurmprocessor から再利用される
## 5. このソフトの実運用上の強み
- 大規模クラスタ向けの継続収集ループ(interval, retry, chunk制御)
- TOML設定でCLI引数を外出し
- systemdユニット例あり(定常運用しやすい)
- 監視と健全性チェックを同じ枠組み・同じ出力層で扱える
## 6. 前提・適用範囲
- 前提は基本的に Slurm + NVIDIA GPU + Linux環境
- 他スケジューラやAMD/Intel向けは「今後の拡張候補」として記載されている段階