Attività di esempio suAmazonBraket - Amazon Braket

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Attività di esempio suAmazonBraket

Questa sezione illustra le fasi di esecuzione di un'attività di esempio, dalla selezione del dispositivo alla visualizzazione del risultato. Come best practice perAmazon Braket, si consiglia di iniziare eseguendo il circuito su un simulatore, ad esempioSV1.

Specificare il dispositivo

Innanzitutto, seleziona e specifica il dispositivo per la tua attività. Questo esempio illustra come scegliere il simulatore,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")

È possibile visualizzare alcune delle proprietà di questo dispositivo come segue:

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

Invia un'attività di esempio

Invia un'attività di esempio da eseguire sul simulatore su richiesta.

# 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) # get results of the task result = my_task.result()

Ladevice.run()comando crea un'attività tramite il comandoCreateQuantumTask API. Dopo un breve periodo di inizializzazione, l'attività viene messa in coda fino a quando non esiste la capacità necessaria per eseguire l'attività su un dispositivo. In questo caso, il dispositivo è il simulatore su richiestaSV1. Dopo che il dispositivo ha completato il calcolo,Amazon Braketscrive i risultati nelAmazonPosizione S3 specificata nella chiamata. Argomento posizionales3_locationè richiesto per tutti i dispositivi tranne il simulatore locale.

Nota

LaBraketl'azione quantistica (ad esempio, un problema di circuito o di ricottura) è limitata a 3 MB di dimensione.

Specifica shots

Lashotsargomento si riferisce al numero di misure desiderateshots. Simulatori comeSV1supporta due modalità di simulazione.

  • Pershots= 0, il simulatore esegue una simulazione esatta, restituendo i valori reali per tutti i tipi di risultato. (Non disponibile suTN1.)

  • Per valori diversi da zeroshots, il simulatore campiona dalla distribuzione di output per emulare ilshotrumore delle QPU reali. I dispositivi QPU consentono soloshots > 0.

Il numero massimo dishotsconsentito per il simulatore su richiesta eRigettidispositivo è 100,000. PerD-WaveeIonQdispositivi, il massimo è 10.000shots.

Polling dei risultati

Durante l'esecuzionemy_task.result(), l'SDK inizia il polling per un risultato con i parametri definiti al momento della creazione dell'attività:

  • poll_timeout_secondsè il numero di secondi per eseguire il polling dell'attività prima che scada durante l'esecuzione dell'attività sul simulatore su richiesta e/o sui dispositivi QPU. Il valore predefinito è 432.000 secondi, ovvero 5 giorni.

  • Nota: Per dispositivi QPU comeRigettieIonQ, si consiglia di concedere alcuni giorni. Se il tuo timeout di polling è troppo breve, i risultati potrebbero non essere restituiti entro il tempo di polling. Ad esempio, quando una QPU non è disponibile, viene restituito un errore di timeout locale.

  • poll_interval_secondsè la frequenza con cui viene eseguito il polling dell'attività. Specifica la frequenza con cui si chiama ilBraket APIper ottenere lo stato quando l'attività viene eseguita sul simulatore on demand e sui dispositivi QPU. Il valore predefinito è 1 secondo.

Questa esecuzione asincrona facilita l'interazione con dispositivi QPU che non sono sempre disponibili. Ad esempio, un dispositivo potrebbe non essere disponibile durante una normale finestra di manutenzione.

Il risultato restituito contiene una serie di metadati associati all'attività. È possibile verificare il risultato della misurazione con i seguenti comandi:

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}

Visualizzazione dei risultati di esempio

Perché hai anche specificato ilResultType, è possibile visualizzare i risultati restituiti. I tipi di risultati vengono visualizzati nell'ordine in cui sono stati aggiunti 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]

                  risultato demo