メインコンテンツまでスキップ

IBM Spectrum LSF

ライセンスを使うジョブがキューに入る前に LSF が LicOps にシートを要求するようにするには、OpenLM LSF アダプターをインストールします。ユーザーがジョブのリソース要求に openlm[...] ブロックを追加すれば、あとは LSF が処理します。LicOps が拒否したジョブはキューに入りません。

まずお使いのクラスターでテストする

LSF のサポートはアーリーアクセスです。アダプターを本番で利用する前に、本番以外のキューで動作を確認するの確認を実施してください。

アダプターが LSF に組み込まれる仕組み​

3 つのリクエスト、それぞれを送信するアダプター、実行場所、タイミングを次の表に示します。

リクエストアダプター実行場所タイミング
許可(Admit)esub.openlm(LSF の esub)各投入ホストジョブの投入時、ジョブが mbatchd に届く前
ディスパッチ(Dispatch)ol-pre-exec(キューの PRE_EXEC として実行)ジョブの最初の実行ホストジョブの開始時
解放(Release)ol-post-exec(キューの POST_EXEC として実行)ジョブの最初の実行ホストジョブの終了時(終了の仕方は問わない)

esub.openlm はセッション ID をジョブの環境変数 OL_SESSION_ID に保存し、キューのフックはそこからセッション ID を読み取ります。LSF の構成によっては POST_EXEC の前にこの変数が削除されるため、ol-pre-exec はセッション ID を実行ホスト上の小さなファイルにも書き込み、ol-post-exec は変数がない場合にそのファイルを使います。

Slurm と異なり、LSF ではライセンスマップは不要です。ベンダーとフィーチャーは、ジョブ自体のリソース要求で渡されます。

はじめに​

次の前提条件を確認します。

  • OpenLM LicOps を設定するの説明どおりに LicOps が稼働しており、プールを認識していること。
  • LSF 管理ホスト、実行ホスト、すべての投入ホストから、ポート 8100 で LicOps に到達できること。
  • 管理ホスト、実行ホスト、すべての投入ホストに、curl と jq がインストールされていること。
  • 管理ホストで lsb.queues を編集して badmin reconfig を実行でき、各投入ホストで $LSF_SERVERDIR に書き込めること。
  • OpenLM から提供される LSF 用の OpenLM HPC アダプターパッケージと統合キットがあること。

アダプターをインストールする​

アダプターをインストールするには、次の手順を実行します。

  1. LSF 管理ホスト上でアダプターパッケージを展開します。

  2. 管理ホストから、統合キットの verify-router.sh で LicOps を確認します。

    ./lsf/verify-router.sh --base-url http://<licops-host>:8100/api/v1/admission-controller
  3. 管理ホスト上で、ディスパッチと解放のフックをキューに組み込みます。

    sudo ./lsf/install-lsf-adapters.sh --role master --queue normal \
    --base-url http://<licops-host>:8100/api/v1/admission-controller

    インストーラーはアダプターを /opt/openlm/hpc にコピーし、/etc/openlm/hpc-adapter.conf を作成し、lsb.queues をバックアップしてから、指定したキューに PRE_EXEC と POST_EXEC を追加し、badmin reconfig を実行します。PRE_EXEC や POST_EXEC がすでに別のスクリプトを指している場合、インストーラーはそれを上書きしません。1 回の実行で組み込めるキューは 1 つだけです。ライセンスを使うジョブを実行するキューごとに、--queue を変えて再度実行してください。

  4. すべての投入ホストに esub をインストールします。

    sudo ./lsf/install-lsf-adapters.sh --role submit \
    --base-url http://<licops-host>:8100/api/v1/admission-controller

    管理ホストから投入ホストへ一度にインストールするには、--role master のコマンドに --submit-nodes host1,host2 を追加します。この場合、それらのホストにパスワードなしの root SSH で接続できる必要があります。

  5. すべてのホストで /etc/openlm/hpc-adapter.conf を開き、次の値を設定します。インストーラーは初回にテンプレートからこのファイルを作成して OL_BASE_URL を入力し、以降は上書きしません。

    設定値
    OL_FAIL_MODE_ADMIT、OL_FAIL_MODE_DISPATCHopen または closed。LicOps に到達できない場合の動作を決めるを参照してください。
    OL_CLUSTER_NAME任意。LicOps が LSF クラスターの名前を知る唯一の方法です。
    OL_STATE_DIR任意。実行ホスト上で PRE_EXEC と POST_EXEC の両方からアクセスできるディレクトリ。問題が発生した場合を参照してください。

どちらのコマンドも、まず --dry-run を付けて実行すると、行われるすべての変更を事前に確認できます。どちらも何度実行しても問題ありません。

両方のロールをインストールする

投入ホストに esub がないと、ジョブは LicOps に問い合わせずにキューに入ります。キューのフックがないと、ジョブは許可されてもディスパッチも解放もされないため、そのシートはセッションのタイムアウトまで保持されたままになります。

