Lifematics Corporate Blog

Lifematics社のコーポレートブログへようこそ!

WebベースでHPCを快適に!OpenOnDemand × Slurm の主なメリットと活用術

皆さん、こんにちは!

HPC環境の運用において、ジョブ管理システムであるSlurmは不可欠な存在です。 しかし、「コマンドライン操作が難しい」「ジョブの状況が分かりにくい」と感じる方もいらっしゃるかもしれませんね。

そこで今回ご紹介したいのが、OpenOnDemandとSlurmを組み合わせることで得られる、圧倒的な使いやすさと効率性です! この強力なコンビネーションが、どのように皆様の研究や開発を加速させるのか、その主なメリットをステップバイステップでご紹介します。

OpenOnDemand × Slurm の主なメリット

OpenOnDemandとSlurmの連携は、HPC環境の利用を劇的にシンプルかつ効率的にします。具体的なメリットを見ていきましょう!

  1. Webベースで使いやすいユーザーインターフェース

  2. ジョブ管理が視覚的に可能

    • HPC環境で多数のジョブを管理する際、現在の状況を一目で把握できることは非常に重要です。
    • OpenOnDemandを使えば、ジョブキューの状況や、現在実行中、あるいは完了したジョブの一覧を視覚的に確認できます。
    • さらに、各ジョブがどれくらいCPUやRAMなどのリソースを使用しているかもGUI上で簡単にチェックできるため、効率的なリソース利用に繋がります。
  3. インタラクティブジョブの簡単起動

    • VNC、JupyterLab、RStudioといったインタラクティブなセッションをWebブラウザから直接起動できるのも大きな魅力です。
    • これらのセッションはSlurmの制御下で必要なリソースが確保されてから立ち上がるため、リソース競合が起きにくく、安定した作業環境をすぐに手に入れることができます。
  4. ファイル操作もWeb上で可能

    • 計算結果のダウンロードやスクリプトの編集のために、わざわざscpやsftpといったコマンドを使う必要はありません。
    • OpenOnDemandのWebベースファイルブラウザを使えば、Windowsユーザーでも簡単にファイル操作を行え、計算結果の管理やスクリプトの修正が容易になります。
  5. テンプレートベースのジョブ投入

    • 繰り返し実行する定型ジョブの投入は、手動で行うと手間がかかります。
    • OpenOnDemandでは、事前に用意された「ジョブテンプレート」を利用することで、数クリックで定型ジョブの投入を完了できます。
    • 例えば、「Python実行ジョブ」や「MPI並列ジョブ」といったテンプレートをユーザー向けに準備することが可能です。これにより、ジョブ投入の敷居を大きく下げることができます。
  6. 管理者にとっても便利

    • OpenOnDemandは、利用者だけでなくシステム管理者にとっても大きなメリットをもたらします。
    • HPC環境の利用状況をWebから一目で確認できるため、運用の透明性が高まります。
    • また、「どのノードで、どのようなジョブが動いていたか」といった情報をGUIで簡単に把握できるため、利用者からの問い合わせ対応やトラブルシューティングにおけるサポートの効率化にも貢献します。

OpenOnDemand × Slurm 簡単インストールハンズオン

