Ejemplos de tareas en Amazon Braket - 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.

Ejemplos de tareas en Amazon Braket

En esta sección se describen las etapas de ejecución de una tarea de ejemplo, desde la selección del dispositivo hasta la visualización del resultado. Como práctica recomendada paraAmazon Braket, le recomendamos que comience por ejecutar el circuito en un simulador, por ejemploSV1.

Especifique el dispositivo

Primero, selecciona y especifica el dispositivo para la tarea. Este ejemplo muestra cómo elegir el simulador,SV1.

# choose the on-demand simulator to run the circuit from braket.aws import AwsDevice device = AwsDevice("arn:aws:braket:::device/quantum-simulator/amazon/sv1")

Puede ver algunas de las propiedades de este dispositivo de la siguiente manera:

print (device.name) for iter in device.properties.action['braket.ir.jaqcd.program']: print(iter)
SV1 ('version', ['1.0', '1.1']) ('actionType', <DeviceActionType.JAQCD: 'braket.ir.jaqcd.program'>) ('supportedOperations', ['ccnot', 'cnot', 'cphaseshift', 'cphaseshift00', 'cphaseshift01', 'cphaseshift10', 'cswap', 'cy', 'cz', 'h', 'i', 'iswap', 'pswap', 'phaseshift', 'rx', 'ry', 'rz', 's', 'si', 'swap', 't', 'ti', 'unitary', 'v', 'vi', 'x', 'xx', 'xy', 'y', 'yy', 'z', 'zz']) ('supportedResultTypes', [ResultType(name='Sample', observables=['x', 'y', 'z', 'h', 'i', 'hermitian'], minShots=1, maxShots=100000), ResultType(name='Expectation', observables=['x', 'y', 'z', 'h', 'i', 'hermitian'], minShots=0, maxShots=100000), ResultType(name='Variance', observables=['x', 'y', 'z', 'h', 'i', 'hermitian'], minShots=0, maxShots=100000), ResultType(name='Probability', observables=None, minShots=1, maxShots=100000), ResultType(name='Amplitude', observables=None, minShots=0, maxShots=0)])

Enviar una tarea de ejemplo

Envíe una tarea de ejemplo para ejecutarla en el simulador bajo demanda.

# create a circuit with a result type circ = Circuit().rx(0, 1).ry(1, 0.2).cnot(0,2).variance(observable=Observable.Z(), target=0) # add another result type circ.probability(target=[0, 2]) # set up S3 bucket (where results are stored) my_bucket = "amazon-braket-your-s3-bucket-name" # the name of the bucket my_prefix = "your-folder-name" # the name of the folder in the bucket s3_location = (my_bucket, my_prefix) # submit the task to run my_task = device.run(circ, s3_location, shots=1000, poll_timeout_seconds = 100, poll_interval_seconds = 10) # the positional argument for the S3 bucket is optional if you want to specify a bucket other than the default # get results of the task result = my_task.result()

Eldevice.run() comando crea una tarea a través de laCreateQuantumTask API. Tras un breve período de inicialización, la tarea se pone en cola hasta que haya capacidad para ejecutarla en un dispositivo. En este caso, el dispositivo esSV1. Una vez que el dispositivo complete el cálculo,Amazon Braket escribe los resultados en la ubicación de Amazon S3 especificada en la llamada. El argumento posicionals3_location es obligatorio para todos los dispositivos, excepto para el simulador local.

nota

La acción de tarea cuántica de Braket está limitada a 3 MB de tamaño.

Enviar una tarea parametrizada

Los simuladores locales y bajo demanda de Amazon Braket también permiten especificar los valores de los parámetros gratuitos al enviar la tarea. Para ello, utilice elinputs argumento todevice.run(), como se muestra en el siguiente ejemplo. inputsDebe ser un diccionario de pares de cadenas y flotantes, donde las claves sean los nombres de los parámetros.

from braket.circuits import Circuit, FreeParameter, Observable # create the free parameters alpha = FreeParameter('alpha') beta = FreeParameter('beta') # create a circuit with a result type circ = Circuit().rx(0, alpha).ry(1, alpha).cnot(0,2).xx(0, 2, beta) circ.variance(observable=Observable.Z(), target=0) # add another result type circ.probability(target=[0, 2]) # submit the task to run my_task = device.run(circ, inputs={'alpha': 0.1, 'beta':0.2})

Especifique shots.

Elshots argumento se refiere al número de medidas deseadasshots. Los simuladores de este tipoSV1 admiten dos modos de simulación.

  • Parashots = 0, el simulador realiza una simulación exacta y devuelve los valores verdaderos para todos los tipos de resultados. (No disponible enTN1.)

  • Para valores distintos de cero deshots, el simulador muestrea la distribución de salida para emular elshot ruido de las QPU reales. Los dispositivos QPU solo permitenshots > 0.

Para obtener información sobre el número máximo de disparos por tarea, consulte Cuotas de frenado.

Encuesta de resultados

Durante la ejecuciónmy_task.result(), el SDK comienza a sondear un resultado con los parámetros que defina al crear la tarea:

  • poll_timeout_secondses el número de segundos necesarios para sondear la tarea antes de que se agote cuando se ejecuta la tarea en el simulador bajo demanda o en los dispositivos de la QPU. El valor predeterminado es 432.000 segundos, es decir, 5 días.

  • Nota: Para dispositivos de QPU comoRigetti yIonQ, te recomendamos que esperes unos días. Si el tiempo de espera de la votación es demasiado corto, es posible que no se devuelvan los resultados dentro del plazo de votación. Por ejemplo, cuando una QPU no está disponible, se devuelve un error de tiempo de espera local.

  • poll_interval_secondses la frecuencia con la que se sondea la tarea. Especifica la frecuencia con la que se llama al BraketAPI para obtener el estado cuando la tarea se ejecuta en el simulador bajo demanda y en los dispositivos de la QPU. El valor predeterminado es de 1 segundo.

Esta ejecución asincrónica facilita la interacción con los dispositivos QPU que no siempre están disponibles. Por ejemplo, un dispositivo podría no estar disponible durante un período de mantenimiento regular.

El resultado devuelto contiene un rango de metadatos asociados a la tarea. Puede comprobar el resultado de la medición con los siguientes comandos:

print('Measurement results:\n',result.measurements) print('Counts for collapsed states:\n',result.measurement_counts) print('Probabilities for collapsed states:\n',result.measurement_probabilities)
Measurement results: [[1 0 1] [0 0 0] [1 0 1] ... [0 0 0] [0 0 0] [0 0 0]] Counts for collapsed states: Counter({'000': 761, '101': 226, '010': 10, '111': 3}) Probabilities for collapsed states: {'101': 0.226, '000': 0.761, '111': 0.003, '010': 0.01}

Ver los resultados del ejemplo

Como también especificó elResultType, puede ver los resultados devueltos. Los tipos de resultados aparecen en el orden en el que se agregaron al circuito.

print('Result types include:\n', result.result_types) print('Variance=',result.values[0]) print('Probability=',result.values[1]) # you can plot the result and do some analysis import matplotlib.pyplot as plt plt.bar(result.measurement_counts.keys(), result.measurement_counts.values()); plt.xlabel('bitstrings'); plt.ylabel('counts');
Result types include: [ResultTypeValue(type={'observable': ['z'], 'targets': [0], 'type': 'variance'}, value=0.7062359999999999), ResultTypeValue(type={'targets': [0, 2], 'type': 'probability'}, value=array([0.771, 0. , 0. , 0.229]))] Variance= 0.7062359999999999 Probability= [0.771 0. 0. 0.229]

                  resultado de demostración