最初の回路の構築 - Amazon Braket

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

最初の回路の構築

ノートブックインスタンスが起動したら、作成したノートブックを選択して、標準の Jupyter インターフェイスでインスタンスを開きます。

ステータスが InService の amazon-braket-test という名前の既存のノートブックインスタンスとその URL を示すノートブックインターフェイス。

Amazon Braket ノートブックインスタンスは、Amazon Braket SDK とそのすべての依存関係があらかじめインストールされています。conda_braket カーネルを使用して新しいノートブックを作成することから始めます。

ノートブック、コンソール、ターミナル、テキストファイル、マークダウンファイル、Python ファイルなどのその他のツール用のランチャーインターフェイス。conda_braket Python 環境が強調表示されています。

シンプルな「こんにちは、世界!」という 例から始めることができます。まず、ベル状態を準備する回路を構築し、その回路を異なるデバイスで実行して結果を取得します。

まず、Amazon Braket SDK モジュールをインポートし、単純なベル状態回路を定義します。

import boto3 from braket.aws import AwsDevice from braket.devices import LocalSimulator from braket.circuits import Circuit # create the circuit bell = Circuit().h(0).cnot(0, 1)

次のコマンドで回路を視覚化できます。

print(bell)

[Run your circuit on the local simulator] (ローカルシミュレーターで回路を実行する)

次に、回路を実行する量子デバイスを選択します。Amazon Braket SDK には、ラピッドプロトタイピングとテスト用のローカルシミュレーターが付属しています。より小さな回路にはローカルシミュレーターを使用することをお勧めします。これは最大 25 個です qubits (ローカルハードウェアによって異なります)。

ローカルシミュレーターをインスタンス化する方法は次のとおりです。

# instantiate the local simulator local_sim = LocalSimulator()

そして、回路を実行します。

# run the circuit result = local_sim.run(bell, shots=1000).result() counts = result.measurement_counts print(counts)

次のような結果が表示されます。

Counter({'11': 503, '00': 497})

準備した特定のベル状態は、 |00> と |11> の等重重ねであり、期待どおり、測定結果として 00 と 11 のほぼ等しい (shotノイズまで) 分布が見つかります。

オンデマンドシミュレーターで回路を実行する

Amazon Braket は、より大きな回路を実行するSV1ためのオンデマンドの高性能シミュレーター へのアクセスも提供します。 SV1は、最大 34 個の量子回路のシミュレーションを可能にするオンデマンドのステートベクトルシミュレーターですqubits。詳細については、SV1「サポートされているデバイス」セクションと AWS コンソールを参照してください。量子タスクを SV1 (およびTN1任意の QPU で) 実行すると、量子タスクの結果はアカウントの S3 バケットに保存されます。バケットを指定しない場合、Braket SDK によってデフォルトのバケットが作成されますamazon-braket-{region}-{accountID}。詳細については、「Amazon Braket へのアクセスの管理」を参照してください。

注記

実際の既存のバケット名を入力します。次の例では、バケット名として amzn-s3-demo-bucket が表示されます。Amazon Braket のバケット名は常に で始まり、その後に追加した他の識別文字がamazon-braket-続きます。S3 バケットの設定方法に関する情報が必要な場合は、Amazon S3の開始方法」を参照してください。

# get the account ID aws_account_id = boto3.client("sts").get_caller_identity()["Account"] # the name of the bucket my_bucket = "amzn-s3-demo-bucket" # the name of the folder in the bucket my_prefix = "simulation-output" s3_folder = (my_bucket, my_prefix)

で回路を実行するにはSV1、 .run()呼び出しで位置引数として以前に選択した S3 バケットの場所を指定する必要があります。

# choose the cloud-based on-demand simulator to run your circuit device = AwsDevice("arn:aws:braket:::device/quantum-simulator/amazon/sv1") # run the circuit task = device.run(bell, s3_folder, shots=100) # display the results print(task.result().measurement_counts)

Amazon Braket コンソールには、量子タスクに関する詳細情報が表示されます。コンソールの量子タスクタブに移動すると、量子タスクがリストの上部に表示されます。または、一意の量子タスク ID またはその他の基準を使用して量子タスクを検索することもできます。

注記

90 日後、Amazon Braket は量子タスクに関連するすべての量子タスク IDs とその他のメタデータを自動的に削除します。詳細については、データ保持期間を参照してください。

QPU で実行する

Amazon Braket では、1 行のコードを変更するだけで、前の量子回路の例を物理量子コンピュータで実行できます。Amazon Braket は、IonQ、、IQM、QuEraおよび からQPUデバイスへのアクセスを提供しますRigetti。さまざまなデバイスと可用性ウィンドウに関する情報は、サポートされているデバイスセクションと、コンソールの AWS デバイスタブにあります。次の例は、 IQMデバイスをインスタンス化する方法を示しています。

# choose the IQM hardware to run your circuit device = AwsDevice("arn:aws:braket:eu-north-1::device/qpu/iqm/Garnet")

または、次のコードのIonQデバイスを選択します。

# choose the Ionq device to run your circuit device = AwsDevice("arn:aws:braket:us-east-1::device/qpu/ionq/Aria-1")

デバイスを選択し、ワークロードを実行する前に、次のコードを使用してデバイスキューの深さをクエリして、量子タスクまたはハイブリッドジョブの数を判断できます。さらに、お客様は のデバイスページでデバイス固有のキューの深さを表示できますAmazon Braket Management Console。

# Print your queue depth print(device.queue_depth().quantum_tasks) # returns the number of quantum tasks queued on the device {<QueueType.NORMAL: 'Normal'>: '0', <QueueType.PRIORITY: 'Priority'>: '0'} print(device.queue_depth().jobs) '2' # returns the number of hybrid jobs queued on the device

タスクを実行すると、Amazon Braket SDK は結果をポーリングします (デフォルトのタイムアウトは 5 日)。次の例に示すように、 .run() コマンドで poll_timeout_secondsパラメータを変更することで、このデフォルトを変更できます。ポーリングタイムアウトが短すぎる場合、QPU が使用できず、ローカルタイムアウトエラーが返された場合など、ポーリング時間内に結果が返されない可能性があることに注意してください。task.result() 関数を呼び出して、ポーリングを再開できます。

# define quantum task with 1 day polling timeout task = device.run(bell, s3_folder, poll_timeout_seconds=24*60*60) print(task.result().measurement_counts)

さらに、量子タスクまたはハイブリッドジョブを送信した後、 queue_position()関数を呼び出してキューの位置を確認できます。

print(task.queue_position().queue_position) # Return the number of quantum tasks queued ahead of you '2'