ハイブリッドジョブを作成する - Amazon Braket

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ハイブリッドジョブを作成する

このセクションでは、Python スクリプトを使用してハイブリッドジョブを作成する方法について説明します。または、任意の統合開発環境 (IDE) や Braket ノートブックなどのローカル Python コードからハイブリッドジョブを作成するには、「」を参照してくださいハイブリッドジョブとしてローカルコードを実行する

の作成と実行

ハイブリッドジョブを実行するアクセス許可を持つロールを取得したら、続行する準備が整います。最初の Braket ハイブリッドジョブのキー部分はアルゴリズムスクリプトです。実行するアルゴリズムを定義し、アルゴリズムの一部である古典的な論理と量子タスクが含まれています。アルゴリズムスクリプトに加えて、他の依存関係ファイルを指定することもできます。アルゴリズムスクリプトとその依存関係は、ソースモジュールと呼ばれます。エントリポイントは、ハイブリッドジョブの開始時にソースモジュールで実行する最初のファイルまたは関数を定義します。

コンソールまたはノートブックを使用して量子ジョブを作成し、量子デバイスでアルゴリズムスクリプトを実行し、結果を分析するワークフローを示す図。

まず、5 つのベル状態を作成し、対応する測定結果を出力するアルゴリズムスクリプトの基本的な例を考えてみましょう。

import os from braket.aws import AwsDevice from braket.circuits import Circuit def start_here(): print("Test job started!") # Use the device declared in the job script device = AwsDevice(os.environ["AMZN_BRAKET_DEVICE_ARN"]) bell = Circuit().h(0).cnot(0, 1) for count in range(5): task = device.run(bell, shots=100) print(task.result().measurement_counts) print("Test job completed!")

このファイルをalgorithm_script.py という名前で、Braket ノートブックまたはローカル環境の現在の作業ディレクトリに保存します。algorithm_script.py ファイルには計画されたエントリーポイントとして start_here() が含まれます。

次に、algorithm_script.py ファイルと同じディレクトリに Python ファイルまたは Python ノートブックを作成します。このスクリプトはハイブリッドジョブを開始し、関心のあるステータスや主要な結果の印刷などの非同期処理を処理します。少なくとも、このスクリプトはハイブリッドジョブスクリプトとプライマリデバイスを指定する必要があります。

注記

Braket ノートブックを作成する方法、または algorithm_script.py ファイルなどのファイルをノートブックと同じディレクトリにアップロードする方法の詳細については、Amazon Braket Python SDK を使用して最初の回路を実行する」を参照してください。

この基本的な最初のケースでは、シミュレーターをターゲットにします。ターゲットとする量子デバイス、シミュレーター、または実際の量子処理ユニット (QPU) のタイプにかかわらず、次のスクリプトdeviceで指定したデバイスはハイブリッドジョブのスケジュールに使用され、アルゴリズムスクリプトで環境変数 として使用できますAMZN_BRAKET_DEVICE_ARN

注記

ハイブリッドジョブ AWS リージョン の で使用できるデバイスのみを使用できます。Amazon Braket SDK がこれを自動的に選択します AWS リージョン。たとえば、us-east-1 のハイブリッドジョブでは、IonQ、SV1、DM1、および デバイスを使用できますがTN1、Rigettiデバイスは使用できません。

シミュレーターの代わりに量子コンピュータを選択した場合、Braket はハイブリッドジョブがすべての量子タスクを優先アクセスで実行するようにスケジュールします。

from braket.aws import AwsQuantumJob from braket.devices import Devices job = AwsQuantumJob.create( Devices.Amazon.SV1, source_module="algorithm_script.py", entry_point="algorithm_script:start_here", wait_until_complete=True )

パラメータは詳細モードwait_until_complete=Trueを設定し、ジョブが実行中に実際のジョブからの出力を出力するようにします。次の例のような出力が表示されます。

Initializing Braket Job: arn:aws:braket:us-west-2:111122223333:job/braket-job-default-123456789012 Job queue position: 1 Job queue position: 1 Job queue position: 1 .............. . . . Beginning Setup Checking for Additional Requirements Additional Requirements Check Finished Running Code As Process Test job started! Counter({'00': 58, '11': 42}) Counter({'00': 55, '11': 45}) Counter({'11': 51, '00': 49}) Counter({'00': 56, '11': 44}) Counter({'11': 56, '00': 44}) Test job completed! Code Run Finished 2025-09-24 23:13:40,962 sagemaker-training-toolkit INFO Reporting training SUCCESS
注記

カスタムメイドのモジュールを AwsQuantumJob.create メソッドで使用するには、その場所 (ローカルディレクトリまたはファイルへのパス、または tar.gz ファイルの S3 URI) を渡します。実例については、Amazon Braket サンプル Github リポジトリのハイブリッドジョブフォルダにある Parallelize_training_for_QML.ipynb ファイルを参照してください。

結果をモニタリングする

または、Amazon CloudWatch からのログ出力にアクセスすることもできます。これを行うには、ジョブの詳細ページの左側のメニューにあるロググループタブに移動し、ロググループ を選択しaws/braket/jobs、ジョブ名を含むログストリームを選択します。上記の例で、これは braket-job-default-1631915042705/algo-1-1631915190 です。

Amazon Braket SDK Python テストのファイルパスとタイムスタンプを含むログイベントのリストを示す CloudWatch ロググループ。

ハイブリッドジョブページを選択し、設定を選択して、コンソールでハイブリッドジョブのステータスを表示することもできます。

Amazon Braket ハイブリッドジョブの詳細には、概要、イベント時間、ソースコードとインスタンスの設定、停止条件が表示されます。

