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管理ポータルへアクセスし、「設定」→「管理証明書」タブで「アップロード」ボタンをクリックします。
先ほどエクスポートした.cerファイルを選択します。
こうなれば完了です。
クラウドサービスとストレージアカウントの準備
Azure管理ポータルを開いたついでに、HPC用のクラウドサービスとストレージアカウントを作っておきましょう。Windows Azure計算ノードはAzureの「クラウドサービス」機能(PaaS)におけるWorkerロールのインスタンスとしてデプロイされます。それを配置するためのクラウドサービスです。ストレージアカウントは、そのパッケージファイルなどを置くために使われます。
作り方は非常に簡単なので詳しく書きませんが、一つ大事な大事な注意点があります。
HPC用インスタンスであるA8,A9は、(いまのところ)
US North Central(米国中北部)と
Europe West(西ヨーロッパ)にしかありません!
というわけで、計算ノードを収めるクラウドサービスは、上記2リージョンのどちらかに作ってください。私はUS North Centralに作ってみました。これはシカゴです。シカゴのHPCインスタンスといえば、TOP500に載ったクラスタそのもの!(だと思います)
同様に、ストレージアカウントも作成します。
これでAzure側の準備は完了です。
HPCクラスタの初期設定
ようやくHPCの設定ができまね。ヘッドノードでHPCクラスタマネージャを起動します。
“Required deployment tasks (Incomplete)”というのが出ているかと思います。これをすべてクリアしなければ、使い始めることができません。面倒ですね。
サクサクと片付けましょう。
ネットワーク構成 (Configure your network)
まず、ネットワーク構成の選択です。ヘッドノードはNICを一枚しか持っていませんので、ここはトポロジ5しか選択できません。このまま進んでください。
次の画面もこれしか選択しようがありませんので、そのまま進みます。
次にファイアウォールの設定が出てきますが、これはオンプレミスのクラスタ用で、Windows Azure計算ノードにはあまり関係がありません。デフォルトのまま進みましょう。
完了!
次行きましょう。
インストール資格情報 (Provide installation Credentials)
これも実はWindows Azure計算ノードを使うだけならあまり関係ありません。ここではドメインの管理者を入力してみました。
新規ノードの命名規則 (Configure the naming of new nodes)
これまたオンプレミス用の設定です。WDSで計算ノードにOSを注入するときのホスト名生成規則です。Windows Azure計算ノードには適用されませんので、デフォルトのままでも構いません。
ノードテンプレートの作成(Create a node template)
さぁ、ようやくWindows Azureに関係する設定です。Windows HPCでは、計算ノードをデプロイするために「ノードテンプレート」というものを使うのですが、Windows Azure計算ノードをデプロイするためには、「Windows Azure計算ノードテンプレート」というものを作ります。
”Windows Azure node template”を選びます。
つぎに、ノードテンプレートに名前を付けます。
- 後々コマンドラインで打つこともある(かもしれない)名前なので、英数字で短めにつけておくことをお勧めします。
さて、ここからが肝心です。
- Subscription IDはAzureのサブスクリプションIDです。管理ポータルからコピペしましょう。
管理証明書は、先ほどの”Default Microsoft HPC Azure Management”を選択します。
次の画面に進んで、クラウドサービスとストレージアカウントの選択をします。先ほど作成したやつを選んでください。
次に、プロキシノードの配置ポリシーを設定します。プロキシノードとは、ヘッドノードと計算ノードのやり取りを仲立ちする役目を果たすものですが、良くわからなければつまりデフォルトが最善です。
今度は計算ノードのゲストOSのバージョンを選択します。
ここもぜひ最新バージョンで!といいたいところなのですが、一つ注意点があります。
A8,A9を使う場合は、Windows Server 2012 R2を選択しないでください。
残念なことに、2012 R2ではInfiniBandが使えないのです。ここでは2012を選んでみました。
次にスタートアップスクリプトの設定です。これは、計算ノードの起動時に毎回実行されるバッチファイルを指定できる、という項目です。今回は特に設定せずに進みます。
次は、Windows Azure仮想ネットワーク (VNET)への参加設定です。今回は計算ノードをVNETに参加させませんので、空欄のまま進みます。
まだあるんです。今度はリモートデスクトップの資格情報設定。これを設定しておくと、計算ノードにRDPでログオンできるようになります。新しいA8,A9にログオンしてタスクマネージャとか見てみたいですよね!というわけで設定しました。
もうすぐ終わりです。計算ノードを任意のタイミングで手動起動・停止するか、あるいはスケジュールに従って自動起動・停止するか、という選択です。ここはデフォルトの「手動」のままいきます。
ようやく完了です!”Create”をクリッキングしてください。
Azure計算ノードのデプロイ
いよいよ!計算ノードをデプロイしてみましょう。HPC用の新インスタンスA9を!
HPCクラスタマネージャの左ペインで”Node Management”をクリックし、今度は右ペインから”Add Node…”をクリックします。
“Add Windows Azure nodes“を選んで次へ。
A9行っちゃいましょう!(でもちょっとビビッて4ノード…)
”Finish”でウィザードを完了させると、ノード一覧に今追加したノードが出てきましたね。しかし、”Not-Deployed”となっている通り、この状態ではまだAzureにデプロイされていません。課金も発生しません。
ノードを右クリックして、”Start”します。
次に出てくる確認画面で”Start”をクリックすると、Azureへのデプロイが始まります。
たぶん10分くらいはかかるので、プロビジョニングログでも眺めながら待ちましょう。
Windows Azure管理ポータルのほうから覗いてみるのも良いですね。プロキシノードと計算ノード、2種類のロールが定義されていることがわかります。
っていうか、HPCインスタンスの場合はプロキシノードもA8にグレードアップされるんですね!(課金が怖い…)
あ、できました。10分かかりませんでしたね!
MPI診断テストを実行してみる
Windows HPCにはクラスタの状態を診断する様々なテストが内蔵されています。その中に、Azure計算ノードのMPI性能テストがあります。これを試してみましょう。
下の図のように、Diagnostics → Windows Azure → Windows Azure MPI Communication Test をダブルクリックします。
Azure計算ノードたちは、”Azures Nodes”というノードグループに所属していますので、このグループを選択して”Run”します。
こんなダイアログが出てきたら、”ドメイン名\ユーザー名”形式のユーザー名と、そのパスワードを入力してください。
見せてもらおうか。InfiniBand QDR with RDMAの性能とやらを!
正常に完了したらここ(下図)の”Success”が増えますので、わかります。
テスト結果には、各ノードで計測された「もっとも遅延の大きかった(=成績悪かった)」結果が報告されます。おおむね4マイクロ秒前後だからなかなかやるじゃなぁい!仮想マシンのくせに。
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”です)
先ほどのジョブはすぐ終わって”Finished”になります。ダブルクリックして結果を確認してみましょう。
“View Tasks”でジョブの出力を確認できます。
クリップボードにコピーする機能もあるので、ここに貼ってみましょうか。パケットサイズを変えて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流してみましょうか!
関連情報
- HPC Pack 2012 R2 - 日本語
https://www.microsoft.com/ja-jp/download/details.aspx?id=41630 - Run MPI Applications with HPC Pack on the A8 and A9 Compute Intensive Instances
https://msdn.microsoft.com/library/windowsazure/dn592104.aspx - Microsoft MPI
https://msdn.microsoft.com/en-us/library/bb524831(v=vs.85).aspx
__END__
Comments
- Anonymous
February 19, 2014
HPC Pack 2012 R2とA8,A9計算ノード登場! HPC Pack 2012 R2 が登場しました。今回の目玉はズバリこれです。 Windows Azureの新インスタンス A8 と A9 - Anonymous
August 17, 2014
今度はイメージギャラリーにもありますよ HPC Pack 2012 R2の更新版、"Update 1"のプレビューが出ました。今回は、Azure IaaSでのクラスタ展開に関する改良点が多いようですが