Windows HPC クラスター内の Azure ノードへのアプリケーションのデプロイ
HPC Pack 2008 R2 Service Pack 1 (SP1) 以降、HPC Pack には、クラスター管理者がアプリケーション (実行可能ファイル、SOA サービス、XLL ファイル、クラスター対応 Microsoft Excel ブックなど) を、Azure の "バースト" シナリオでオンプレミス クラスターに参加している Azure ノードにデプロイするのに役立つ組み込みのユーティリティとメカニズムが含まれています。 既定では、Azure ノードはオンプレミスのリソースと共有フォルダーに直接アクセスできないため、Azure ノードにアプリケーションをデプロイするために使用する方法は、アプリケーションをオンプレミスにデプロイするために使用する方法とは異なります。 さらに、Windows HPC クラスターに追加された Azure ノードは動的にデプロイおよび再プロビジョニングされるため、アプリケーションのデプロイに推奨される方法は、新しい Azure ノード インスタンスでアプリケーションが自動的に使用可能になるようにするのに役立ちます。
Azure バーストの HPC アプリケーション ワークロードに関する考慮事項
Azure ノードにアプリケーションをデプロイする前に、既存または計画されている HPC ワークロードが Azure で効率的に実行またはスケーリングされるかどうかを評価します。 Azure バースト シナリオで実行される HPC アプリケーションの移行、開発、設計に関する詳細な考慮事項については、このトピックでは説明しません。 さらに、Azure プラットフォームの機能は継続的に進化しています。 ただし、特に Azure ノードの大規模なデプロイでは、HPC Pack を使用した Azure ワークロードへの正常なバーストの現在の特性を次に示します。
高度に分散された単一ノード計算 多くのパラメトリック スイープと特定のサービス指向アーキテクチャ (SOA) ジョブが含まれます。 メッセージ パッシング インターフェイス (MPI) ジョブなどの他のジョブの種類は、Azure バースト構成で実行できますが、Azure RDMA ネットワークをサポートする
コンピューティング集中型インスタンス サイズの選択が必要になる場合があります。 HPC ジョブの種類に関する一般的な情報については、「並列コンピューティング ジョブについて」を参照してください。 計算時間がデータ移動時間を超えています 特定の HPC ワークロードでは、計算のために大量のデータを Azure にアップロードするか、処理された大量のデータを返す必要があります。 データ移動が HPC ワークフローのボトルネックではないことを確認します。
ファイル ベースのデータ アクセス オンプレミスのデータ ファイルにアクセスする既存の HPC アプリケーションは、Azure Blob Storage にアップロードされたデータ ファイルにアクセスすることで、Azure で実行するように簡単に移行できます。 Azure のさまざまな種類のストレージにアクセスするために、新しい HPC アプリケーションを開発できます。 ただし、データの機密性、法的要件、コストに関する考慮事項、その他の要因によっては、アプリケーション データを Azure に格納できない場合があります。
"バースト" ワークロード パターン Azure バースト シナリオは、オンプレミス クラスターの固定リソースを使用して簡単に完了できないリソース集中型のワークロードに最適です。 ワークロードには、不規則な計算スパイク、定期的にスケジュールされたジョブ、または 1 回限りのジョブが含まれる場合があります。
Azure ノードでアプリケーションを実行する方法の詳細については、「Azure ノードでの HPC アプリケーションの実行に関するガイドライン」を参照してください。
アプリケーションとデータを Azure ノードにデプロイする方法の選択
アプリケーションとデータ (場合によっては) を Azure ノードにデプロイするために使用する方法は、次の表に示すように、アプリケーションのインストールに必要な内容によって異なります。
インストール要件 | Method | Availability |
---|---|---|
インストールは、ファイルと DLL や構成ファイルなどの依存関係をノードにコピーすることで実現できます。 | - hpcpack コマンドを使用して、ファイルを Azure Storage にパッケージ化し、ステージングします。 hpcpack と hpcsyncの使用に関する - 管理者が Azure ノードをデプロイします。 パッケージは新しい Azure ノード インスタンスに自動的にデプロイ (コピーおよび抽出) されるか、ノードが既に実行されている場合は管理者が手動でデプロイできます。 Microsoft HPC Pack |
HPC Pack 2008 R2 with SP1 |
インストールには、インストーラーをサイレント実行する必要があります。または、環境変数の設定やファイアウォール例外の作成などの追加の構成手順が必要です。 | - hpcpack コマンドを使用して、ファイルまたはインストーラーを Azure Storage にパッケージ化し、ステージングします。 hpcpack と hpcsyncの使用に関する - 管理者は、環境を構成したり、インストール コマンドを実行したりするためのスタートアップ スクリプトを Azure ノード テンプレートで指定します。 「Azure ノードのスタートアップ スクリプトを使用する」を参照してください。 - 管理者が Azure ノードをデプロイします。 パッケージは新しい Azure ノード インスタンスに自動的にデプロイされ、スタートアップ スクリプトはプロビジョニング プロセスの一部として実行されます。 Microsoft HPC Pack |
HPC Pack 2008 R2 with SP2 |
Azure ノードへのインストールとデータ配布は、ジョブの実行時に準備タスク中に発生する可能性があります。 | - 管理者は、AzCopy などの Azure ストレージ ツールを使用して、インストーラーとデータ ファイルを Azure BLOB ストレージ内のコンテナーにアップロードします。 - 管理者は、hpcpack コマンドを使用して、追加のファイルまたはインストーラーを Azure Storage にパッケージ化し、ステージングします。 hpcpack と hpcsyncの使用に関する - 管理者は、環境を構成したり、インストール コマンドを実行したりするためのスタートアップ スクリプトを Azure ノード テンプレートで指定します。 「Azure ノードのスタートアップ スクリプトを使用する」を参照してください。 - 管理者が Azure ノードをデプロイします。 パッケージは新しい Azure ノード インスタンスに自動的にデプロイされ、スタートアップ スクリプトはプロビジョニング プロセスの一部として実行されます。 Microsoft HPC Pack - 管理者は、追加のインストール手順を実行したり、Azure BLOB ストレージ コンテナーからデータをダウンロードしたりするためのノード準備タスクを使用してジョブを作成します。 「ノード準備タスクの定義 - ジョブ マネージャー」を参照してください。 |
HPC Pack 2008 R2 with SP1 |
インストールには、簡単にスクリプト化できない手順が必要であり、アプリケーションとアプリケーションのデータに Azure の永続ドライブからアクセスできます。 - |
- 管理者は Windows ツールを使用して仮想ハード ディスク (VHD) を作成し、アプリケーションと必要なアプリケーション データを VHD にインストールします。 - 管理者は VHD をデタッチし、hpcpack upload コマンドを使用して、VHD をページ BLOB として Azure Storage にアップロードします。 hpcpack と hpcsyncの使用に関する - 管理者は、Azure ノード テンプレートを構成するときに、Azure Storage 内にあるアプリケーション VHD を指定します。 「Azure Worker Nodesにアプリケーション VHD をマウントする」を参照してください。 - 必要に応じて、管理者は、追加の構成のスタートアップ スクリプトを指定するか、展開内の 1 つ以上のノードに共有フォルダーを設定します。 「Azure ノードのスタートアップ スクリプトを使用する」を参照してください。 - 管理者が Azure ノードをデプロイします。 アプリケーション VHD をマウントする Azure ノード インスタンスが作成され、ストレージ上のすべてのパッケージがノードに自動的にデプロイされた後、スタートアップ スクリプトがプロビジョニング プロセスの一部として実行されます。 Microsoft HPC Pack |
HPC Pack 2012 |
hpcpack と hpcsync の使用
各 Azure ノードデプロイは、ノード テンプレートで指定された Azure ストレージ アカウントに関連付けられます。 クラスター管理者は、hpcpack コマンドを使用して、ファイル (アプリケーション、SOA サービス、XLL、クラスター対応 Excel ブック、ユーティリティなど) をストレージ アカウントにステージングできます。 hpcpack create を使用して、Azure Storage にアップロードできる圧縮形式 (.zip) でファイルまたはフォルダーをパッケージ化できます。 各アプリケーション、SOA サービス、または XLL は個別にパッケージ化する必要があり、パッケージには DLL や構成ファイルなどの必要な依存関係が含まれている必要があります。 その後、hpcpack upload を使用して、パッケージをストレージ アカウントにアップロードできます。 hpcpack コマンドは、ヘッド ノードから、または HPC クライアント ユーティリティがインストールされているコンピューターで実行できます。
ストレージ アカウント内のすべてのパッケージは、プロビジョニング プロセス中に新しい Azure ノード インスタンスに自動的にデプロイされます。 これは、HPC 管理ユーティリティを使用して一連の Azure ノードをデプロイし、ノード インスタンスが Window Azure システムによって自動的に再プロビジョニングされる場合に発生します。 hpcsync コマンドは、各 Azure ノードで実行され、すべてのパッケージをストレージからノードにコピーし、ファイルを抽出します。 Azure ノードの起動後にパッケージをストレージにアップロードする場合は、各 Azure ノードで hpcsync コマンドを手動で実行してパッケージをデプロイできます。
注:
同じストレージ アカウントを参照する複数の Azure ノード テンプレートを作成すると、同じステージング ファイルがすべての Azure ノード セットにデプロイされます。 異なるノード セットに異なるファイルをデプロイするには、Azure ノード テンプレートごとに個別の Azure ストレージ アカウントを作成します。
次の図は、アプリケーションを Azure ノードにコピーするための基本的なワークフローとメカニズムを示しています。
でアプリケーションを Azure ノードにコピーする
既定では、hpcsync job submit %CCP_PACKAGE_ROOT%\myRelativePath\myapp.exe
hpcsync とCCP_PACKAGE_ROOT
Azure ワーカー ノードでは、%CCP_PACKAGE_ROOT% フォルダーは 10 GB のディスク パーティションに作成されます。 つまり、ノード インスタンス上のすべてのアプリケーション ファイルが 10 GB を超えることはできません。 アプリケーションにかなりの入力ファイルと出力ファイルがある場合は、スタートアップ スクリプトを使用して C:\ ドライブに対するユーザーのアクセス許可を付与し、ユーザーがノード上の使用可能なすべてのスクラッチ領域に書き込むことができます。
hpcsync
手動で実行すると、既定の場所 (%CCP_PACKAGE_ROOT%) をオーバーライドできます。 たとえば、各 Azure ノードにフォルダーを作成し、hpcsync を実行するときにその場所指定できます。 すべてのパッケージがそのフォルダーに抽出されます。 ただし、デプロイされた (または自動的に再プロビジョニングされる) 新しいノード インスタンスにはそのフォルダーは含まれません。パッケージは既定の場所に自動的にデプロイされます。 また、クラスター ユーザーには、%CCP_PACKAGE_ROOT%内のフォルダーへの書き込みアクセス許可しかありません。 Azure ノードのフォルダーのアクセス許可を変更しない限り、%CCP_PACKAGE_ROOT%の外部でアプリケーションを実行できるのは管理者だけです。 hpcsync
パッケージをデプロイする場合、抽出されたファイルの完全パスの長さが 256 文字を超えるファイルはありません。 抽出されたファイルが一時的に配置され、最後に配置されるルート ディレクトリは最大 136 文字で、ファイル名、サブディレクトリ (存在する場合)、relativePath (指定されている場合) には 120 文字を残すことができます。 抽出されたファイルのパスが 256 文字を超える場合、パッケージの展開は失敗します。
hpcsync メカニズムは、ノードにファイルをコピーするだけでインストールできる SOA サービス、XLL ファイル、アプリケーションをデプロイするのに十分です。 インストーラーを実行してアプリケーションをインストールする必要がある場合、またはアプリケーションで環境変数の設定、ファイアウォール例外の追加、フォルダーのアクセス許可の変更、フォルダーの作成などの追加の構成手順が必要な場合は、ノード テンプレートにスタートアップ スクリプトを含めることができます。 このスクリプトは、hpcsync の実行後
アプリケーション ファイルを Azure Storage にステージングする方法
このセクションでは、hpcpackを使用して、アプリケーションをパッケージ化し、Azure Storage にステージング
注:
ファイルを Azure Storage にステージングするには、クラスター管理者であるか、少なくとも Azure サブスクリプション ID とストレージ アカウント キーが必要です。
必要条件
SOA サービスをパッケージ化する場合:
パッケージの名前は、SOA サービスの名前 (つまり、SessionStartInfo コンストラクターで SOA クライアントが指定するサービス名) である必要があります。 たとえば、serviceName.zip や serviceName_serviceVersion.zipなどです。
サービス DLL、依存 DLL、およびサービス構成ファイルをパッケージに含める必要があります。
サービス構成ファイルもヘッド ノードにデプロイする必要があります。 すべての設定は、構成ファイルのオンプレミス のコピーによって決まります。
パッケージをアップロードするときに相対パスを指定しないでください。 SOA サービスは、既定の場所にアンパックする必要があります。
XLL ファイルをパッケージ化する場合:
パッケージの名前は、XLL ファイルの名前である必要があります。 たとえば、XLLName.zipします。
XLL に依存関係がある場合は、XLL とサポート ファイルをフォルダーに配置し、フォルダーをパッケージ化します。 XLL は、(サブフォルダーではなく) フォルダーの最上位にある必要があります。
パッケージをアップロードするときに相対パスを指定しないでください。 XLL は、既定の場所にアンパックする必要があります。
Excel ブックをパッケージ化する場合:
パッケージの名前はブックの名前である必要があります。 たとえば、workbookName.zipします。
ブックに依存関係がある場合は、ブックと関連ファイルをフォルダーに配置し、フォルダーをパッケージ化します。 ブックは、(サブフォルダーではなく) フォルダーの最上位にある必要があります。
パッケージをアップロードするときに相対パスを指定しないでください。 ブックは既定の場所にアンパックする必要があります。
スタートアップ スクリプトから呼び出す実行可能ファイル (MPI アプリケーションなど)、アプリケーション インストーラー、ユーティリティをパッケージ化する場合:
依存する DLL またはファイルをパッケージに含める必要があります。
パッケージをアップロードするときに、相対パス プロパティを指定します。
スタートアップ スクリプトをパッケージ化する場合:
パッケージの名前は、スタートアップ スクリプトの名前である必要があります。 たとえば、startup.bat.zipします。
パッケージをアップロードするときに相対パスを指定しないでください。 スタートアップ スクリプトは、既定の場所にアンパックする必要があります。
スタートアップ スクリプトでインストーラーまたはユーティリティを呼び出す場合は、必要なファイルを個別にパッケージ化してステージングするようにしてください。
ステップ
例として、次の手順は、さまざまな種類のアプリケーション ファイルを Azure Storage にステージングする方法を示しています。
注:
hpcpack createを実行するために、管理者特権でのコマンド プロンプト (管理者として実行)
SOA サービスをパッケージ化して Azure Storage にステージングするには
SOA サービスがまだ登録されておらず、オンプレミス クラスターにデプロイされていない場合は、サービス構成ファイルのコピーをヘッド ノードのサービス登録フォルダーに配置して SOA サービスを登録します (通常、これは \ServiceRegistration %CCP_HOME%です)。 詳細については、「サービス構成ファイルの展開と編集」を参照してください。
サービス構成ファイル、サービス アセンブリ、および依存する DLL を空のフォルダーにコピーします。 たとえば、C:\myFiles\myServiceFiles
という名前のフォルダーにファイルをコピーします。 管理者特権でのコマンド プロンプトで、hpcpack create
実行し、パッケージの名前と、サービス ファイルを含むフォルダーを指定します。 重要
パッケージの名前は、SOA サービスの名前 (つまり、SOA クライアントが
SessionStartInfo
コンストラクターで指定するサービス名) である必要があります。たとえば、
C:\myFiles\myServiceFiles のコンテンツをmyServiceName.zip としてパッケージ化するには (パッケージを AzurePackagesという名前のフォルダーに保存します)。 hpcpack create C:AzurePackagesmyServiceName.zip C:myFilesmyServiceFiles
hpcpack upload を実行し、次のコマンドを使用してパッケージを Azure Storage にアップロードします。ここで、myHeadNodeはヘッド ノードの名前、 myAzureTemplate は Azure ノードのデプロイに使用したテンプレートの名前です。 たとえば次のような点です。hpcpack upload C:\AzurePackages\myServiceName.zip /nodetemplate:myAzureNodeTemplate /scheduler:myHeadNode
XLL ファイルまたは Excel ブックをパッケージ化して Azure Storage にステージングするには
XLL またはブックに DLL またはその他のファイルへの依存関係がある場合は、XLL またはブックとその依存関係をフォルダー (c:\myFiles\myExcelFilesなど) にコピーします。
管理者特権でのコマンド プロンプトで、hpcpack create を実行して、XLL またはブックをパッケージ化します。 パッケージの名前を指定し、XLL またはブックを指定します。 パッケージの名前は、XLL ファイルまたは Excel ブックの名前である必要があります。
たとえば、XLL またはブックに依存関係がある場合は、フォルダー全体をパッケージ化し (パッケージを AzurePackage
という名前のフォルダーに保存します)。 hpcpack create C:\AzurePackages\myXLL.zip C:\myFiles\myExcelFiles
XLL またはブックに依存関係がない場合は、直接パッケージ化できます。 たとえば、C:\myFiles\myXLL.xll を myXLL.zipとしてパッケージ化するには、
hpcpack create C:\AzurePackages\myXLL.zip C:\myFiles\myXLL.xll
hpcpack upload を実行し、次のコマンドを使用してパッケージを Azure Storage にアップロードします。ここで、myHeadNodeはヘッド ノードの名前、 myAzureTemplate は Azure ノードのデプロイに使用したテンプレートの名前です。 たとえば次のような点です。hpcpack upload C:\AzurePackages\myXLL.zip /nodetemplate:myAzureNodeTemplate /scheduler:myHeadNode
実行可能ファイルをパッケージ化して Azure Storage にステージングするには
実行可能ファイルと依存関係または DLL を、C:\myFiles\myAppFilesなどのフォルダーにコピーします。
管理者特権でのコマンド プロンプトで、hpcpack create
実行して、アプリケーション ファイルをパッケージ化します。 パッケージの名前を指定し、アプリケーション ファイルを含むフォルダーを指定します。 たとえば、
c:\myFiles\myAppFiles のコンテンツをmyApp.zip としてパッケージ化するには (パッケージを AzurePackagesという名前のフォルダーに保存します)。 hpcpack create c:\AzurePackages\myApp.zip c:\myFiles\myAppFiles
次のコマンドを使用してパッケージを Azure Storage にアップロードします。ここで、myHeadNode
はヘッド ノードの名前、myAzureTemplate は Azure ノードのデプロイに使用したテンプレートの名前です。 アプリケーション ファイルの相対パスを指定します。 たとえば次のような点です。 hpcpack upload c:\AzurePackages\myApp.zip /scheduler:myHeadNode /nodetemplate:myAzureTemplate /relativepath:myApp
ステージング されたパッケージを Azure ノードにデプロイする方法
Azure Storage にステージングされたパッケージは、新しいノード インスタンスに自動的にデプロイされます。 パッケージを手動でデプロイできます。たとえば、すべての新しいノードへのデプロイを自動化する前に、パッケージに必要なすべての依存関係があることを確認したり、既に実行されているノードにパッケージをデプロイしたりできます。 clusrun と hpcsync を使用して、Azure ストレージ アカウントから Azure ノードにファイルをデプロイできます。
たとえば次のような点です。
clusrun /nodegroup:AzureWorkerNodes hpcsync
Azure ノードにデプロイされているフォルダーまたはファイルの一覧を表示するには、次のコマンドを実行します。
clusrun /nodegroup:AzureWorkerNodes dir %CCP_PACKAGE_ROOT% /s
Azure ノードからのファイルへのアクセス
HPC アプリケーションでファイル アクセスが必要な場合、Azure ノードにデプロイされているアプリケーションからファイルにアクセスするためのオプションを次に示します。
オプション | 前提条件 | メモ |
---|---|---|
Azure ドライブ | 管理者は、アプリケーション VHD を構成し、Azure ノードにマウントします。 「Azure Worker Nodesにアプリケーション VHD をマウントする」を参照してください。 |
- ドライブがコピーされ、各ノードにローカルにキャッシュされる - ドライブは一度に 1 つのノードでのみ書き込むことができます |
Azure 仮想マシン上のファイル サーバー | 管理者は、Azure 仮想マシン インスタンスを構成し、データ ディスクを仮想マシンにアタッチし、ファイル サーバー ロールを有効にして、ファイル共有フォルダーを作成します。 「Azure 仮想マシン ファイル サーバーを構成し、Windows HPC Server コンピューティング ジョブ内から使用する方法」を参照してください。 |
- ファイル サーバー リソースへのジョブによるアクセスには、認証済みのユーザー アクセスが必要です。 - 既存のアプリケーションに SMB 互換性を提供します - サーバーあたり最大 16 TB のデータを提供します - 帯域幅を 800 Mb/秒に制限する |
ローカル ファイルを Azure BLOB ストレージにミラー化する | 管理者は、AzCopy などの Azure ストレージ ツールを使用して、オンプレミスのファイルを Azure Blob Storage 内のコンテナーにミラーリングします。 |
- オンプレミス環境から Azure にデータをミラーリングすると、オーバーヘッドが増加します。 |
Azure Blob Storage に直接アクセスする | アプリケーションは、Azure BLOB に対して直接データ アクセス操作を実行するように設計されています | - 使用可能なオプションの最高のスケーラビリティを提供します |
その他の参照
- Microsoft HPC Pack を使用した Azure Worker インスタンスへのバーストの