最初の回路の構築 - Amazon Braket

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

最初の回路の構築

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

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

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)
T : │ 0 │ 1 │ ┌───┐ q0 : ─┤ H ├───●─── └───┘ │ ┌─┴─┐ q1 : ───────┤ X ├─ └───┘ T : │ 0 │ 1 │

[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 コンソール」を参照してください。(およびTN1任意の QPU SV1 で) 量子タスクを実行すると、量子タスクの結果はアカウントの S3 バケットに保存されます。バケットを指定しない場合、Braket SDK はデフォルトのバケットを作成しますamazon-braket-{region}-{accountID}。詳細については、「Amazon Braket へのアクセスの管理」を参照してください。

注記

実際の既存のバケット名を入力します。次の例では、バケット名として amazon-braket-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 = "amazon-braket-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) # Returns the number of hybrid jobs queued on the device # '2'

タスクを実行すると、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'