建置您的第一個電路 - Amazon Braket

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

建置您的第一個電路

啟動筆記本執行個體後,請選擇您剛建立的筆記本,以標準 Jupyter 介面開啟執行個體。

筆記本界面顯示名為 amazon-braket-test 且狀態為 InService 及其 URL 的現有筆記本執行個體。

Amazon Braket 筆記本執行個體會預先安裝 Amazon Braket SDK 及其所有相依性。從使用conda_braket核心建立新的筆記本開始。

筆記本、主控台和其他工具的啟動器界面,例如終端機、文字檔案、Markdown 檔案、Python 檔案,以及反白顯示的 conda_braket Python 環境。

您可以從簡單的「您好,世界!」開始 範例。首先,建構準備 Bell 狀態的電路,然後在不同的裝置上執行該電路以取得結果。

首先匯入 Amazon Braket SDK 模組,並定義簡單的 Bell 狀態電路。

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 │

在本機模擬器上執行您的電路

接著,選擇要在其中執行電路的量子裝置。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 主控台中找到有關 的詳細資訊。在 SV1(和 TN1或任何 QPU) 上執行量子任務時,量子任務的結果會存放在您帳戶中的 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 主控台提供有關量子任務的進一步資訊。導覽至主控台中的 Quantum 任務索引標籤,您的量子任務應該位於清單頂端。或者,您可以使用唯一的量子任務 ID 或其他條件來搜尋量子任務。

注意

90 天後,Amazon Braket 會自動移除與量子任務相關聯的所有量子任務 IDs 和其他中繼資料。如需詳細資訊,請參閱資料保留

在 QPU 上執行

使用 Amazon Braket,您只需變更一行程式碼,即可在實體量子電腦上執行先前的量子電路範例。Amazon Braket 可讓您從 IonQ、QuEra、 IQM和 存取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'