HPC Pack 2012 R2で最新のクラスタ!InfiniBandも使えます - その2: 計算ノードデプロイ編

いよいよクラスタ構築

前回の記事では、Azure上に仮想ネットワークと仮想マシンを作成して、HPC Pack 2012 R2をインストールし、ヘッドノードを構築するところまでを解説しました。今回は、計算ノードをデプロイしてMPI診断テストを流すところまでです。

証明書設定

Windows Azure計算ノードをデプロイするためには、Windows Azureの「サービス管理API」というやつを呼び出す必要があります。この、面倒なAPI呼び出しそのものはHPCクラスタマネージャがやってくれるので楽ちんなのですが、サービス管理APIを呼び出すためには、クライアント証明書による認証が必要です。

Windows Azure サービス管理 API では、サービスに対して行われた要求が安全であることを保証するために、SSL を介した管理証明書の相互認証が必要です。匿名の要求は許可されません。
https://msdn.microsoft.com/ja-jp/library/windowsazure/ee460782.aspx

そのため、

  • APIを呼び出す主体を表す公開鍵証明書と、それに対応する秘密鍵を準備する。
  • 上記証明書を、Azure管理ポータルに「管理証明書」として追加する。

という二つの作業が必要です。面倒ですね。しかしご安心ください。「とりあえず簡単に試してみたい」という方のために、HPC Packのインストールと同時に自己署名証明書がWindowsの証明書ストアにインストールされるようになっています。今回はこれを使いましょう。

証明書の確認

まずは、証明書の存在を確認してみましょうか。PowerShellで。あ、GUIじゃないと...っていう人は、certlm.mscを使ってください。

PS C:\> dir Cert:\LocalMachine\My | ?{$_.Subject -match "HPC Azure"} | ft Subject,Thumbprint,HasPrivateKey -AutoSize

Subject Thumbprint HasPrivateKey
------- ---------- -------------
CN=Default Microsoft HPC Azure Management B6D115671BBD3E6C028803AF9E9DE8DBC0DDD6F2 True
CN=Microsoft HPC Azure Client 4D1664C80F2233F8C226DB1866CDD2CD496E26F0 True

PS C:\> dir Cert:\LocalMachine\Root | ?{$_.Subject -match "HPC Azure"} | ft Subject,Thumbprint,HasPrivateKey -AutoSize

Subject Thumbprint HasPrivateKey
------- ---------- -------------
CN=Default Microsoft HPC Azure Management B6D115671BBD3E6C028803AF9E9DE8DBC0DDD6F2 False
CN=Microsoft HPC Azure Client 4D1664C80F2233F8C226DB1866CDD2CD496E26F0 False
CN=Microsoft HPC Azure Service 1F679606346CC62187600E7CD6AA4966EB83EA90 False

赤字部分の”Default Microsoft HPC Azure Management”がHPC Packと共にインストールされた、テスト用証明書です。LocalMachine\Myに鍵ペアが、LocalMachine\Rootに公開鍵証明書が入ってます。

証明書のエクスポート

Rootに入っている方を.cerファイルにエクスポートして、Azure管理ポータルにアップロードします。このコマンドは「管理者として実行」したPowerShellでお願いします。あ、GUIじゃないと...っていう人は、またしてもcertlm.mscを使ってください。

  • 証明書のThumbprint部分は、環境に応じて適切に置き換えてください。
  • c:\sasahpc.cer”の部分は出力されるファイル名です。これも適切に置き換えてください。

PS C:\> Get-Item Cert:\LocalMachine\Root\B6D115671BBD3E6C028803AF9E9DE8DBC0DDD6F2 | Export-Certificate -Type CERT -FilePath c:\sasahpc.cer

    Directory: C:\

Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2/19/2014 9:54 AM 822 sasahpc.cer

エクスポートできましたか?

証明書のアップロード

次に、これをアップロードするためにブラウザでWindows Azure管理ポータルへアクセスし、「設定」→「管理証明書」タブで「アップロード」ボタンをクリックします。

image

先ほどエクスポートした.cerファイルを選択します。

image

こうなれば完了です。

image

クラウドサービスとストレージアカウントの準備

Azure管理ポータルを開いたついでに、HPC用のクラウドサービスとストレージアカウントを作っておきましょう。Windows Azure計算ノードはAzureの「クラウドサービス」機能(PaaS)におけるWorkerロールのインスタンスとしてデプロイされます。それを配置するためのクラウドサービスです。ストレージアカウントは、そのパッケージファイルなどを置くために使われます。

