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