はじめに
Azure CycleCloud は、Azure 上に Slurm / PBS / LSF 等のジョブスケジューラを備えた HPC クラスタを構築・運用するオーケストレーションツールです。大学・研究機関のオンプレミス HPC と同じ操作感で、クラウド上にスケーラブルな計算環境を構築できます。
科学研究では、分子動力学(MD)シミュレーション、流体力学(CFD)、ゲノム解析、気象数値予報などの大規模計算ワークロードで HPC が不可欠です。CycleCloud を使えば、必要な時に必要な規模のクラスタを起動し、計算終了後にリソースを解放してコストを最適化できます。
CycleCloud の主な機能
| 機能 | 説明 |
|---|---|
| オートスケーリング | ジョブキューに応じて計算ノードを自動追加・削除 |
| マルチスケジューラ | Slurm / PBS Pro / LSF / Grid Engine 対応 |
| GPU 対応 | ND H100 / H200 / A100 / MI300X VM を計算ノードに使用可能 |
| InfiniBand | NDR 400Gb/s InfiniBand 対応 VM で MPI 通信を高速化 |
| コンテナ | Pyxis / enroot でコンテナジョブを実行 |
| モニタリング | Prometheus + Grafana ダッシュボード |
📝 本シリーズの他の記事もあわせてご覧ください:
前提条件
Azure リソース
| リソース | 要件 |
|---|---|
| Azure サブスクリプション | HPC VM のクォータが十分であること |
| リソースグループ | CycleCloud 用(専用推奨) |
| VNet | CycleCloud + 計算ノード用サブネット |
| ストレージアカウント | CycleCloud メタデータ用 |
VM クォータの確認
# HBv4(CPU HPC)のクォータ確認
az vm list-usage --location eastus \
--query "[?contains(name.value, 'HBv4')]" -o table
# ND H100(GPU)のクォータ確認
az vm list-usage --location eastus \
--query "[?contains(name.value, 'NDH100')]" -o table
Step 1 — CycleCloud Workspace for Slurm のデプロイ
Azure Marketplace からデプロイ(推奨)
- Azure Portal → Marketplace → 「CycleCloud Workspace for Slurm」検索
- 作成 を選択
- 基本設定を入力:
- リソースグループ
- リージョン(東日本 or 米国東部 推奨)
- 管理者ユーザー名・SSH 公開鍵
- ネットワーク設定:
- 既存 VNet を選択 or 新規作成
- Slurm 設定:
- Slurm バージョン(デフォルト推奨)
- スケジューラ VM サイズ
- 確認と作成 → 作成
Azure CLI からデプロイ
# リソースグループの作成
az group create --name rg-cyclecloud-hpc --location eastus
# CycleCloud VM のデプロイ
az vm create \
--resource-group rg-cyclecloud-hpc \
--name cyclecloud-server \
--image "microsoft-dsvm:ubuntu-for-cyclecloud:cyclecloud8:latest" \
--size Standard_D4s_v5 \
--admin-username azureuser \
--generate-ssh-keys \
--vnet-name hpc-vnet \
--subnet default
# CycleCloud の Web UI にアクセス(ポート 443)
echo "https://$(az vm show -g rg-cyclecloud-hpc -n cyclecloud-server -d --query publicIps -o tsv)"
Step 2 — Slurm クラスタの構成
CycleCloud Web UI での設定
- ブラウザで CycleCloud の URL(https://)にアクセス
- 初期セットアップウィザードを完了
- Clusters → + → 「Slurm」テンプレートを選択
- クラスタ設定:
| 設定項目 | 推奨値(MD シミュレーション用) | 説明 |
|---|---|---|
| Scheduler VM | Standard_D4s_v5 | ヘッドノード |
| HPC Partition VM | Standard_HB176rs_v4 | CPU 計算ノード(InfiniBand 付) |
| GPU Partition VM | Standard_ND96isr_H100_v5 | GPU 計算ノード |
| Max HPC Nodes | 10 | 最大 CPU ノード数 |
| Max GPU Nodes | 4 | 最大 GPU ノード数 |
| OS | AlmaLinux 8 / Ubuntu 22.04 | |
| Autoscale | Enabled | ジョブに応じて自動スケーリング |
- Save → Start でクラスタを起動
テンプレートファイルでの設定
# cluster-template.txt
[cluster slurm-science]
FormLayout = selectionpanel
Category = Schedulers
[[node scheduler]]
MachineType = Standard_D4s_v5
ImageName = cycle.image.ubuntu2204
SubnetId = ${subnet_id}
[[[configuration]]]
cyclecloud.selinux.policy = permissive
[[nodearray hpc]]
MachineType = Standard_HB176rs_v4
MaxCoreCount = 1760
Interruptible = false
SubnetId = ${subnet_id}
[[[configuration]]]
slurm.autoscale = true
slurm.hpc = true
[[nodearray gpu]]
MachineType = Standard_ND96isr_H100_v5
MaxCoreCount = 384
Interruptible = false
SubnetId = ${subnet_id}
[[[configuration]]]
slurm.autoscale = true
Step 3 — ジョブの投入と実行
SSH でスケジューラノードに接続
# CycleCloud 上のスケジューラにSSH接続
ssh azureuser@<scheduler-ip>
基本的な Slurm ジョブ
#!/bin/bash
#SBATCH --job-name=md-simulation
#SBATCH --partition=hpc
#SBATCH --nodes=2
#SBATCH --ntasks-per-node=176
#SBATCH --time=24:00:00
#SBATCH --output=md-%j.out
#SBATCH --error=md-%j.err
module load openmpi
module load gromacs
# GROMACS 分子動力学シミュレーション
mpirun gmx_mpi mdrun -s topol.tpr -deffnm md_output
# ジョブの投入
sbatch md_job.sh
# ジョブの状態確認
squeue
# クラスタの状態確認
sinfo
GPU ジョブ(AI 推論/学習)
#!/bin/bash
#SBATCH --job-name=protein-folding
#SBATCH --partition=gpu
#SBATCH --nodes=1
#SBATCH --gpus-per-node=8
#SBATCH --time=12:00:00
#SBATCH --output=fold-%j.out
module load cuda/12.4
# AlphaFold2 による構造予測
python run_alphafold.py \
--fasta_paths=targets.fasta \
--model_preset=monomer \
--db_preset=full_dbs \
--output_dir=./predictions
コンテナジョブ(Pyxis / enroot)
NVIDIA NGC コンテナをネイティブに実行できます。
#!/bin/bash
#SBATCH --job-name=bionemo-container
#SBATCH --partition=gpu
#SBATCH --nodes=1
#SBATCH --gpus-per-node=1
#SBATCH --time=4:00:00
# NGC コンテナで BioNeMo NIM を実行
srun --container-image=nvcr.io/nim/nvidia/alphafold2:latest \
--container-mounts=/data:/data \
python predict.py --input /data/sequences.fasta
Step 4 — MPI 並列ジョブ(大規模シミュレーション)
OpenMPI + InfiniBand の利用
HBv4 系の VM は NDR 400Gb/s InfiniBand を搭載しており、MPI 通信を高速化できます。
#!/bin/bash
#SBATCH --job-name=cfd-simulation
#SBATCH --partition=hpc
#SBATCH --nodes=8
#SBATCH --ntasks-per-node=176
#SBATCH --time=48:00:00
#SBATCH --output=cfd-%j.out
module load openmpi/4.1
module load openfoam/2312
# OpenFOAM CFD シミュレーション(8ノード / 1,408コア)
mpirun -np 1408 simpleFoam -parallel
InfiniBand の確認
# InfiniBand の状態確認
ibstat
# NCCL テスト(GPU 間通信)
srun --nodes=2 --gpus-per-node=8 \
/usr/bin/all_reduce_perf -b 1M -e 1G -f 2
Step 5 — オートスケーリングの設定
動作原理
ジョブ投入 (sbatch)
│
▼
┌──────────────┐
│ Slurm が │
│ リソース要求 │
│ を検出 │
└──────┬───────┘
│
▼
┌──────────────┐
│ CycleCloud │ ← オートスケール: VM を自動プロビジョニング
│ Autoscaler │
└──────┬───────┘
│ VM 起動(3-5分)
▼
┌──────────────┐
│ 計算ノード │ ← Slurm に自動参加
│ がクラスタに │
│ 参加 │
└──────┬───────┘
│
▼
ジョブ実行開始
ジョブ完了後
│
▼
┌──────────────┐
│ アイドル検出 │ ← 一定時間ジョブがなければ VM を削除
│ → VM 削除 │ (デフォルト: 15分)
└──────────────┘
スケーリングの設定
# CycleCloud CLI でオートスケーリングを設定
cyclecloud autoscale configure \
--cluster slurm-science \
--idle-timeout 900 \
--boot-timeout 1800
Step 6 — モニタリング
Prometheus + Grafana
CycleCloud Workspace for Slurm には Prometheus + Grafana が組み込まれています。
# Grafana ダッシュボードのURL
echo "http://<scheduler-ip>:3000"
# デフォルト認証: admin / admin
主要メトリクス
| メトリクス | 説明 |
|---|---|
slurm_queue_pending |
待機中のジョブ数 |
slurm_queue_running |
実行中のジョブ数 |
slurm_nodes_total |
総ノード数 |
slurm_nodes_idle |
アイドルノード数 |
node_cpu_usage |
CPU 使用率 |
nvidia_gpu_utilization |
GPU 使用率 |
Azure Monitor 連携
# Azure Monitor エージェントの設定
az monitor log-analytics workspace create \
--resource-group rg-cyclecloud-hpc \
--workspace-name hpc-monitoring
Step 7 — 応用ユースケース
ユースケース 1: 分子動力学パイプライン
MatterSim でファインチューニングした力場を CycleCloud 上で大規模に実行。
#!/bin/bash
#SBATCH --job-name=mattersim-md
#SBATCH --partition=gpu
#SBATCH --nodes=1
#SBATCH --gpus-per-node=8
#SBATCH --time=48:00:00
#SBATCH --array=1-100 # 100 個の材料候補を並列処理
# 材料候補ごとにシミュレーション
python run_mattersim_md.py \
--material-id ${SLURM_ARRAY_TASK_ID} \
--force-field mattersim-finetuned.pt \
--timesteps 1000000 \
--temperature 300
ユースケース 2: ゲノム解析パイプライン
#!/bin/bash
#SBATCH --job-name=wgs-pipeline
#SBATCH --partition=gpu
#SBATCH --nodes=1
#SBATCH --gpus-per-node=1
#SBATCH --time=2:00:00
# NVIDIA Clara Parabricks での全ゲノム解析(30x WGS → 約15分)
pbrun fq2bam \
--ref /data/reference/hg38.fa \
--in-fq /data/sample_R1.fq.gz /data/sample_R2.fq.gz \
--out-bam /output/sample.bam
pbrun deepvariant \
--ref /data/reference/hg38.fa \
--in-bam /output/sample.bam \
--out-variants /output/sample.vcf
ユースケース 3: ハイブリッドジョブ(CPU + GPU)
前処理を CPU ノードで実行し、推論を GPU ノードで実行するマルチステップジョブ。
#!/bin/bash
# Step 1: CPU で前処理(HPC パーティション)
JOB1=$(sbatch --parsable preprocess.sh)
# Step 2: GPU で推論(GPU パーティション、Step 1 完了後)
JOB2=$(sbatch --parsable --dependency=afterok:$JOB1 inference.sh)
# Step 3: CPU で後処理(Step 2 完了後)
sbatch --dependency=afterok:$JOB2 postprocess.sh
echo "Pipeline submitted: preprocess($JOB1) → inference($JOB2) → postprocess"
コスト最適化
| 戦略 | 効果 | 設定方法 |
|---|---|---|
| オートスケーリング | アイドル時のコストゼロ | slurm.autoscale = true |
| Spot VM | 最大90%コスト削減 | Interruptible = true |
| 低優先度パーティション | 非緊急ジョブのコスト削減 | Spot VM パーティションを別途作成 |
| VM サイズの最適化 | 必要最小限のリソース | ジョブプロファイリング後にサイズ調整 |
| スケジュール停止 | 夜間・週末のコストゼロ | CycleCloud CLI でクラスタ停止 |
# 夜間にクラスタを停止するスクリプト例
# crontab に登録
# 0 22 * * * cyclecloud terminate_cluster slurm-science
# 0 8 * * 1-5 cyclecloud start_cluster slurm-science
注意事項
- クォータ: HPC VM(HBv4, ND H100 等)は事前にクォータ申請が必要な場合があります
- リージョン: InfiniBand 対応 VM は利用可能リージョンが限定されています
- ストレージ: 大規模デー計算では Azure NetApp Files や Managed Lustre の利用を検討してください
- セキュリティ: 計算ノードを Private Subnet に配置し、NSG で必要なポートのみ開放してください
- Entra ID SSO: CycleCloud Workspace for Slurm は Entra ID(旧 Azure AD)SSO に対応しています
まとめ
本記事では、Azure CycleCloud を使った HPC クラスタの構築と運用手順を紹介しました。
- デプロイ — Marketplace / CLI で CycleCloud を構築
- クラスタ構成 — Slurm + CPU/GPU パーティション
- ジョブ実行 — sbatch で MPI / GPU / コンテナジョブを投入
- オートスケーリング — ジョブキューに応じた自動スケーリング
- モニタリング — Prometheus + Grafana / Azure Monitor
- 応用 — MD シミュレーション、ゲノム解析、ハイブリッドパイプライン
CycleCloud はオンプレミス HPC の操作体験をそのままクラウドに持ち込めるため、Slurm に慣れた研究者にとって移行コストが低い点が最大の利点です。
📝 本シリーズの他の記事もあわせてご覧ください:
References
[1] Azure CycleCloud Workspace for Slurm Overview - Microsoft, 2025
[2] Azure CycleCloud Documentation - Microsoft, 2025
[3] HBv4-series Virtual Machines - Microsoft, 2025
[4] ND H100 v5 Virtual Machines - Microsoft, 2025
[5] NVIDIA Clara Parabricks on Azure - NVIDIA, 2025