作り方は非常に簡単なので詳しく書きませんが、一つ大事な大事な注意点があります。

HPC用インスタンスであるA8,A9は、(いまのところ)
US North Central(米国中北部)と
Europe West(西ヨーロッパ)にしかありません!

というわけで、計算ノードを収めるクラウドサービスは、上記2リージョンのどちらかに作ってください。私はUS North Centralに作ってみました。これはシカゴです。シカゴのHPCインスタンスといえば、TOP500に載ったクラスタそのもの!(だと思います)

image

同様に、ストレージアカウントも作成します。

image

これでAzure側の準備は完了です。

HPCクラスタの初期設定

ようやくHPCの設定ができまね。ヘッドノードでHPCクラスタマネージャを起動します。

“Required deployment tasks (Incomplete)”というのが出ているかと思います。これをすべてクリアしなければ、使い始めることができません。面倒ですね。

image

サクサクと片付けましょう。

ネットワーク構成 (Configure your network)

まず、ネットワーク構成の選択です。ヘッドノードはNICを一枚しか持っていませんので、ここはトポロジ5しか選択できません。このまま進んでください。

image

次の画面もこれしか選択しようがありませんので、そのまま進みます。

image

次にファイアウォールの設定が出てきますが、これはオンプレミスのクラスタ用で、Windows Azure計算ノードにはあまり関係がありません。デフォルトのまま進みましょう。

image

完了!

image

次行きましょう。

インストール資格情報 (Provide installation Credentials)

これも実はWindows Azure計算ノードを使うだけならあまり関係ありません。ここではドメインの管理者を入力してみました。

image

新規ノードの命名規則 (Configure the naming of new nodes)

これまたオンプレミス用の設定です。WDSで計算ノードにOSを注入するときのホスト名生成規則です。Windows Azure計算ノードには適用されませんので、デフォルトのままでも構いません。

image

ノードテンプレートの作成(Create a node template)

さぁ、ようやくWindows Azureに関係する設定です。Windows HPCでは、計算ノードをデプロイするために「ノードテンプレート」というものを使うのですが、Windows Azure計算ノードをデプロイするためには、「Windows Azure計算ノードテンプレート」というものを作ります。

”Windows Azure node template”を選びます。

image

つぎに、ノードテンプレートに名前を付けます。

  • 後々コマンドラインで打つこともある(かもしれない)名前なので、英数字で短めにつけておくことをお勧めします。

image

さて、ここからが肝心です。

image

  • Subscription IDはAzureのサブスクリプションIDです。管理ポータルからコピペしましょう。

image

管理証明書は、先ほどの”Default Microsoft HPC Azure Management”を選択します。

image

次の画面に進んで、クラウドサービスとストレージアカウントの選択をします。先ほど作成したやつを選んでください。

image

次に、プロキシノードの配置ポリシーを設定します。プロキシノードとは、ヘッドノードと計算ノードのやり取りを仲立ちする役目を果たすものですが、良くわからなければつまりデフォルトが最善です。

image

今度は計算ノードのゲストOSのバージョンを選択します。

ここもぜひ最新バージョンで!といいたいところなのですが、一つ注意点があります。

A8,A9を使う場合は、Windows Server 2012 R2を選択しないでください。

残念なことに、2012 R2ではInfiniBandが使えないのです。ここでは2012を選んでみました。

image

次にスタートアップスクリプトの設定です。これは、計算ノードの起動時に毎回実行されるバッチファイルを指定できる、という項目です。今回は特に設定せずに進みます。

image

次は、Windows Azure仮想ネットワーク (VNET)への参加設定です。今回は計算ノードをVNETに参加させませんので、空欄のまま進みます。

まだあるんです。今度はリモートデスクトップの資格情報設定。これを設定しておくと、計算ノードにRDPでログオンできるようになります。新しいA8,A9にログオンしてタスクマネージャとか見てみたいですよね!というわけで設定しました。

image

もうすぐ終わりです。計算ノードを任意のタイミングで手動起動・停止するか、あるいはスケジュールに従って自動起動・停止するか、という選択です。ここはデフォルトの「手動」のままいきます。

image

ようやく完了です!”Create”をクリッキングしてください。

image

Azure計算ノードのデプロイ

いよいよ!計算ノードをデプロイしてみましょう。HPC用の新インスタンスA9を!

