2016-06-29 5 views
10

自分のKubernetesクラスタでMPIジョブを実行したい。コンテキストは、私が実際には近代的な、きれいにコンテナ化されたアプリを実行しているということですが、ワークロードの一部はいつでもすぐに書き直されることのない伝統的なMPIの仕事です。そして、私はそれをkubernetes "世界観 "を可能な限り大きくしています。KubernetesとMPI

最初の質問:kubeクラスタでMPIジョブを実行するのに成功した人はいますか?私はChristian Kniep'sがdockerコンテナで動作するようにMPIジョブを取得するのを見てきましたが、彼はドッカーのスウォームパス(各コンテナで実行されているconsulを使ったピア発見)を行っています。この情報を外部から容器に注入する。アプリケーションのすべての部分を完全に制御できます。使用するMPI実装を選択できます。

私は続行する方法についてのアイデアをいくつ持っている:SLURMおよびアプリケーション・コードを含む

  1. 脂肪コンテナ - >コンテナ 起動時にピアに関する適切な情報を slurm.confを移入します - >ジョブにのみOpenMPIの(無SLURM)と

  2. スリムコンテナを開始するコンテナのエントリポイントとして使用SRUN - >( kubernetesによって提供された)外部からの情報と、容器内の rankfile移入 - >使用のmpirunをコンテナエントリポイントとして

  3. 私は基本的にMPIランタイムを で "偽装"しています。 OpenMPIのオルテのもの) - > が直接mpicc'dバイナリを実行します(それはenvを通じた仲間 を知るだろう場所は

  4. は絶望

  5. にあきらめて他のいくつかのオプションをvarsの

MPIのような "確立された"ワークフローと、kubernetesとコンテナの "新しい魅力"を混在させようとしているのは、インピーダンスのミスマッチです。しかし、ポインタを探しています。間違った経路。何も存在しなければ、私はいくつかのものをハックして上流に押し戻すことができてうれしいです。

+0

私はオプション3がうまくいくとは思っていません。 Open MPIの「orterun」(mpirunとmpiexec)は、実行可能ファイルを複数回起動するだけではありません。これは、ランク間の中央情報ブローカーとして機能します。オプション2は最も合理的です。 –

答えて

1

あなたはHW固有のMPIライブラリを使用したくないと仮定すると、(通信ファブリックへの直接アクセスを使用する例を何のために)、私は、2

  1. 最初のオプションと一緒に行くためのラッパーを実装します kubernetes APIを使用して、特に サービスを使用している場合はエンドポイントを使用して、必要なデータを入力するmpirunは、ポッドの公開された ポートを直接スクラップする可能性があります。

  2. は(私はMPIははかないノードを扱う方法も知らない )実際の実行コードを開始する前に 「ランデブー」の同期のために使用することができるチェックポイントプログラムのいくつかのフォームを追加します。これは、mpirunのは、起動時にそれが

  3. を使用し、最終的には、実際に必要なコードの入った容器を構築し、私は 他のポッド内のプロセスを開始するために使用するmpirunためにSSHサービスを推測 するポッドの安定的なセットを持っていることを確認 にあります。


もう一つの興味深いオプションはおそらくさえkubernetes上で実行されているMPIマシンの「仮想」クラスタを実装する内部SLURM、で実行し、ステートフル設定を使用することです。

これにより、各ノードに安定したホスト名が提供され、検出の問題が軽減され、状態を追跡できます。ステートフルに割り当てられたストレージをコンテナのローカルワークファイルシステムに使用することもできます(一部の作業では、たとえば常に同じローカルSSDを参照することができます)。

もう1つの利点は、おそらく実際のアプリケーションでは最も侵襲性が低いということです。

+0

ええ、私はこの質問をして以来、Kubernetesでこれを行うための新しい方法がいくつかあります。しかし、それらのうちのどれかを試してみる機会はありませんでした:) – Ben

+0

@benあなたのコメントであなたが話しているこれらの新しいアプローチに私を指摘できますか?ありがとうございました! –

+0

よく、それは親切なコメントでしたが、私は主にインフラストラクチャーをセットアップするためのヘルムチャートやソネットのようなものを指していました(私は決してそれを正しくやったことはありませんでした) – Ben

0

私はKubernetesでMPI Jobsを数日間試して、dnsPolicy:NonednsConfigCustomDNS=trueフィーチャーゲートが必要です)を使って解決しました。

ここで私のマニフェストを(ヘルムチャートとして)プッシュしました。

https://github.com/everpeace/kube-openmpi

私はそれが役立つだろう願っています。