예약 기간 동안 양자 작업 실행 - Amazon Braket

예약 기간 동안 양자 작업 실행

예약 생성에서 유효한 예약 ARN을 얻은 후 예약 기간 동안 실행할 양자 작업을 생성할 수 있습니다. 이러한 작업은 예약이 시작될 때까지 QUEUED 상태로 유지됩니다.

참고

예약은 AWS 계정 및 디바이스별로 다릅니다. 예약을 생성한 AWS 계정만 예약 ARN을 사용할 수 있습니다.

참고

예약 기간 동안에는 해당 사용자의 작업만 실행되므로 예약 ARN과 함께 제출된 작업에 대해서는 대기열 가시성이 없습니다.

Braket, Qiskit, PennyLane 등의 Python SDKs를 사용하거나 boto3(Boto3으로 작업)으로 직접 양자 작업을 생성할 수 있습니다. 예약을 사용하려면 버전 v1.79.0 이상의 Amazon Braket Python SDK가 있어야 합니다. 다음 코드를 사용하여 최신 Braket SDK, Qiskit 공급자 및 PennyLane 플러그인으로 업데이트할 수 있습니다.

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

DirectReservation 컨텍스트 관리자를 사용하여 작업 실행

예정된 예약 내에서 작업을 실행하는 데 권장되는 방법은 DirectReservation 컨텍스트 관리자를 사용하는 것입니다. 컨텍스트 관리자는 대상 디바이스와 예약 ARN을 지정하여 Python 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.Aria1) # run the circuit in a reservation with DirectReservation(device, reservation_arn="<my_reservation_arn>"): task = device.run(bell, shots=100)

양자 작업을 생성하는 동안 DirectReservation 컨텍스트가 활성 상태인 한, PennyLane 및 Qiskit 플러그인을 사용하여 예약에서 양자 작업을 생성할 수 있습니다. 예를 들어 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) aria = BraketProvider().get_backend("Aria 1") # run the circuit in a reservation with DirectReservation(Devices.IonQ.Aria1, reservation_arn="<my_reservation_arn>"): aria_task = aria.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.Aria1.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.Aria1, reservation_arn="<my_reservation_arn>"): probs = bell_state()

예약 컨텍스트 수동 설정

또는 다음 코드를 사용하여 예약 컨텍스트를 수동으로 설정할 수 있습니다.

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

이는 컨텍스트를 첫 번째 셀에서 실행할 수 있고 모든 후속 작업이 예약에서 실행되는 Jupyter Notebook에 적합합니다.

참고

.start() 직접 호출이 포함된 셀은 한 번만 실행해야 합니다.

온디맨드 모드로 다시 전환하는 방법: Jupyter Notebook을 다시 시작하거나 다음을 직접적으로 호출하여 컨텍스트를 온디맨드 모드로 다시 변경합니다.

reservation.stop() # unset reservation context
참고

예약에는 예정된 시작 및 종료 시간이 있습니다(Create a reservation 참조). reservation.start()reservation.stop() 메서드는 예약을 시작하거나 종료하지 않습니다. 이는 예약 기간 동안 실행할 모든 후속 양자 작업을 수정하는 메서드입니다. 이러한 메서드는 예정된 예약 시간에 영향을 미치지 않습니다.

작업 생성 시 예약 ARN 명시적으로 전달

예약 기간 동안 작업을 생성하는 또 다른 방법은 device.run()를 직접적으로 호출할 때 예약 ARN을 명시적으로 전달하는 것입니다.

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

이 메서드는 양자 작업을 예약 ARN과 직접 연결하여 예약 기간 동안 실행되도록 합니다. 이 옵션의 경우 예약 기간 동안 실행하려는 각 작업에 예약 ARN을 추가합니다. 또한 Qiskit 또는 PennyLane에서 생성된 작업이 올바른 예약 ARN을 사용하고 있는지 확인합니다. 이러한 추가 고려 사항으로 인해 이전 두 가지 방법이 권장됩니다.

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)