HPCクラスタマネージャの左ペインで”Node Management”をクリックし、今度は右ペインから”Add Node…”をクリックします。

“Add Windows Azure nodes“を選んで次へ。image

A9行っちゃいましょう!(でもちょっとビビッて4ノード…)

image

”Finish”でウィザードを完了させると、ノード一覧に今追加したノードが出てきましたね。しかし、”Not-Deployed”となっている通り、この状態ではまだAzureにデプロイされていません。課金も発生しません。

image

ノードを右クリックして、”Start”します。

image

次に出てくる確認画面で”Start”をクリックすると、Azureへのデプロイが始まります。

image

たぶん10分くらいはかかるので、プロビジョニングログでも眺めながら待ちましょう。

image

Windows Azure管理ポータルのほうから覗いてみるのも良いですね。プロキシノードと計算ノード、2種類のロールが定義されていることがわかります。

っていうか、HPCインスタンスの場合はプロキシノードもA8にグレードアップされるんですね!(課金が怖い…)

image

あ、できました。10分かかりませんでしたね!

image

MPI診断テストを実行してみる

Windows HPCにはクラスタの状態を診断する様々なテストが内蔵されています。その中に、Azure計算ノードのMPI性能テストがあります。これを試してみましょう。

下の図のように、Diagnostics → Windows Azure → Windows Azure MPI Communication Test をダブルクリックします。

image

Azure計算ノードたちは、”Azures Nodes”というノードグループに所属していますので、このグループを選択して”Run”します。

image

こんなダイアログが出てきたら、”ドメイン名\ユーザー名”形式のユーザー名と、そのパスワードを入力してください。

image

見せてもらおうか。InfiniBand QDR with RDMAの性能とやらを!

正常に完了したらここ(下図)の”Success”が増えますので、わかります。

image

テスト結果には、各ノードで計測された「もっとも遅延の大きかった(=成績悪かった)」結果が報告されます。おおむね4マイクロ秒前後だからなかなかやるじゃなぁい!仮想マシンのくせに。

image

MPIピンポンもやってみる

mpipingpongというのは、HPC Packに含まれるツールで、MPI通信の遅延と帯域を計測してくれます。これをジョブとしてクラスタに投入してみましょう。

ヘッドノードでコマンドプロンプトを開いて、次のコマンドを実行してください。

job submit /numnodes:4 /nodegroup:azurenodes mpiexec -c 1 -affinity mpipingpong -pb -op -s nul

すると、クラスタへジョブが投入されますので、HPCクラスタマネージャで確認してみましょう。左ペインで”Job Management”をクリックします。

動いてますね!(ジョブID 13が”Running”です)

image

先ほどのジョブはすぐ終わって”Finished”になります。ダブルクリックして結果を確認してみましょう。

“View Tasks”でジョブの出力を確認できます。

image

クリップボードにコピーする機能もあるので、ここに貼ってみましょうか。パケットサイズを変えて2回のテストが行われています。

1回目は4バイト、遅延が3マイクロ秒ぐらい。なかなかやるじゃなぁい!

Testing packet size 4 (1024 iterations per link)

Ping Node Pong Node Latency Throughput
(usec) (MB/sec)
-----------------------------------------------------------------------
AZURECN-0001 AZURECN-0002 3.151 1.211
AZURECN-0001 AZURECN-0003 3.112 1.226
AZURECN-0001 AZURECN-0004 3.131 1.218
AZURECN-0002 AZURECN-0003 3.246 1.175
AZURECN-0002 AZURECN-0004 3.196 1.194
AZURECN-0003 AZURECN-0004 3.170 1.203

2回目は4Mバイト、スループットが3.6GB/sでてますね。QDR InfiniBandで実効帯域が32Gbps(=4GB/s)なので、なかなかやるじゃなぁい!

Testing packet size 4194304 (16 iterations per link)

Ping Node Pong Node Latency Throughput
(usec) (MB/sec)
-----------------------------------------------------------------------
AZURECN-0001 AZURECN-0002 1101.581 3631.144
AZURECN-0001 AZURECN-0003 1100.841 3633.587
AZURECN-0001 AZURECN-0004 1100.122 3635.961
AZURECN-0002 AZURECN-0003 1100.263 3635.496
AZURECN-0002 AZURECN-0004 1102.538 3627.995
AZURECN-0003 AZURECN-0004 1100.262 3635.496

というわけで、次回はLizardでLinpack流してみましょうか!

関連情報

__END__