このクイックスタートでは、Python 用 Azure Batch ライブラリを使用するアプリを実行して 、Azure Batch の使用を開始する方法について説明します。 Python アプリ:
- Batch タスク処理に使用するために、複数の入力データ ファイルを Azure Storage BLOB コンテナーにアップロードします。
- Ubuntu 22.04 LTS OS を実行する 2 つの仮想マシン (VM) またはコンピューティング ノードのプールを作成します。
- ノードで実行するジョブと 3 つのタスクを作成します。 各タスクは、Bash シェル コマンド ラインを使用して、入力ファイルの 1 つを処理します。
- タスクが返す出力ファイルを表示します。
このクイックスタートを完了すると、Batch サービスの主要な概念を理解し、より現実的でより大規模なワークロードで Batch を使用できるようになります。
[前提条件]
アクティブなサブスクリプションを持つ Azure アカウント。 お持ちでない場合は、無料のアカウントを作成してください。
リンクされた Azure Storage アカウントを持つ Batch アカウント。 アカウントは、Azure CLI | Azure ポータル | Bicep | ARM テンプレート | Teraform のいずれかの方法を使用して作成できます。
アプリを実行する
このクイック スタートを完了するには、Python アプリをダウンロードまたは複製し、アカウント値を指定してアプリを実行し、出力を確認します。
アプリをダウンロードまたは複製する
GitHub から Azure Batch Python クイック スタート アプリをダウンロードまたは複製します。 次のコマンドを使用して、Git クライアントでアプリ リポジトリを複製します。
git clone https://github.com/Azure-Samples/batch-python-quickstart.gitbatch-python-quickstart/src フォルダーに切り替え、
pipを使用して必要なパッケージをインストールします。pip install -r requirements.txt
アカウント情報を入力する
Python アプリでは、Batch アカウント名とストレージ アカウント名、アカウント キー値、Batch アカウント エンドポイントを使用する必要があります。 この情報は、Azure portal、Azure API、またはコマンド ライン ツールから取得できます。
Azure portal からアカウント情報を取得するには:
- Azure Search バーで、Batch アカウント名を検索して選択します。
- Batch アカウント ページで、左側のナビゲーションから [キー ] を選択します。
- [ キー ] ページで、次の値をコピーします。
- Batch アカウント
- アカウント エンドポイント
- プライマリ アクセス キー
- Storage account name (ストレージ アカウント名)
- Key1
ダウンロードした Python アプリで、 config.py ファイル内の次の文字列を編集して、コピーした値を指定します。
BATCH_ACCOUNT_NAME = '<batch account>'
BATCH_ACCOUNT_KEY = '<primary access key>'
BATCH_ACCOUNT_URL = '<account endpoint>'
STORAGE_ACCOUNT_NAME = '<storage account name>'
STORAGE_ACCOUNT_KEY = '<key1>'
Important
運用環境では、アプリ ソースでアカウント キーを公開することはお勧めしません。 資格情報へのアクセスを制限し、変数または構成ファイルを使用してコード内でそれらを参照する必要があります。 Batch アカウント キーとストレージ アカウント キーは、Azure Key Vault に格納することをお勧めします。
アプリを実行して出力を表示する
アプリを実行して、Batch ワークフローの動作を確認します。
python python_quickstart_client.py
一般的な実行時間は約 3 分です。 プール ノードの初期セットアップには最も時間がかかります。
アプリは、次の例のような出力を返します。
Sample start: 11/26/2012 4:02:54 PM
Uploading file taskdata0.txt to container [input]...
Uploading file taskdata1.txt to container [input]...
Uploading file taskdata2.txt to container [input]...
Creating pool [PythonQuickstartPool]...
Creating job [PythonQuickstartJob]...
Adding 3 tasks to job [PythonQuickstartJob]...
Monitoring all tasks for 'Completed' state, timeout in 00:30:00...
プールのコンピューティング ノードが起動している間、 Monitoring all tasks for 'Completed' state, timeout in 00:30:00... で一時停止しています。 タスクが作成されると、Batch はそれらをキューに入れてプールで実行します。 最初のコンピューティング ノードが使用可能になるとすぐに、最初のタスクがノードで実行されます。 Azure portal の Batch アカウント ページから、ノード、タスク、ジョブの状態を監視できます。
各タスクが完了すると、次の例のような出力が表示されます。
Printing task output...
Task: Task0
Node: tvm-2850684224_3-20171205t000401z
Standard output:
Batch processing began with mainframe computers and punch cards. Today it still plays a central role...
コードの確認
コードを確認して、 Azure Batch Python クイック スタートの手順を理解します。
サービス クライアントを作成してリソース ファイルをアップロードする
アプリは、ストレージ アカウントと対話する BlobServiceClient オブジェクトを作成します。
blob_service_client = BlobServiceClient( account_url=f"https://{config.STORAGE_ACCOUNT_NAME}.{config.STORAGE_ACCOUNT_DOMAIN}/", credential=config.STORAGE_ACCOUNT_KEY )アプリでは、
blob_service_client参照を使用してストレージ アカウントにコンテナーを作成し、データ ファイルをコンテナーにアップロードします。 ストレージ内のファイルは、Batch の ResourceFile オブジェクトとして定義されており、Batch が後でコンピューティング ノードにダウンロードできます。input_file_paths = [os.path.join(sys.path[0], 'taskdata0.txt'), os.path.join(sys.path[0], 'taskdata1.txt'), os.path.join(sys.path[0], 'taskdata2.txt')] input_files = [ upload_file_to_container(blob_service_client, input_container_name, file_path) for file_path in input_file_paths]アプリは、Batch アカウントでプール、ジョブ、タスクを作成および管理するための BatchServiceClient オブジェクトを作成します。 Batch クライアントは共有キー認証を使用します。 Batch では、Microsoft Entra 認証もサポートされています。
credentials = SharedKeyCredentials(config.BATCH_ACCOUNT_NAME, config.BATCH_ACCOUNT_KEY) batch_client = BatchServiceClient( credentials, batch_url=config.BATCH_ACCOUNT_URL)
コンピューティング ノードのプールの作成
Batch プールを作成するために、アプリは PoolAddParameter クラスを使用して、ノード数、VM サイズ、プール構成を設定します。 次の VirtualMachineConfiguration オブジェクトは、Ubuntu Server 22.04 LTS Azure Marketplace イメージへの ImageReference を指定します。 Batch では、さまざまな Linux イメージと Windows Server Marketplace イメージがサポートされ、カスタム VM イメージもサポートされています。
POOL_NODE_COUNTとPOOL_VM_SIZEは定義された定数です。 アプリは、2 つのサイズのStandard_DS1_v2ノードのプールを作成します。 このサイズは、このクイック スタートのパフォーマンスとコストのバランスが良くなります。
pool.add メソッドは、プールを Batch サービスに送信します。
new_pool = batchmodels.PoolAddParameter(
id=pool_id,
virtual_machine_configuration=batchmodels.VirtualMachineConfiguration(
image_reference=batchmodels.ImageReference(
publisher="canonical",
offer="0001-com-ubuntu-server-focal",
sku="22_04-lts",
version="latest"
),
node_agent_sku_id="batch.node.ubuntu 22.04"),
vm_size=config.POOL_VM_SIZE,
target_dedicated_nodes=config.POOL_NODE_COUNT
)
batch_service_client.pool.add(new_pool)
Batch ジョブを作成する
Batch ジョブは、1 つ以上のタスクを論理的にグループ化したものです。 ジョブには、優先度やタスクの実行対象プールなど、タスクに共通する設定が含まれています。
アプリは JobAddParameter クラスを使用して、プールにジョブを作成します。 job.add メソッドは、指定された Batch アカウントにジョブを追加します。 最初、ジョブにはタスクがありません。
job = batchmodels.JobAddParameter(
id=job_id,
pool_info=batchmodels.PoolInformation(pool_id=pool_id))
batch_service_client.job.add(job)
タスクの作成
Batch には、アプリやスクリプトを計算ノードにデプロイする複数の方法が用意されています。 このアプリでは、 TaskAddParameter クラスを使用してタスク オブジェクトの一覧を作成します。 各タスクは、 command_line パラメーターを使用して入力ファイルを処理し、アプリまたはスクリプトを指定します。
次のスクリプトは、Bash シェル resource_files コマンドを実行してテキスト ファイルを表示することで、入力catオブジェクトを処理します。 その後、アプリは task.add_collection メソッドを使用して各タスクをジョブに追加し、コンピューティング ノードで実行するタスクをキューに入れます。
tasks = []
for idx, input_file in enumerate(resource_input_files):
command = f"/bin/bash -c \"cat {input_file.file_path}\""
tasks.append(batchmodels.TaskAddParameter(
id=f'Task{idx}',
command_line=command,
resource_files=[input_file]
)
)
batch_service_client.task.add_collection(job_id, tasks)
タスク出力の表示
アプリはタスクの状態を監視して、タスクが完了していることを確認します。 各タスクが正常に実行されると、タスク コマンドの出力が stdout.txt ファイルに書き込まれます。 その後、完了した各タスクの stdout.txt ファイルがアプリに表示されます。
tasks = batch_service_client.task.list(job_id)
for task in tasks:
node_id = batch_service_client.task.get(job_id, task.id).node_info.node_id
print(f"Task: {task.id}")
print(f"Node: {node_id}")
stream = batch_service_client.file.get_from_task(
job_id, task.id, config.STANDARD_OUT_FILE_NAME)
file_text = _read_stream_as_string(
stream,
text_encoding)
if text_encoding is None:
text_encoding = DEFAULT_ENCODING
sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding = text_encoding)
sys.stderr = io.TextIOWrapper(sys.stderr.detach(), encoding = text_encoding)
print("Standard output:")
print(file_text)
リソースをクリーンアップする
アプリは、作成したストレージ コンテナーを自動的に削除し、Batch プールとジョブを削除するオプションを提供します。 プールとノードでは、ジョブが実行されていない場合でも、ノードの実行中は料金が発生します。 プールが不要になった場合は、削除します。
Batch リソースが不要になったら、それらを含むリソース グループを削除できます。 Azure portal で、リソース グループ ページの上部にある [ リソース グループの削除 ] を選択します。 [ リソース グループの削除 ] 画面で、リソース グループ名を入力し、[削除] を選択 します。
次のステップ
このクイック スタートでは、Batch Python API を使用して Batch プール、ノード、ジョブ、タスクを作成するアプリを実行しました。 ジョブは、リソース ファイルをストレージ コンテナーにアップロードし、ノードでタスクを実行し、ノードからの出力を表示しました。
Batch サービスの主要な概念を理解できたので、より現実的でより大規模なワークロードで Batch を使用する準備ができました。 Azure Batch の詳細を確認し、実際のアプリケーションを使用して並列ワークロードを実行するには、Batch Python チュートリアルに進んでください。