1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【AI for Science 研究者向け】Azure CycleCloud で Slurm HPC クラスタを構築する ─ Azure AI Foundry 実践ガイド

1
Posted at

はじめに

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 からデプロイ(推奨)

  1. Azure PortalMarketplace → 「CycleCloud Workspace for Slurm」検索
  2. 作成 を選択
  3. 基本設定を入力:
    • リソースグループ
    • リージョン(東日本 or 米国東部 推奨)
    • 管理者ユーザー名・SSH 公開鍵
  4. ネットワーク設定:
    • 既存 VNet を選択 or 新規作成
  5. Slurm 設定:
    • Slurm バージョン(デフォルト推奨)
    • スケジューラ VM サイズ
  6. 確認と作成作成

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 での設定

  1. ブラウザで CycleCloud の URL(https://)にアクセス
  2. 初期セットアップウィザードを完了
  3. Clusters+ → 「Slurm」テンプレートを選択
  4. クラスタ設定:
設定項目 推奨値(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 ジョブに応じて自動スケーリング
  1. SaveStart でクラスタを起動

テンプレートファイルでの設定

# 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

注意事項

  1. クォータ: HPC VM(HBv4, ND H100 等)は事前にクォータ申請が必要な場合があります
  2. リージョン: InfiniBand 対応 VM は利用可能リージョンが限定されています
  3. ストレージ: 大規模デー計算では Azure NetApp Files や Managed Lustre の利用を検討してください
  4. セキュリティ: 計算ノードを Private Subnet に配置し、NSG で必要なポートのみ開放してください
  5. Entra ID SSO: CycleCloud Workspace for Slurm は Entra ID(旧 Azure AD)SSO に対応しています

まとめ

本記事では、Azure CycleCloud を使った HPC クラスタの構築と運用手順を紹介しました。

  1. デプロイ — Marketplace / CLI で CycleCloud を構築
  2. クラスタ構成 — Slurm + CPU/GPU パーティション
  3. ジョブ実行 — sbatch で MPI / GPU / コンテナジョブを投入
  4. オートスケーリング — ジョブキューに応じた自動スケーリング
  5. モニタリング — Prometheus + Grafana / Azure Monitor
  6. 応用 — 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

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?