再起動または再イメージ化時のバッチ ノード作成の遅延を解決する
この記事では、ノードを再起動または再イメージ化するときのバッチ ノード作成の遅延を解決する方法について説明します。 大規模な Python ランタイムと Python パッケージをインストールすることによって発生する Microsoft Azure Batch の問題を回避します。 このインストールにより、バッチ ノードが最初にバッチ プールに追加されたとき、またはノードが再起動または再イメージ化されたときに、長い遅延と予期しないエラーが発生する可能性があります。
現象
バッチ プールを作成してノードをプールに追加したり、ノードを再起動または再イメージ化したりすると、アプリケーションのインストールが完了するまでに時間がかかりすぎるか、長いインストール時間が経過すると失敗します。
原因
この問題は、Python パッケージが大きすぎて開始タスクとして使用できないために発生します。
Azure Batch でバッチ プールを作成し、バッチ ノードを追加する場合は、 開始タスク を使用してオペレーティング環境を準備することをお勧めします。 この開始タスクでは、次のことを実行できます。
タスクを実行するアプリケーションをインストールします。
バッチ ノードが最初にプールに追加されたとき、またはノードが再起動または再イメージ化されたときに、バックグラウンド プロセスを開始します。
ただし、Python 言語ランタイムと Python を実行する必要があるアプリケーションでは、パッケージが非常に大きいため、開始タスクのインストールに時間がかかる場合があります。 ほとんどのインストールが発生しても、予期しない問題が原因でインストールが失敗する可能性があります。
ソリューション
この問題を解決するには、Gen1 イメージをキャプチャする前に、仮想マシン (VM) とバッチ アカウントの場所と OS のバージョンを一致させ、Python とそのパッケージをプレインストールします。
事前にパッケージ化されたカスタム イメージを使用して、バッチ ノードを割り当てます。 このプロセスの一般的な情報については、「 マネージド イメージを使用してカスタム イメージ プールを作成するを参照してください。
インストール時間の長さを防ぎ、インストールの失敗を回避するには、次の一般的なプラクティスに従います。
バッチ アカウントを作成し、VM バッチ ノードを作成するときに使用するのと同じ場所またはリージョンを指定します。
Windows Server 2019 Datacenter - Gen1 (Windows ノード) や Ubuntu Server 18.04 LTS - Gen1 (Linux ノード) など、名前に Gen1 を含むイメージを選択します。 一部の VM ファミリでは Gen2 イメージがサポートされていないため、Gen1 イメージが必要です。
Azure portal でノードのプールを作成するときは、Operating system セクションの Sku リストに、指定したシステム バージョンが含まれていることを確認します。
Python のインストールをカスタマイズして、イメージにプレインストールされ、すべてのユーザーに対して機能するようにします。
システム固有の手順
次のタブ付きセクションでは、Windows バッチ ノードまたは Linux バッチ ノードに対して実行する必要がある手順について説明します。
Windows ノード: 必要なバージョンの Python を C ドライブにインストールし、システム パスを手動で追加します
手順の概要
VM を作成して起動したら、リモート デスクトップ プロトコル (RDP) を使用して VM に接続します。 次に、必要なバージョンの Python ランタイム (Python 3.10.4 など) を含め、VM に必要なものをすべてインストールし、システム パスを編集します。 最後に、VM イメージをキャプチャし、VM イメージを使用するバッチ プールにデプロイし、新しいバッチ プール ノードに接続して、プレインストールされている Python ランタイムとパッケージが正しく動作することを確認するためにテストします。
手順
次の設定を指定して Azure portal で Windows VM を作成します。
設定の名前 設定値 リージョン バッチ アカウントに割り当てられているのと同じリージョン イメージ 名前に Gen1 ( Gen2 ではない) があり、バッチ サービスでサポートされている Windows イメージ Python セットアップ ウィザードを実行し、 Customize installation オプションを選択します。 次に、[ Advanced オプション ページで、 Customize のインストール場所 ボックスに移動し、C ドライブのパスを指定します。
Path
の system 環境変数を編集して、Python インストール パス (C:\Python\ など) と Python にインストールされたパッケージへのパス (C:\Python\Scripts\ など) を含めます。Note
Python セットアップ ウィザードは、
Path
の user 環境変数にのみこれらのパスを追加します。 そのため、対応する system 環境変数にパスを追加する必要があります。 それ以外の場合、VM イメージをキャプチャすると、Python の設定と、ユーザーがインストールした追加のソフトウェア パッケージがイメージから削除されます。システム環境変数にこれらのパスを追加するには、次の手順に従います。
Startを選択し、Settingsを検索して選択します。
Settings アプリで、System>About>Advanced システム設定を選択します。
[ システムのプロパティ ] ダイアログ ボックスで、[ Advanced タブを選択し、 Environment 変数を選択します。
[ Environment 変数 ] ダイアログ ボックスで、[ システム変数 セクションに移動し、 Path 変数を選択し、 Edit を選択します。
Edit 環境変数 ダイアログ ボックスで、New を選択し、Python にインストールされているパッケージへのパスを入力します。 次に、この手順を繰り返して、Python ランタイムへのパスを入力します。
OKを 3 回選択して、3 つのダイアログ ボックスに変更を適用します。
コンソールで Python のインストールをテストします。
たとえば、
python --version
を実行してインストールした Python のバージョンを確認した後、Python インタープリターを実行して、まだインストールされていないパッケージ (numpy
など) のインポートを試みることができます。 予期されるModuleNotFoundError
例外が発生したら、pip install <package-name>
コマンドを実行してパッケージをインストールし、Python インタープリターをもう一度実行してそのパッケージをインポートします。 これで import コマンドは正常に実行されます。ポータルで VM のイメージを作成するの手順に従って VM イメージをキャプチャしますが、イメージの作成 ページには次の設定のみを適用します。
設定の名前 設定値 リソース グループ リソース グループの一覧から選択するか、 [新規作成] を選択してリソース グループを作成します。 ターゲット Azure コンピューティング ギャラリー Azure コンピューティング ギャラリーの一覧から選択するか、 [新規作成] を選択して Azure コンピューティング ギャラリーを作成します。 ターゲット VM イメージの定義 [新規作成] を選択します。 VM イメージ定義の作成 ページで、イメージに付けるVM イメージ定義名のみを入力します。 (ページは自動的に を提供しますPublisher、 Offer、および SKU 設定)。 バージョン番号 VM イメージに指定するバージョン番号を入力します。 VM イメージの設定を適用した後、 Review + create を選択して設定を確認し、 Create を選択してイメージを作成します。 この手順では、次の 3 種類のリソースが作成されます。
- Azure Compute Gallery
- カスタム イメージ定義
- カスタム イメージ定義バージョン
3 つのリソースが作成されたら、次の手順に従って、VM イメージを使用する新しいバッチ プールを作成します。
Azure ポータルでBatch アカウントを検索して選択します。
バッチ アカウントの一覧で、アカウントを選択します。
バッチ アカウントのメニュー ウィンドウで Pools を選択し、 [追加] を選択してバッチ プールを作成します。
[プールの追加] ページで、次の設定を行い、[OK] を選択。
設定の名前 設定値 プール ID プールの新しい名前 イメージの種類 カスタム イメージ - 共有イメージ ギャラリー * 共有イメージ ギャラリー VM イメージの作成時に指定したターゲット Azure コンピューティング ギャラリーの名前 イメージ VM イメージの作成時に指定した VM イメージ定義名 Version VM イメージの作成時に指定したバージョン番号 オペレーティング システム Windows OS ディストリビューション windowsserver OS SKU 選択した OS バージョンの製品コード (例: microsoftwindowsserver-2019-datacenter) * 共有イメージ ギャラリーは、Azure コンピューティング ギャラリーの別の名前です。 これは、VM イメージの作成時に作成されたリソースの 1 つです。
バッチ プール ノードが割り当てられたら、バッチ プール ノード ページに移動し、見出しメニューで Connect を選択します。
Connect ペインで、ユーザーの生成オプションを選択しオプションを選択ランダム ユーザーの生成] ボタンを選択し、[RDP ファイルダウンロードします。
ダウンロードした RDP ファイルを実行して、新しいバッチ ノードに接続します。
Python のインストールをもう一度テストして、プレインストールされているバージョンが正しく動作することを確認します。
関連情報
お問い合わせはこちらから
質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。