# 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向けは「今後の拡張候補」として記載されている段階