ライセンスを使うジョブを投入する​

ユーザーは -a openlm で esub を選択し、openlm[...] ブロックでプールを指定します。

bsub -a openlm -R "openlm[vendor=MLM:feature=MATLAB:count=1]" ./my-simulation.sh

vendor と feature は、大文字と小文字の区別も含めてプールと完全に一致している必要があります。GET /api/v1/stats からコピーしてください。フィーチャー名に含まれるスペースは、feature=Acrobat%20Pro のように %20 と書きます。count はシート数で、既定値は 1 です。同じブロックを、ジョブスクリプトの先頭の #BSUB -R の行として書くこともできます。

許可の確認を省略できないようにするには、ユーザーが -a openlm を指定することに頼らず、lsf.conf で openlm を必須の esub として構成します。openlm[...] ブロックのないジョブは、そのまま通過します。

各ジョブが要求できるのは、1 つのベンダーとフィーチャーです。2 つの異なる製品を必要とするジョブは、1 回の投入で両方を要求することはできません。

チェックアウトを LicOps 経由でルーティングする​

既定では、アダプターが制御するのはジョブの開始タイミングで、アプリケーションは自身の設定にあるライセンスサーバーからチェックアウトします。アプリケーションが LicOps を経由してチェックアウトし、LicOps が選んだサーバーからライセンスを取得するようにするには、両方のインストールコマンドに --lb-endpoint 30001@<licops-host> を追加します。/etc/openlm/hpc-adapter.conf がすでに存在する場合、インストーラーはそのファイルを変更しないため、各投入ホストで OL_LB_ENDPOINT="30001@<licops-host>" を自分で追加してください。

これにより、esub はジョブの LM_LICENSE_FILE の先頭に 30001@<licops-host> を追加し、既存の値はフォールバックとしてその後ろに残します。LicOps にサーバーも選ばせるかどうかを決めるを参照してください。

多くのアプリケーションは、LM_LICENSE_FILE より先に独自の変数を読み取ります。たとえば MATLAB は MLM_LICENSE_FILE を読み取ります。そのような変数が設定されている場合はそちらが優先され、アプリケーションは LicOps を経由せずにチェックアウトします。

動作を確認する​

アダプターをテストするには、投入ホストから次のコマンドを実行します。

bsub -a openlm -R "openlm[vendor=MLM:feature=MATLAB:count=1]" sleep 30
tail -f /var/log/openlm/hpc-adapter.log

ログには、投入時に許可、ジョブの開始時にディスパッチ、終了時に解放が記録されます。ジョブが許可済みまたは実行中の間は、GET /api/v1/stats に表示されるプールの reserved の数が 1 多くなります。

また、解放がセッションのタイムアウト後ではなく、POST_EXEC の実行時に行われることも確認してください。ジョブが終了するとすぐに reserved の数が減るはずです。

問題が発生した場合​

症状、原因、対処を次の表に示します。

症状原因対処
何も許可されない。$LSF_SERVERDIR に esub.openlm がないか、-a openlm を付けずにジョブが投入されています。投入ホストのロールをインストールするか、esub を必須にします。
ol-common.sh not foundアダプターのフォルダーが別々の場所に移動されたか、$LSF_SERVERDIR の esub がシンボリックリンクに置き換えられています。/opt/openlm/hpc 配下のインストール時の構成を維持し、インストーラーが書き込んだ 1 行の esub ラッパーをそのまま残します。
フックがまったく実行されない。badmin reconfig が実行されていないか、フックのないキューでジョブが実行されています。bqueues -l <queue> で PRE_EXEC と POST_EXEC を確認します。
シートがセッションのタイムアウト後にしか戻らない。POST_EXEC で OL_SESSION_ID が失われ、代わりのファイルも読み取れませんでした。実行ホスト上で PRE_EXEC と POST_EXEC の両方からアクセスできるディレクトリを OL_STATE_DIR に設定します。
ライセンスを使うジョブが、投入時にすべて拒否される。LicOps に到達できず OL_FAIL_MODE_ADMIT=closed になっているか、OL_BASE_URL が間違っています。その投入ホストから verify-router.sh を実行します。
開始後にジョブがキューに戻される。ディスパッチ時に LicOps に到達できず、OL_FAIL_MODE_DISPATCH=closed になっています。LicOps を復旧するか、ディスパッチを open に切り替えます。

アダプターを削除する​

削除内容をプレビューしてからアダプターを削除するには、次のコマンドを実行します。

sudo ./lsf/uninstall-lsf-adapters.sh --dry-run
sudo ./lsf/uninstall-lsf-adapters.sh

アンインストーラーは、インストーラーが残した記録 /etc/openlm/hpc-adapter.install を読み取り、そのインストールで追加されたものだけを削除します。

ドキュメントチームは、大規模言語モデルを使ってこのページを下書きすることがあります。公開前に、テクニカルライターがすべてのページをレビューし、製品と照らし合わせて検証します。最終的な判断は人間が行います。