最初の回路の構築 - 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> の等号重ね合わせであり、ほぼ等しい (最大 shot ノイズ) は、期待どおりの測定結果として 00 と 11 の分布です。

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

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

注記

実際の既存のバケット名を入力します。次の例では、バケット名として example-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 = "example-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 が へのアクセスを提供 QPU からの デバイス IonQ, IQM, QuEra および 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'