在保留期間執行量子任務 - Amazon Braket

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

在保留期間執行量子任務

建立保留取得有效的保留 ARN 後,您可以建立在保留期間執行的量子任務。使用保留 ARN 提交的 Quantum 任務和混合任務不會顯示在裝置佇列中。在保留開始時間之前提交的任務將保持 QUEUED 狀態,直到您的保留開始為止。

注意

預留是 AWS 帳戶和裝置特定的。只有建立保留 AWS 的帳戶才能使用您的保留 ARN。

在保留期間,可以同時建立保留和一般任務。若要驗證已建立的 Braket 量子任務是否與保留相關聯,請在 Braket 主控台中檢查量子任務頁面上的「預留 ARN」欄位,或使用 SDK 查詢任務中繼資料中的相同欄位。此頁面的其餘部分說明如何指定哪些任務與重新儲存相關聯。

您可以使用 BraketCUDA-QQiskit、 或直接搭配 boto3 PennyLane(使用 Boto3) Python SDKs來建立量子任務。若要使用保留,您必須擁有 Amazon Braket Python SDK1.79.0 版或更新版本。您可以使用下列程式碼更新至最新的 Braket SDK、Qiskit供應商和PennyLane外掛程式。

pip install --upgrade amazon-braket-sdk amazon-braket-pennylane-plugin qiskit-braket-provider

使用DirectReservation內容管理員執行任務

在您的排程保留中執行任務的建議方法是使用DirectReservation內容管理員。透過指定您的目標裝置和保留 ARN,內容管理員可確保在 Python with陳述式內建立的所有任務都具有裝置的專屬存取權來執行。

首先,定義量子電路和裝置。然後使用保留內容並執行任務。確保您的整個工作負載在 with 區塊內執行;在 with區塊範圍之外執行的任何項目都不會與您的保留相關聯!

from braket.aws import AwsDevice, DirectReservation from braket.circuits import Circuit from braket.devices import Devices bell = Circuit().h(0).cnot(0, 1) device = AwsDevice(Devices.IonQ.ForteEnterprise1) # run the circuit in a reservation with DirectReservation(device, reservation_arn="<my_reservation_arn>"): task = device.run(bell, shots=100)

您可以使用 CUDA-Q、 PennyLane和 Qiskit 外掛程式在保留中建立量子任務,只要DirectReservation內容在建立量子任務時處於作用中狀態即可。例如,透過 Qiskit-Braket 提供者,您可以執行任務,如下所示。

from braket.devices import Devices from braket.aws import DirectReservation from qiskit import QuantumCircuit from qiskit_braket_provider import BraketProvider qc = QuantumCircuit(2) qc.h(0) qc.cx(0, 1) qpu = BraketProvider().get_backend("Forte Enterprise 1") # run the circuit in a reservation with DirectReservation(Devices.IonQ.ForteEnterprise1, reservation_arn="<my_reservation_arn>"): qpu_task = qpu.run(qc, shots=10)

同樣地,下列程式碼會使用 Braket-PennyLane 外掛程式在保留期間執行電路。

from braket.devices import Devices from braket.aws import DirectReservation import pennylane as qml dev = qml.device("braket.aws.qubit", device_arn=Devices.IonQ.ForteEnterprise1.value, wires=2, shots=10) @qml.qnode(dev) def bell_state(): qml.Hadamard(wires=0) qml.CNOT(wires=[0, 1]) return qml.probs(wires=[0, 1]) # run the circuit in a reservation with DirectReservation(Devices.IonQ.ForteEnterprise1, reservation_arn="<my_reservation_arn>"): probs = bell_state()

手動設定保留內容

或者,您可以使用下列程式碼手動設定保留內容。

# set reservation context reservation_context = DirectReservation(device, reservation_arn="<my_reservation_arn>").start() # run circuit during reservation task = device.run(bell, shots=100)

這非常適合可在第一個儲存格中執行內容的 Jupyter 筆記本,且所有後續任務將在保留中執行。

注意

包含.start()呼叫的儲存格應只執行一次

若要切換回隨需模式:重新啟動 Jupyter 筆記本,或呼叫以下內容將內容變更回隨需模式。

reservation_context.stop() # unset reservation context
注意

保留具有預先決定的開始和結束時間 (請參閱建立保留)。reservation_context.start()reservation_context.stop()方法不會開始或終止保留。相反地,當內容處於作用中狀態時,您建立的任何量子任務都會與您的保留相關聯,並且只會在排定的保留期間執行。保留內容不會影響排定的保留時間。

建立任務時明確傳遞保留 ARN

在保留期間建立任務的另一個方法是在呼叫 時明確傳遞保留 ARNdevice.run()

task = device.run(bell, shots=100, reservation_arn="<my_reservation_arn>")

此方法會直接將量子任務與保留 ARN 建立關聯,確保在保留期間執行。針對此選項,將保留 ARN 新增至您計劃在保留期間執行的每個任務。不過,請注意,使用 Qiskit或 等第三方程式庫時PennyLane,可能很難確保提交的任務使用正確的保留 ARN。因此,建議使用 DirectReservation 內容管理員。

直接使用 boto3 時,請在建立任務時傳遞保留 ARN 做為關聯。

import boto3 braket_client = boto3.client("braket") kwargs["associations"] = [ { "arn": "<my_reservation_arn>", "type": "RESERVATION_TIME_WINDOW_ARN", } ] response = braket_client.create_quantum_task(**kwargs)