Desarrollo de su primer circuito - Amazon Braket

Desarrollo de su primer circuito

Una vez lanzada la instancia de cuaderno, ábrala con una interfaz de Jupyter estándar. Para ello, seleccione el cuaderno que acaba de crear.

Interfaz de cuaderno que muestra una instancia de cuaderno existente denominada amazon-braket-test con el estado InService y su URL.

Las instancias de cuaderno de Amazon Braket vienen preinstaladas con el SDK de Amazon Braket y todas sus dependencias. Comience por crear un nuevo cuaderno con kernel de conda_braket.

Interfaz de lanzamiento para cuadernos, consola y otras herramientas como terminal, archivo de texto, archivo Markdown, archivo Python, con el entorno Python conda_braket resaltado.

Por ejemplo, puede empezar con un simple «¡Hola, mundo!» . Primero, desarrolle un circuito que prepare un estado de Bell y, a continuación, ejecute ese circuito en diferentes dispositivos para obtener los resultados.

Comience por importar los módulos del SDK de Amazon Braket y definir un simpleBRAKETlong; módulos del SDK y definición de un circuito básico de estado de 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)

Puede ver el circuito con este comando:

print(bell)
T : │ 0 │ 1 │ ┌───┐ q0 : ─┤ H ├───●─── └───┘ │ ┌─┴─┐ q1 : ───────┤ X ├─ └───┘ T : │ 0 │ 1 │

Ejecución del circuito en el simulador local

A continuación, elija el dispositivo cuántico en el que ejecutar el circuito. El SDK de Amazon Braket incluye un simulador local para la creación rápida de prototipos y pruebas. Recomendamos utilizar el simulador local para circuitos más pequeños, que pueden ser de hasta 25 qubits (según el hardware local).

Para crear una instancia de simulador local:

# Instantiate the local simulator local_sim = LocalSimulator()

Para ejecutar el circuito:

# Run the circuit result = local_sim.run(bell, shots=1000).result() counts = result.measurement_counts print(counts)

Debería ver un resultado similar al siguiente:

Counter({'11': 503, '00': 497})

El estado de Bell específico que ha preparado es una superposición igual de |00⟩ y |11⟩, y una distribución aproximadamente igual (hasta el ruido de shot) de 00 y 11 como resultados de medición, según se espera.

Ejecución del circuito en un simulador bajo demanda

Amazon Braket también proporciona acceso a un simulador de alto rendimiento bajo demanda, SV1, para ejecutar circuitos más grandes. SV1 es un simulador de vector de estado bajo demanda que permite simular circuitos cuánticos de hasta 34 qubits. Encontrará más información en SV1 en la sección Dispositivos compatibles y en la consola de AWS. Cuando ejecuta tareas cuánticas en SV1 (y en TN1 o en cualquier QPU), los resultados de la tarea cuántica se almacenan en un bucket de S3 en su cuenta. Si no especifica ningún bucket, el SDK de Braket crea un bucket predeterminado amazon-braket-{region}-{accountID} para usted. Para obtener más información, consulte Administración del acceso a Amazon Braket.

nota

Rellene el nombre real y existente de su bucket en donde el siguiente ejemplo muestra amazon-braket-s3-demo-bucket como el nombre del bucket. Los nombres de los buckets de Amazon Braket siempre comienzan por amazon-braket- seguido de otros caracteres identificativos que añada. Si necesita información sobre cómo configurar un bucket de S3, consulte Introducción a 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)

Para ejecutar un circuito en SV1, debe proporcionar la ubicación del bucket de S3 que seleccionó previamente como argumento posicional en la llamada de .run().

# 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)

La consola de Amazon Braket proporciona más información sobre su tarea cuántica. Diríjase a la pestaña Tareas cuánticas de la consola y su tarea cuántica debería aparecer en la parte superior de la lista. Como alternativa, puede buscar su tarea cuántica utilizando el identificador único de la tarea cuántica u otros criterios.

nota

Transcurridos 90 días, Amazon Braket elimina automáticamente todos los identificadores de tareas cuánticas y otros metadatos asociados a sus tareas cuánticas. Para obtener más información consulte Retención de datos.

Ejecución en una QPU

Con Amazon Braket, puede ejecutar el ejemplo anterior de circuito cuántico en una computadora cuántica física simplemente cambiando una línea de código. Amazon Braket proporciona acceso a dispositivos QPU desde IonQ, IQM, QuEra y Rigetti. Puede encontrar información sobre los distintos dispositivos y los periodos de disponibilidad en la sección Dispositivos compatibles y en la consola de AWS en la pestaña Dispositivos. En el siguiente ejemplo se muestra cómo crear instancias de un dispositivo de IQM.

# Choose the IQM hardware to run your circuit device = AwsDevice("arn:aws:braket:eu-north-1::device/qpu/iqm/Garnet")

O elija un dispositivo de IonQ con este código:

# Choose the Ionq device to run your circuit device = AwsDevice("arn:aws:braket:us-east-1::device/qpu/ionq/Aria-1")

Después de seleccionar un dispositivo y antes de ejecutar su carga de trabajo, puede consultar la profundidad de la cola del dispositivo con el siguiente código para determinar el número de tareas cuánticas o trabajos híbridos. Además, los clientes pueden ver las profundidades de cola específicas de cada dispositivo en la página Dispositivos de la 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'

Al ejecutar la tarea, el SDK de Amazon Braket sondea para obtener un resultado (con un tiempo de espera predeterminado de 5 días). Puede cambiar este valor predeterminado modificando el parámetro poll_timeout_seconds en el comando .run(), como se muestra en el siguiente ejemplo. Tenga en cuenta que si el tiempo de espera de sondeo es demasiado corto, es posible que los resultados no se devuelvan dentro del tiempo de sondeo, como cuando una QPU no está disponible y se devuelve un error de tiempo de espera local. Puede reiniciar el sondeo llamando a la función 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)

Además, después de enviar su tarea cuántica o trabajo híbrido, puede llamar a la función queue_position() para comprobar su posición en la cola.

print(task.queue_position().queue_position) # Return the number of quantum tasks queued ahead of you # '2'