それでは、SlurmとOpenOnDemandの強力な連携を体験するために、実際に1台のRocky Linux 9サーバーへSlurm Controller/Compute/OpenOnDemandをインストールしてみましょう!

  1. Slurmインストール

    • まず、Slurmサービス用のユーザーとグループを作成します。
    # sudo groupadd -g 64030 slurm
    # sudo useradd -u 64030 -g 64030 -m -d /run/slurm -s /sbin/nologin -r slurm
    
    • Slurmのビルドに必要なMungeと開発ツールをインストールします。
    # dnf config-manager --set-enabled crb
    # dnf -y install epel-release
    # dnf install -y munge munge-devel
    # /usr/sbin/create-munge-key
    # systemctl enable --now munge
    # systemctl status munge.service
    # sudo dnf install -y dbus-glib-devel
    # dnf groupinstall -y "Development Tools"
    
    # wget https://download.schedmd.com/slurm/slurm-24.11.5.tar.bz2
    # tar -xaf slurm*tar.bz2
    # cd slurm-24.11.5/
    # ./configure
    # make -j 5
    # make install
    
    • systemdサービスファイルと設定ファイルをコピーし、Slurmユーザーのディレクトリ権限を設定します。
    # cp -p /root/slurm-24.11.5/etc/slurmctld.service /usr/lib/systemd/system/
    # cp -p /root/slurm-24.11.5/etc/slurmd.service /usr/lib/systemd/system/
    # systemctl daemon-reload
    # cp -p /root/slurm-24.11.5/etc/slurm.conf.example /usr/local/etc/
    # cd /usr/local/etc/
    # cp -p slurm.conf.example slurm.conf
    
    • slurm.confを編集します。
    # vi slurm.conf
    # grep -vE '^\s*#|^\s*$' slurm.conf
    ClusterName=cluster
    SlurmctldHost=master
    MpiDefault=none
    ProctrackType=proctrack/cgroup
    ReturnToService=1
    SlurmctldPidFile=/var/run/slurmctld.pid
    SlurmctldPort=6817
    SlurmdPidFile=/var/run/slurmd.pid
    SlurmdPort=6818
    SlurmdSpoolDir=/var/spool/slurmd
    SlurmUser=slurm
    StateSaveLocation=/var/spool/slurmctld
    SwitchType=switch/none
    TaskPlugin=task/affinity
    InactiveLimit=0
    KillWait=30
    MinJobAge=300
    SlurmctldTimeout=120
    SlurmdTimeout=300
    Waittime=0
    SchedulerType=sched/backfill
    SelectType=select/cons_tres
    AccountingStorageType=accounting_storage/none
    JobCompType=jobcomp/none
    JobAcctGatherFrequency=30
    JobAcctGatherType=jobacct_gather/none
    SlurmctldDebug=info
    SlurmctldLogFile=/var/log/slurm/slurmctld.log
    SlurmdDebug=info
    SlurmdLogFile=/var/log/slurm/slurmd.log
    NodeName=master CPUs=1 State=UNKNOWN
    PartitionName=debug Nodes=ALL Default=YES MaxTime=INFINITE State=UP
    
    • 必要なディレクトリを作成し、Slurmユーザーの所有権を設定します。
    # mkdir /var/log/slurm
    # mkdir /var/spool/slurmctld
    # mkdir /var/spool/slurmd
    # chown slurm:slurm /var/log/slurm
    # chown slurm:slurm /var/spool/slurmd
    # chown slurm:slurm /var/spool/slurmctld
    
    • Slurmサービスを起動し、ステータスを確認します。
    # systemctl enable --now slurmctld.service
    # systemctl status slurmctld.service
    # systemctl enable --now slurmd.service
    # systemctl status slurmd.service
    

    sinfoコマンドでSlurmクラスタの状態を確認します。

    PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
    debug*       up   infinite      1   idle master
    

    上記のように表示されればOKです。

  2. OpenOnDemandインストール

    # sudo dnf config-manager --set-enabled crb
    # sudo dnf install -y epel-release
    # sudo dnf module enable ruby:3.3 nodejs:20
    # sudo dnf install -y https://yum.osc.edu/ondemand/4.0/ondemand-release-web-4.0-1.el9.noarch.rpm
    # sudo dnf install -y ondemand
    # sudo dnf install -y https://yum.osc.edu/ondemand/4.0/ondemand-release-compute-4.0-1.el9.noarch.rpm
    # sudo yum install -y ondemand-compute
    

    💡 ポイント: Slurm連携のためにondemand-computeもインストールしています。

    • Apache HTTPサーバーを起動し、有効化します。
    # sudo systemctl start httpd
    # sudo systemctl enable httpd
    # sudo systemctl status httpd
    
  3. 認証、SSL設定

    • 今回は動作確認のため、PAM連携認証を設定します。本番環境ではセキュリティに問題があるため、この設定は推奨されません。
    # sudo dnf -y install mod_authnz_pam
    # sudo echo "LoadModule authnz_pam_module modules/mod_authnz_pam.so" > /etc/httpd/conf.modules.d/55-authnz_pam.conf
    # sudo cp /etc/pam.d/sshd /etc/pam.d/ood
    # sudo chmod 640 /etc/shadow
    # sudo chgrp apache /etc/shadow
    
    • 自己証明書を使用します。
    # openssl genrsa 2048 > server.key
    # openssl req -new -key server.key > server.csr
     (openssl req -new -key server.key > server.csr実行時に表示される質問は全てEnterで進めます。)
    # openssl x509 -req -days 3650 -signkey server.key < server.csr > server.crt
    # sudo mv server.key /etc/pki/tls/private/
    # sudo mv server.csr server.crt /etc/pki/tls/certs/
    
    • ood_portal.ymlファイルを編集し、サーバー名、SSL設定、認証設定を追加します。
    # vi /etc/ood/config/ood_portal.yml
    # grep -vE '^\s*#|^\s*$' /etc/ood/config/ood_portal.yml
     ---
    servername: master
    ssl:
    - 'SSLCertificateFile "/etc/pki/tls/certs/server.crt"'
    - 'SSLCertificateKeyFile "/etc/pki/tls/private/server.key"'
    auth:
    - 'AuthType Basic'
    - 'AuthName "Open OnDemand"'
    - 'AuthBasicProvider PAM'
    - 'AuthPAMService ood'
    - 'Require valid-user'
    

    💡 ポイント: 「user_map_cmd: "/opt/ood/ood_auth_map/bin/ood_auth_map.regex"」は配布されなくなった設定のため、今回は設定していません

  4. Slurm連携設定

    • OpenOnDemandにSlurmクラスタを認識させるための設定ファイルを作成します。
    # sudo mkdir -p /etc/ood/config/clusters.d
    # vi /etc/ood/config/clusters.d/cluster.yml
    # cat /etc/ood/config/clusters.d/cluster.yml
    ---
    v2:
      metadata:
        title: "My Test Cluster"
      login:
        host: "master"
      job:
        adapter: "slurm"
        bin: "/usr/local/bin/"
    

    💡 ポイント: cluster.ymlはクラスタ名.ymlとしています。

    • OpenOnDemandポータルを更新し、Apache HTTPサーバーを再起動します。
    # sudo /opt/ood/ood-portal-generator/sbin/update_ood_portal
    # systemctl restart httpd
    

ブラウザで「https://master」にアクセスすると、認証画面が表示されます。 ローカルユーザー「life」のユーザー名とパスワードを入力してログインします。

これで、OpenOnDemandのWebインターフェースからSlurmクラスタが利用できるようになりました!

まとめ

OpenOnDemandとSlurmを組み合わせることで、HPC環境がよりユーザーフレンドリーになり、研究者や学生が計算資源を最大限に活用できるようになります。 CLI操作のハードルを下げ、視覚的な管理と効率的なワークフローを提供することで、皆様の研究・開発活動を強力に後押しします。

私たちライフマティックス株式会社では、このようなHPC環境の導入や設定、運用に関するご支援も行っています。 Slurmの構築・運用でお困りのことがございましたら、ぜひお気軽にお問い合わせください!専門家チームが強力にサポートいたします。

次回は、OpenOnDemand上での具体的な操作についてご紹介する予定ですので、お楽しみに!