ハイブリッドジョブは、実行中に Amazon S3 でいくつかのアーティファクトを生成します。デフォルトの S3 バケット名は amazon-braket-<region>-<accountid> で、コンテンツはjobs/<jobname>/<timestamp> ディレクトリにあります。Braket Python SDK でハイブリッドジョブを作成するcode_locationときに別の を指定することで、これらのアーティファクトが保存される S3 の場所を設定できます。

注記

この S3 バケットは、ジョブスクリプト AWS リージョン と同じ にある必要があります。

jobs/<jobname>/<timestamp> ディレクトリには、model.tar.gzファイル内のエントリポイントスクリプトからの出力を含むサブフォルダが含まれています。ファイル内にアルゴリズムスクリプトアーティファクトscriptを含む というディレクトリもありますsource.tar.gz。実際の量子タスクの結果は、jobs/<jobname>/tasks という名前のディレクトリにあります。

結果を保存する

アルゴリズムスクリプトによって生成された結果を保存して、ハイブリッドジョブスクリプトのハイブリッドジョブオブジェクトと Amazon S3 の出力フォルダ (model.tar.gz という名前の tar 圧縮ファイル) から結果を利用できるようにします。

出力は JavaScript Object Notation (JSON) 形式を使用してファイルに保存する必要があります。numpy 配列の場合のように、データをテキストに簡単にシリアル化できない場合は、ピクルドデータ形式を使用してシリアル化するオプションを渡すことができます。詳細については、braket.jobs.data_persistence モジュールを参照してください。

ハイブリッドジョブの結果を保存するには、#ADD でコメントされた次の行を algorithm_script.py ファイルに追加します。

import os from braket.aws import AwsDevice from braket.circuits import Circuit from braket.jobs import save_job_result # ADD def start_here(): print("Test job started!") device = AwsDevice(os.environ['AMZN_BRAKET_DEVICE_ARN']) results = [] # ADD bell = Circuit().h(0).cnot(0, 1) for count in range(5): task = device.run(bell, shots=100) print(task.result().measurement_counts) results.append(task.result().measurement_counts) # ADD save_job_result({"measurement_counts": results}) # ADD print("Test job completed!")

次に、#ADD でコメントされた行 print(job.result()) を追加することで、ジョブスクリプトのジョブの結果を表示できます。

import time from braket.aws import AwsQuantumJob job = AwsQuantumJob.create( source_module="algorithm_script.py", entry_point="algorithm_script:start_here", device="arn:aws:braket:::device/quantum-simulator/amazon/sv1", ) print(job.arn) while job.state() not in AwsQuantumJob.TERMINAL_STATES: print(job.state()) time.sleep(10) print(job.state()) print(job.result()) # ADD

この例では、wait_until_complete=True を削除して冗長出力を抑制します。デバッグ用に再度追加できます。このハイブリッドジョブを実行すると、識別子と が出力されjob-arn、ハイブリッドジョブの状態が になるまで 10 秒ごとにハイブリッドジョブの状態が出力されます。その後COMPLETED、ベル回路の結果が表示されます。次の例を参照してください。

arn:aws:braket:us-west-2:111122223333:job/braket-job-default-123456789012 INITIALIZED RUNNING RUNNING RUNNING RUNNING RUNNING RUNNING RUNNING RUNNING RUNNING RUNNING ... RUNNING RUNNING COMPLETED {'measurement_counts': [{'11': 53, '00': 47},..., {'00': 51, '11': 49}]}

チェックポイントの使用

チェックポイントを使用して、ハイブリッドジョブの中間反復を保存できます。前のセクションのアルゴリズムスクリプトの例では、#ADD でコメントされた次の行を追加して、チェックポイントファイルを作成します。

from braket.aws import AwsDevice from braket.circuits import Circuit from braket.jobs import save_job_checkpoint # ADD import os def start_here(): print("Test job starts!") device = AwsDevice(os.environ["AMZN_BRAKET_DEVICE_ARN"]) # ADD the following code job_name = os.environ["AMZN_BRAKET_JOB_NAME"] save_job_checkpoint(checkpoint_data={"data": f"data for checkpoint from {job_name}"}, checkpoint_file_suffix="checkpoint-1") # End of ADD bell = Circuit().h(0).cnot(0, 1) for count in range(5): task = device.run(bell, shots=100) print(task.result().measurement_counts) print("Test hybrid job completed!")

ハイブリッドジョブを実行すると、デフォルト/opt/jobs/checkpointsパスのチェックポイントディレクトリのハイブリッドジョブアーティファクトに、ファイル <jobname>-checkpoint-1.json が作成されます。このデフォルトパスを変更しない限り、ハイブリッドジョブスクリプトは変更されません。

前のハイブリッドジョブによって生成されたチェックポイントからハイブリッドジョブをロードする場合、アルゴリズムスクリプトは を使用しますfrom braket.jobs import load_job_checkpoint。アルゴリズムスクリプトにロードするロジックは次のとおりです。

from braket.jobs import load_job_checkpoint checkpoint_1 = load_job_checkpoint( "previous_job_name", checkpoint_file_suffix="checkpoint-1", )

このチェックポイントをロードした後、checkpoint-1 にロードされたコンテンツに基づいてロジックを続行できます。

注記

checkpoint_file_suffix は、チェックポイントの作成時に以前に指定した接尾辞と一致する必要があります。

オーケストレーションスクリプトは、前のハイブリッドジョブjob-arnの を指定し、#ADD でコメントされた行を指定する必要があります。

from braket.aws import AwsQuantumJob job = AwsQuantumJob.create( source_module="source_dir", entry_point="source_dir.algorithm_script:start_here", device="arn:aws:braket:::device/quantum-simulator/amazon/sv1", copy_checkpoints_from_job="<previous-job-ARN>", #ADD )