Seguimiento de tareas cuánticas desde el SDK de Amazon Braket
El comando device.run(…) define una tarea cuántica con un identificador de tarea cuántica único. Puede consultar y realizar el seguimiento del estado con task.state(), como se muestra en el siguiente ejemplo.
Nota: task = device.run() es una operación asíncrona, lo que significa que puede seguir trabajando mientras el sistema procesa su tarea cuántica en segundo plano.
Recuperación de un resultado
Cuando llama a task.result(), el SDK comienza a sondear a Amazon Braket para ver si la tarea cuántica se ha completado. El SDK usa los parámetros de sondeo que haya definido en .run(). Una vez completada la tarea cuántica, el SDK recupera el resultado del bucket de S3 y lo devuelve como un objeto QuantumTaskResult.
# create a circuit, specify the device and run the circuit circ = Circuit().rx(0, 0.15).ry(1, 0.2).cnot(0,2) device = AwsDevice("arn:aws:braket:::device/quantum-simulator/amazon/sv1") task = device.run(circ, s3_location, shots=1000) # get ID and status of submitted task task_id = task.id status = task.state() print('ID of task:', task_id) print('Status of task:', status) # wait for job to complete while status != 'COMPLETED': status = task.state() print('Status:', status)
ID of task: arn:aws:braket:us-west-2:123412341234:quantum-task/b68ae94b-1547-4d1d-aa92-1500b82c300d Status of task: QUEUED Status: QUEUED Status: QUEUED Status: QUEUED Status: QUEUED Status: QUEUED Status: QUEUED Status: QUEUED Status: RUNNING Status: RUNNING Status: COMPLETED
Cancelación de una tarea cuántica
Para cancelar una tarea cuántica, llame al método cancel(), como se muestra en el siguiente ejemplo.
# cancel quantum task task.cancel() status = task.state() print('Status of task:', status)
Status of task: CANCELLING
Comprobación de los metadatos
Puede comprobar los metadatos de la tarea cuántica finalizada, como se muestra en el siguiente ejemplo.
# get the metadata of the quantum task metadata = task.metadata() # example of metadata shots = metadata['shots'] date = metadata['ResponseMetadata']['HTTPHeaders']['date'] # print example metadata print("{} shots taken on {}.".format(shots, date)) # print name of the s3 bucket where the result is saved results_bucket = metadata['outputS3Bucket'] print('Bucket where results are stored:', results_bucket) # print the s3 object key (folder name) results_object_key = metadata['outputS3Directory'] print('S3 object key:', results_object_key) # the entire look-up string of the saved result data look_up = 's3://'+results_bucket+'/'+results_object_key print('S3 URI:', look_up)
1000 shots taken on Wed, 05 Aug 2020 14:44:22 GMT. Bucket where results are stored: amazon-braket-123412341234 S3 object key: simulation-output/b68ae94b-1547-4d1d-aa92-1500b82c300d S3 URI: s3://amazon-braket-123412341234/simulation-output/b68ae94b-1547-4d1d-aa92-1500b82c300d
Recuperación de una tarea cuántica o un resultado
Si su kernel se bloquea después de enviar la tarea cuántica o si cierra su cuaderno o su computadora, puede reconstruir el objeto task con su ARN único (ID de tarea cuántica). A continuación, puede llamar a task.result() para obtener el resultado del bucket de S3 en el que está almacenado.
from braket.aws import AwsSession, AwsQuantumTask # restore task with unique arn task_load = AwsQuantumTask(arn=task_id) # retrieve the result of the task result = task_load.result()