Agrupación cuántica de tareas - Amazon Braket

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Agrupación cuántica de tareas

El procesamiento por lotes de tareas cuánticas está disponible en todos los dispositivos Amazon Braket, excepto en el simulador local. El procesamiento por lotes es especialmente útil para las tareas cuánticas que se ejecutan en los simuladores bajo demanda (TN1 o SV1) porque pueden procesar múltiples tareas cuánticas en paralelo. Para ayudarte a configurar diversas tareas cuánticas, Amazon Braket proporciona ejemplos de cuadernos.

El procesamiento por lotes le permite lanzar tareas cuánticas en paralelo. Por ejemplo, si desea realizar un cálculo que requiera 10 tareas cuánticas y los circuitos de esas tareas cuánticas sean independientes entre sí, es una buena idea utilizar el procesamiento por lotes. De esta forma, no tendrá que esperar a que se complete una tarea cuántica antes de que comience otra.

El siguiente ejemplo muestra cómo ejecutar un lote de tareas cuánticas:

circuits = [bell for _ in range(5)] batch = device.run_batch(circuits, s3_folder, shots=100) print(batch.results()[0].measurement_counts) # The result of the first quantum task in the batch

Para obtener más información, consulta los ejemplos de Amazon Braket sobre GitHub el procesamiento por lotes de tareas de Quantum, que contienen información más específica sobre el procesamiento por lotes.

Acerca del procesamiento por lotes de tareas cuánticas y sus costes

Algunas advertencias a tener en cuenta con respecto a los costos de facturación y procesamiento por lotes de tareas cuánticas:

  • De forma predeterminada, el procesamiento por lotes de tareas cuánticas se reintenta cada vez que se agota el tiempo de espera o falla las tareas cuánticas 3 veces.

  • Un lote de tareas cuánticas de larga duración, como 34 qubits for SV1, puede generar grandes costes. Asegúrese de comprobar detenidamente los valores de las run_batch asignaciones antes de iniciar un lote de tareas cuánticas. No recomendamos usar TN1 conrun_batch.

  • TN1 pueden incurrir en costes por las tareas fallidas de la fase de ensayo (consulte la TN1 descripción para obtener más información). Los reintentos automáticos pueden aumentar el coste, por lo que recomendamos establecer el número máximo de reintentos en el procesamiento por lotes en 0 cuando se utilice TN1 (consulte Quantum Task Batching, línea 186).

Procesamiento por lotes de tareas cuánticas y PennyLane

Aprovecha el procesamiento por lotes cuando utilices PennyLane Amazon Braket parallel = True configurando cuándo instancias un dispositivo Amazon Braket, como se muestra en el siguiente ejemplo.

device = qml.device("braket.aws.qubit",device_arn="arn:aws:braket:::device/quantum-simulator/amazon/sv1",wires=wires,s3_destination_folder=s3_folder,parallel=True,)

Para obtener más información sobre el procesamiento por lotes con PennyLane, consulte Optimización paralelizada de circuitos cuánticos.

Procesamiento por lotes de tareas y circuitos parametrizados

Al enviar un lote de tareas cuánticas que contiene circuitos parametrizados, puede proporcionar un inputs diccionario, que se utiliza para todas las tareas cuánticas del lote, o un conjunto de diccionarios list de entrada, en cuyo caso el diccionario i -ésimo se empareja con la i -ésima tarea, como se muestra en el siguiente ejemplo.

from braket.circuits import Circuit, FreeParameter, Observable from braket.aws import AwsQuantumTaskBatch # create the free parameters alpha = FreeParameter('alpha') beta = FreeParameter('beta') # create two circuits circ_a = Circuit().rx(0, alpha).ry(1, alpha).cnot(0,2).xx(0, 2, beta) circ_a.variance(observable=Observable.Z(), target=0) circ_b = Circuit().rx(0, alpha).rz(1, alpha).cnot(0,2).zz(0, 2, beta) circ_b.expectation(observable=Observable.Z(), target=2) # use the same inputs for both circuits in one batch tasks = device.run_batch([circ_a, circ_b], inputs={'alpha': 0.1, 'beta':0.2}) # or provide each task its own set of inputs inputs_list = [{'alpha': 0.3,'beta':0.1}, {'alpha': 0.1,'beta':0.4}] tasks = device.run_batch([circ_a, circ_b], inputs=inputs_list)

También puede preparar una lista de diccionarios de entrada para un único circuito paramétrico y enviarlos como un lote de tareas cuánticas. Si hay N diccionarios de entrada en la lista, el lote contiene N tareas cuánticas. La i -ésima tarea cuántica corresponde al circuito ejecutado con el i -ésimo diccionario de entrada.

from braket.circuits import Circuit, FreeParameter # create a parametric circuit circ = Circuit().rx(0, FreeParameter('alpha')) # provide a list of inputs to execute with the circuit inputs_list = [{'alpha': 0.1}, {'alpha': 0.2}, {'alpha': 0.3}] tasks = device.run_batch(circ, inputs=inputs_list)