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

ワークロードを接続する

LicOps が実行の可否を判断するのは、LicOps に問い合わせたジョブだけです。ライセンスを使うすべてのジョブは、投入時の admit(許可)、開始時の dispatch(ディスパッチ)、終了時の release(解放)という 3 つのリクエストを送る必要があり、環境内の何かがそれらのリクエストを送らなければなりません。ジョブを実行する環境に合った連携方法を選択してください。

ジョブの実行環境使用するものリクエストを送るもの
SlurmSlurm アダプター投入ノード上の sbatch ラッパーと、コントローラーの prolog および epilog フック。
IBM Spectrum LSFLSF アダプター投入ホスト上の esub と、キューの PRE_EXEC および POST_EXEC フック。
KubernetesKubernetes ワークロードアノテーションを付けた Pod の場合はアドミッション Webhook、またはジョブ自体。
その他アドミッション API を呼び出す独自のラッパー、スクリプト、またはサービス。

OpenLM は、Slurm と LSF のアダプターに加えて、ラッパースクリプト、Python クライアント、API の OpenAPI 記述、Kubernetes のサンプルを含むインテグレーションキットを提供しています。入手するには OpenLM にお問い合わせください。

その他のスケジューラーでは、投入時のフックからアドミッション API を呼び出します。アドミッション API を呼び出すを参照してください。

接続する前に​

ワークロードを接続する前に、LicOps のアドレスを確認し、ライセンス名を正しく指定し、LicOps に到達できない場合の動作を決めます。

LicOps のアドレスを確認する​

どの連携にも、ポート 8100 の LicOps アドミッション API というアドレスが 1 つ必要です。呼び出し元ごとのアドレスを次の表に示します。

呼び出し元アドレス
Slurm または LSF のアダプターhttp://<licops-host>:8100/api/v1/admission-controller
同じ Kubernetes クラスター内のワークロードhttp://openlm-router-api.<namespace>.svc:8100
独自のツールhttp://<licops-host>:8100。パスは API リファレンスを参照してください。

アドレスを確認するには、自分のワークステーションからではなく、呼び出しを行うホストから次のコマンドを実行します。

curl -s -o /dev/null -w '%{http_code}\n' http://<licops-host>:8100/api/v1/status

200 が返れば、アドレスは正しいです。ポート 30001 は API ではありません。このポートは FlexLM プロトコルを使うため、HTTP リクエストを送ると応答が返らないか、失敗します。

正確なライセンス名を使う​

各リクエストは、MLM と MATLAB のように、ベンダーデーモンとフィーチャーでプールを指定します。名前は大文字・小文字も含めて、プールと完全に一致する必要があります。mlm や Matlab を指定したリクエストはどのプールにも一致せず、NoServerAvailable として拒否されます。これは入力ミスではなく、障害のように見えます。OpenLM LicOps を設定するの説明に従って、GET /api/v1/stats から名前をコピーしてください。

Acrobat Pro のように、スペースを含むフィーチャーもあります。API には実際のスペースを含めて送信します。Slurm のライセンスマップはそれ自体がスペース区切りのため、スペースを %20 と記述します。アダプターは LicOps を呼び出す前に、これをスペースに戻します。

どのような終わり方でも解放する​

ジョブのシートは、release が届くか、セッションがタイムアウトするまでカウントされ続けます。失敗したジョブ、キャンセルされたジョブ、タイムアウトしたジョブも、成功したジョブと同じく確実に解放しなければなりません。そうしないと、誰も使っていないのにシートが占有されたままになり、ほかのジョブが拒否されます。スケジューラーのアダプターは、ジョブがどうなっても必ずスケジューラーが実行するフックから解放します。独自の連携を作成する場合は、finally ブロック、trap、または必ず実行されるフックから解放してください。

LicOps に到達できない場合の動作を決める​

LicOps が停止しているか応答が遅い場合、アダプターはシートを要求できません。そのときのアダプターの動作は、admit と dispatch でそれぞれ個別に選択します。2 つの選択肢を次の表で比較します。

項目フェイルオープン: それでもジョブを実行するフェイルクローズ: ジョブを保留または拒否する
LicOps の停止中ジョブは流れ続けます。ジョブは止まります。
リスクシート数を超えるジョブが開始し、一部はチェックアウトで失敗します。LicOps が復旧するまで、クラスターがアイドル状態になります。
適している対象シートがすでに許可されている dispatch と、ライセンス数に余裕のあるツールスループットよりもコンプライアンスが重要なライセンスの admit

Slurm と LSF のアダプターは、OL_FAIL_MODE_ADMIT と OL_FAIL_MODE_DISPATCH を読み取ります。値はそれぞれ open または closed で、どちらも既定値は open です。インテグレーションキットのラッパースクリプトには独自の設定 OL_FAIL_MODE があり、既定値は closed です。また、これらはリクエストを OL_TIMEOUT 秒(既定値は 2 秒)で打ち切ってからフェイルモードを適用するため、LicOps の応答が遅くても、ジョブの投入が長く止まることはありません。どちらにするかを意図して決め、選んだ内容を記録しておいてください。

LicOps にサーバーも選ばせるかを決める​

ジョブを開始してよいかどうかは、常に LicOps が判断します。その後、ジョブが LicOps の選んだサーバーからチェックアウトするかどうかは、チェックアウトがどのようにライセンスサーバーに届くかによって決まります。連携方法ごとのアプリケーションのチェックアウト先を次の表に示します。

連携方法アプリケーションのチェックアウト先
Slurm または LSF のアダプター(既定)アプリケーション自身のライセンス設定にあるサーバーからチェックアウトします。LicOps はジョブの実行可否を判断しますが、チェックアウト先は制御しないため、Cascade across servers in priority order のようにサーバーを選ぶルールを設定しても、チェックアウト先は変わりません。
Slurm または LSF のアダプター(チェックアウトルーティングあり)LicOps のリッスンポート 30001 を経由します。このポートが、LicOps がそのジョブのために選んだサーバーへチェックアウトを渡します。
Kubernetes のアドミッション WebhookPod 内のサイドカーを経由します。サイドカーが同じ方法でチェックアウトを LicOps に渡します。
API を呼び出す Kubernetes のジョブまたは独自の連携dispatch が返す licenseFile を LM_LICENSE_FILE に設定した場合は、dispatch が指定したサーバーからチェックアウトします。

まずはアドミッションのみで始めるのが簡単で、それだけでもシートのないジョブの開始を防げます。配置ルールをチェックアウト自体にも適用したい場合に、チェックアウトルーティングを追加します。

チェックアウトルーティングでは、LicOps は各チェックアウトを、送信元ノードの IP アドレスで識別します。計算ノードは、間にアドレス変換を挟まずに、LicOps ホストへ直接接続できる必要があります。ノードの既存のライセンス設定は LicOps のエントリの後ろにそのまま残るため、LicOps に到達できない場合、アプリケーションは通常のサーバーにフォールバックします。

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