JupyterLabを使って、Web GUIに対応したジョブランチャーを作成することができます。
今回のTech Blogでは、JupyterLabを使ったジョブランチャーの作成方法について解説します。
実現したいこと/実現できること
JupyterLabでジョブランチャーを簡単作成し、これにより以下を実現します。
- HPC初心者でもジョブを実行できるユーザフレンドリーなインターフェイスの提供
- 解析ワークフローが変わっても、すぐにジョブランチャーを修正/更新できる柔軟性の提供
従来の課題
製造業のシミュレーションエンジニアは大きく分けて2タイプに分類されます。
- タイプA:シミュレータを道具として利用し、設計や解析業務にフォーカスするエンジニア
- タイプB:高いコンピューティングスキルを使ってシミュレーションの解析ワークフローを構築し、CAE/CFDの技術開発を行うエンジニア
タイプAのエンジニアは、普段Windows環境を利用しており、LINUXのコマンドラインやHPCの使いこなしに苦労するケースも多く、タイプBのエンジニアが作成したテンプレートや、ワークフローについてまとめられたマニュアルに従って解析を行うケースが一般的です。しかし、タイプBのエンジニアが作成したテンプレートやマニュアルは、タイプAのエンジニアにとって、使いやすいインターフェイスとは言えません。また、これに対応する専用のGUIを時間をかけて作成したとしても、解析ワークフローが改定されてしまうと、すぐに陳腐化してしまうという課題がありました。
目的
上記課題に対し以下を実現することを目的とします。
- HPC初心者でもジョブを実行できるユーザフレンドリーなジョブランチャーの提供
- 解析ワークフローが変わっても、すぐに修正や更新できる柔軟性の提供
解決手段
今回、JupyterLabがジョブスケジューラーのマスターノードにインストールされている環境を想定し、以下の2つを用いて上記目的を達成します。
- ipywidgetsを使ってJupyter Notebook上にジョブランチャーを作成します。
- JupyterLabのエクステンション機能jupyterlab_templatesを使ってこのジョブランチャーをテンプレートとして登録し、Adminが一元管理できるようにします。
ipywidgets
ipywidgetsはjupyter-widgetsまたは単にウィジェットとも呼ばれ 、Jupyter NotebookおよびIPythonカーネル用のインタラクティブなHTMLウィジェットです。Jupyter Notebook 上でこのパッケージをインポートして、pythonコードを書くことで、比較的簡単に Jupyter Notebook 上にジョブランチャーを作成することができです。Jupyter Notebook上のipywidgetsの動作を見てみましょう。
- 1つ目のセルはシンプルなスライダーです。スライダーを動かすことで表示される整数値が変化することがわかります。
- 2つめのセルはボタンをクリックするとslurmの
sinfo -s
コマンド が実行されます。
このように短いpythonコードでWidgetを作成することができです。また、セル上のpythonコードを編集すればすぐにWidgetに変更を加えることができます。
jupyterlab_templates
jupyterlab_templatesはJupyterLabのExtensionの一つです。このExtensionを使うと、作成したJupyter Notebookをテンプレートとして登録することができます。具体的には、Jupyter Notebookを所定のディレクトリーに置くだけで、このNotebookを、グループ間もしくは個人で利用できるテンプレートとして登録することができます。また、登録したテンプレートをLauncher画面のTemplateアイコンから選択できるようになります。つまり、所定のディレクトリーに保存するだけで登録されるため、ジョブランチャーに変更があっても、そのデプロイ作業が簡単にすることができ、Adminユーザはテンプレートを一元的に管理することができます。先程作成したJupyter Notebookをjupyterlab_templatesに登録したときの動作を見てみましょう。
- 一度登録するとTemplateアイコンから、登録済みのテンプレートを選択でき、このテンプレートを使い回すことができます。
- 複数のバージョンを登録することで簡単なバージョン管理も可能です。また、Jupyterlab_templatesの共有ディレクトリーに配置し登録することで、作成されたジョブランチャーのテンプレートを社内で共有することができます。
- ユーザーがあらかじめ選択したディレクトリーに、先程選んだテンプレートを元に作成された
untitled.ipynb
というファイルができているので、この名前を変更します。 - 実行ボタンを押し、ジョブランチャーを生成します。
- 先程と同じく、スライダーと
sinfo -s
コマンドを実行するボタンが表示されます。 - 各セルに記述したpythonコードはあらかじめ非表示にしていますので表示します。
出来上がり例
ここではAnsys Fluentを例としたジョブランチャーのサンプルを見てみます。
- Ansys Fluentの “.jou” ファイルがあるディレクトリに移動し、先程と同様にFluentのテンプレートを選択、実行ボタンをおしてジョブランチャーのGUIを表示します。
- Ansys Fluent実行に必要なパラメーター、ジョブ名、コア数、インプットファイル名などを入力します
Create run.sh
のボタンを押してSlurm実行に必要なランスクリプトを生成します。#SBATCH
で始まるSlurmの設定や、Fluent実行に必要なパラメータをもったファイルが作成されていることを確認します。RUN
ボタンをクリックしジョブを実行します。- ライセンス消費状況を確認します。
まとめ
ipywidgetsを使ってJupyter Notebook上にジョブランチャーを作成し、このNotebookをjupyterlab_templatesに登録することで、以下を実現可能なことを示しました。
- HPC初心者でもジョブを実行できるユーザフレンドリーなジョブランチャーを提供できること
- 解析ワークフローが変わったとして、notebook上のipywidegetのコード変更し、jupyterlab_templatesに再登録することで、すぐに修正や更新できる柔軟性も提供できること
言い換えれば、簡単にブラウザー上で動作するGUIを作成でき、設計現場でジョブランチャーを簡単に作成することが可能ことを意味します。
<著者について>
長尾太介はCTOとしてAXXE-Lの開発をリードしています。
最初にユーザーとしてHPCと関わり、その後、クラウド、深層学習、AIなどに専門性を広げてきました。
彼は趣味であるジャズピアノを演奏しながらも、常に新しい技術を追いかけています。