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 アダプターパッケージと統合キットがあること。
アダプターをインストールする
アダプターをインストールするには、次の手順を実行します。
-
LSF 管理ホスト上でアダプターパッケージを展開します。
-
管理ホストから、統合キットの
verify-router.shで LicOps を確認します。./lsf/verify-router.sh --base-url http://<licops-host>:8100/api/v1/admission-controller -
管理ホスト上で、ディスパッチと解放のフックをキューに組み込みます。
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を変えて再度実行してください。 -
すべての投入ホストに
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 で接続できる必要があります。 -
すべてのホストで
/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 を読み取り、そのインストールで追加されたものだけを削除します。
ドキュメントチームは、大規模言語モデルを使ってこのページを下書きすることがあります。公開前に、テクニカルライターがすべてのページをレビューし、製品と照らし合わせて検証します。最終的な判断は人間が行います。