EvoSpikeNet HPC環境セットアップガイド
[!NOTE] 最新の実装状況は 機能実装ステータス (Remaining Functionality) を参照してください。
概要
このガイドでは、SlurmとEnroot/Pyxisを使用するHPCクラスタ環境でEvoSpikeNetを動作させる方法を説明します。
環境仕様
コンテナ実行基盤
- ジョブスケジューラ: Slurm 21.08.8+
- コンテナランタイム: Enroot/Pyxis
- コンテナレジストリ: NVIDIA NGC Private Registry (セキュリティスキャン必須)
ストレージ構成
| ストレージ名 | マウントポイント | 用途 | 特記事項 |
|---|---|---|---|
| ローカルストレージ | /raid |
コンテナ配置・起動 | RAID0構成、永続保管不可 |
| メインストレージ | /lustre |
学習データ、高速IO | Lustreファイルシステム |
| ホーム領域 | /home/[username] |
プロジェクトコード | ユーザー単位で払い出し |
| データストア | /store |
バックアップ | ログインサーバーのみアクセス可 |
セットアップ手順
1. ストレージ構造の作成
ログインサーバーで以下を実行:
cd /path/to/EvoSpikeNet
bash slurm/setup_storage.sh
作成されるディレクトリ構造:
/lustre/${USER}/
├── evospikenet/ # プロジェクトコード
├── containers/ # コンテナイメージ(.sqsh)
├── data/ # 学習データ
├── output/ # 学習結果・モデル
├── logs/ # ログファイル
├── checkpoints/ # チェックポイント
└── artifacts/ # その他成果物
/home/${USER}/
├── project -> /lustre/${USER}/evospikenet # シンボリックリンク
├── data -> /lustre/${USER}/data
├── output -> /lustre/${USER}/output
├── scripts/ # 個人用スクリプト
└── configs/ # 個人用設定
/store/${USER}/
├── backups/ # バックアップ
├── models/ # アーカイブ済みモデル
├── datasets/ # データセットバックアップ
└── archive/ # その他アーカイブ
2. プロジェクトコードのアップロード
ログインサーバーで:
# プロジェクトをLustreにクローン
cd /lustre/${USER}
git clone https://github.com/your-org/EvoSpikeNet.git evospikenet
cd evospikenet
# または、scpでアップロード
scp -r /local/path/to/EvoSpikeNet user@login-server:/lustre/${USER}/evospikenet
3. コンテナイメージのビルドとデプロイ
重要: HPCクラスタ環境にはDockerがインストールされていないため、コンテナのビルドはローカルマシンまたはDockerが利用可能な別のビルドサーバーで行う必要があります。
3.1 ローカルマシン/ビルドサーバーでの作業
Dockerがインストールされているマシンで実行:
# NGC Private Registryにログイン
docker login nvcr.io
# コンテナのビルドとプッシュ
cd /path/to/EvoSpikeNet
# 事前に設定を編集
# NGC_REGISTRY="nvcr.io/your-org/your-private-registry" を実際の値に変更
vim slurm/build_and_deploy_container.sh
# ビルドとプッシュを実行
bash slurm/build_and_deploy_container.sh
代替方法: Docker Tarファイル経由でのデプロイ
NGC Private Registryを使用しない場合:
# ローカルマシンでコンテナをビルド
docker build -f Dockerfile.ngc -t evospikenet:latest .
# Tarファイルにエクスポート
docker save evospikenet:latest -o evospikenet-latest.tar
# HPC環境にアップロード
scp evospikenet-latest.tar user@login-server:/lustre/${USER}/containers/
3.2 NGC コンソールでセキュリティスキャン
- NGC Private Registryコンソールにアクセス
- アップロードされたイメージを確認
- セキュリティスキャンが自動実行されるのを待つ
- スキャン完了後、脆弱性レポートを確認
3.3 HPC環境へのコンテナインポート
HPCログインサーバーで実行 (Dockerはインストールされていません):
方法A: NGC Private Registry経由 (推奨)
# NGC APIキーの設定 (初回のみ)
export NGC_API_KEY="your-ngc-api-key"
# Enrootでコンテナをインポート (Dockerは不要)
enroot import docker://nvcr.io/your-org/your-private-registry/evospikenet:latest
# .sqshファイルを適切な場所に移動
mv evospikenet+latest.sqsh /lustre/${USER}/containers/evospikenet-ngc.sqsh
# 確認
ls -lh /lustre/${USER}/containers/
方法B: Tarファイル経由
ローカルからアップロードしたTarファイルを使用する場合:
# HPC環境でTarファイルからインポート
enroot import dockerd:///lustre/${USER}/containers/evospikenet-latest.tar
# .sqshファイルを適切な場所に配置
mv evospikenet.sqsh /lustre/${USER}/containers/evospikenet-ngc.sqsh
# Tarファイルは削除可能
rm /lustre/${USER}/containers/evospikenet-latest.tar
# 確認
ls -lh /lustre/${USER}/containers/
4. 環境モジュールの設定
Slurmモジュールのロード:
# 利用可能なモジュールの確認
module avail
# Slurmモジュールのロード
module load slurm/Slurm/21.08.8
# 永続化 (bashの場合)
echo "module load slurm/Slurm/21.08.8" >> ~/.bashrc
5. ジョブスクリプトの設定
5.1 基本的な学習ジョブ
# 必須: メールアドレスの変更
#SBATCH --mail-user=your-email@example.com
# パーティション名の確認・変更
#SBATCH -p gpu-partition # 実際のパーティション名に変更
実行:
cd /lustre/${USER}/evospikenet
sbatch slurm/example_training.slurm
5.2 インタラクティブJupyter
sbatch slurm/example_interactive.slurm
# ジョブの状態確認
squeue -u ${USER}
# ログからJupyter URLを確認
tail -f /lustre/${USER}/logs/jupyter-<job-id>.out
出力例:
Jupyter URL: http://node-01:8888/?token=evospikenet
5.3 マルチノード分散学習
example_batch_experiments.slurmを使用:
sbatch slurm/example_batch_experiments.slurm
ジョブ管理
ジョブの投入
# ジョブの投入
sbatch slurm/example_training.slurm
# インタラクティブジョブ
srun --pty -p gpu-partition -N 1 --gpus-per-node=1 -t 01:00:00 bash
ジョブの監視
# 自分のジョブ一覧
squeue -u ${USER}
# 詳細情報
scontrol show job <job-id>
# リアルタイムログ監視
tail -f /lustre/${USER}/logs/evospikenet-train-<job-id>.out
tail -f /lustre/${USER}/logs/evospikenet-train-<job-id>.err
ジョブの制御
# ジョブのキャンセル
scancel <job-id>
# 全ジョブのキャンセル
scancel -u ${USER}
# ジョブの一時停止
scontrol suspend <job-id>
# ジョブの再開
scontrol resume <job-id>
データ管理
データのアップロード
# ログインサーバー経由でアップロード
scp -r /local/data user@login-server:/lustre/${USER}/data/
# または、rsyncで同期
rsync -avz --progress /local/data/ user@login-server:/lustre/${USER}/data/
バックアップ戦略
ログインサーバーで定期的にバックアップを実行:
#!/bin/bash
# backup_models.sh
SOURCE_DIR="/lustre/${USER}/output/saved_models"
BACKUP_DIR="/store/${USER}/backups/models/$(date +%Y%m%d)"
echo "Backing up models to data store..."
mkdir -p ${BACKUP_DIR}
rsync -avz --progress ${SOURCE_DIR}/ ${BACKUP_DIR}/
echo "Backup completed: ${BACKUP_DIR}"
cronで自動化 (ログインサーバー):
# crontabの編集
crontab -e
# 毎日午前3時にバックアップ
0 3 * * * /home/${USER}/scripts/backup_models.sh >> /home/${USER}/logs/backup.log 2>&1
チェックポイント管理
学習中に定期的にチェックポイントを保存:
# EvoSpikeNet学習コード内
import torch
import os
checkpoint_dir = "/lustre/${USER}/checkpoints"
os.makedirs(checkpoint_dir, exist_ok=True)
# 定期的に保存
if epoch % 10 == 0:
torch.save({
'epoch': epoch,
'model_state_dict': model.state_dict(),
'optimizer_state_dict': optimizer.state_dict(),
'loss': loss,
}, f"{checkpoint_dir}/checkpoint_epoch_{epoch}.pt")
トラブルシューティング
コンテナが起動しない
# コンテナイメージの確認
ls -lh /lustre/${USER}/containers/
# マニュアルテスト
srun --pty -p gpu-partition -N 1 -t 00:10:00 \
--container-image=/lustre/${USER}/containers/evospikenet-ngc.sqsh \
bash
GPUが認識されない
# コンテナ内でGPU確認
srun -p gpu-partition -N 1 --gpus-per-node=1 \
--container-image=/lustre/${USER}/containers/evospikenet-ngc.sqsh \
nvidia-smi
パーミッションエラー
# Lustreストレージのパーミッション確認
ls -la /lustre/${USER}/
# 必要に応じて修正
chmod 755 /lustre/${USER}/evospikenet
chmod -R u+rwX /lustre/${USER}/evospikenet
ストレージ容量不足
# 容量確認
df -h /lustre
df -h /home/${USER}
# 不要なファイルの削除
find /lustre/${USER}/logs -name "*.out" -mtime +30 -delete
find /lustre/${USER}/output -name "*.tmp" -delete
ベストプラクティス
1. ストレージ使用の最適化
- ローカルストレージ (
/raid): コンテナの一時展開にのみ使用 - メインストレージ (
/lustre): アクティブな学習データと実験結果 - データストア (
/store): 長期保存が必要なモデルとデータセット
2. ジョブ設計
- 長時間ジョブは適切なチェックポイント機能を実装
- 実験は小規模で検証してからスケールアップ
--exclusiveオプションで専有モードを使用 (GPU性能最大化)
3. リソース効率
# GPUの効率的な利用
#SBATCH --gpus-per-node=8 # ノードの全GPU使用
#SBATCH --exclusive # ノード専有
# 短時間実験にはtest-partition
#SBATCH -p test-partition
#SBATCH -t 0-00:30:00
4. セキュリティ
- NGC Private Registryのセキュリティスキャンを必ず実行
- ホームディレクトリのパーミッションはデフォルトを維持
- APIキーや認証情報はホームディレクトリに保存 (
.ssh/,.config/)
参考コマンド集
Slurm基本コマンド
# パーティション一覧
sinfo
# ノード情報
scontrol show node
# ジョブ履歴
sacct -u ${USER} --format=JobID,JobName,Partition,State,Elapsed,MaxRSS
# ジョブ効率レポート
seff <job-id>
パフォーマンス監視
# GPUサーバーでのリソース監視 (インタラクティブセッション内)
watch -n 1 nvidia-smi
# ジョブのリソース使用状況
sstat -j <job-id> --format=AveCPU,AveRSS,MaxRSS
追加リソース
サポート
問題が発生した場合:
- ログファイルを確認:
/lustre/${USER}/logs/ - ジョブの詳細を確認:
scontrol show job <job-id> - システム管理者に連絡 (システム側の問題の場合)
更新日: 2026年1月27日
バージョン: 1.0