Skip to main content
IBM Quantum Platform

Specificare le opzioni di Estimator

  • Il codice presente in questa pagina è stato sviluppato sulla base dei seguenti requisiti. Si consiglia di utilizzare queste versioni o quelle più recenti.

    qiskit[all]~=2.5.1
    qiskit-ibm-runtime~=0.47.0
    

È possibile utilizzare le opzioni per personalizzare la primitiva Estimator. Sebbene l'interfaccia del metodo run() delle primitive sia comune a tutte le implementazioni, le relative opzioni non lo sono. Per informazioni sulle opzioni qiskit.primitives.BaseEstimatorV2 qiskit_aer.BaseEstimatorV2 e, consultare la documentazione dell'API.

Note:

Note sulla specificazione delle opzioni nelle primitive di Estimator
  • È possibile visualizzare le opzioni disponibili e aggiornare i valori delle opzioni durante o dopo l'inizializzazione di Estimator.
  • Utilizza il update() metodo per applicare le modifiche all'attributo options .
  • Se non si specifica un valore per un'opzione, le viene assegnato il valore speciale e vengono utilizzati i valori predefiniti del Unset server.
  • options L'attributo è di dataclass tipo Python. È possibile utilizzare il metodo integrato asdict per convertirlo in un dizionario.

Imposta le opzioni di Estimator

È possibile impostare le opzioni al momento dell'inizializzazione di Estimator, dopo l'inizializzazione di Estimator oppure (solo in precision questo caso) nel run() metodo.

Inizializzazione primitiva

Durante l'inizializzazione di Estimator è possibile passare un'istanza della classe delle opzioni o un dizionario; Estimator provvederà quindi a crearne una copia. Pertanto, la modifica del dizionario originale o dell'istanza delle opzioni non influisce sulle opzioni associate alla primitiva.

Corso sulle opzioni

Quando si crea un'istanza della EstimatorV2 classe, è possibile passare un'istanza della classe delle opzioni. Queste opzioni verranno quindi applicate quando utilizzerai run() per eseguire il calcolo. Specificare le opzioni nel seguente formato: options.option.sub-option.sub-sub-option = choice. Ad esempio: options.dynamical_decoupling.enable = True

Esempio:

from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit_ibm_runtime.options import EstimatorOptions

service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)

options = EstimatorOptions(
    resilience_level=2,
    resilience={"zne_mitigation": True, "zne": {"noise_factors": [1, 3, 5]}},
)

# or...
options = EstimatorOptions()
options.resilience_level = 2
options.resilience.zne_mitigation = True
options.resilience.zne.noise_factors = [1, 3, 5]

estimator = Estimator(mode=backend, options=options)

Dizionario

È possibile specificare le opzioni sotto forma di dizionario al momento dell'inizializzazione di Estimator.

from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator

service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)

# Setting options during initialization
estimator = Estimator(
    backend,
    options={
        "resilience_level": 2,
        "resilience": {
            "zne_mitigation": True,
            "zne": {"noise_factors": [1, 3, 5]},
        },
    },
)

Opzioni di aggiornamento dopo l'inizializzazione

È possibile specificare le opzioni in questo formato: estimator.options.option.sub-option.sub-sub-option = choice per usufruire del completamento automatico, oppure utilizzare il update() metodo per effettuare aggiornamenti in blocco.

Non è necessario istanziare la classe delle EstimatorV2 opzioni (EstimatorOptions) se si impostano le opzioni dopo aver inizializzato il tipo primitivo.

from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator

service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)

estimator = Estimator(mode=backend)

# Setting options after initialization
# This uses auto-complete.
estimator.options.default_precision = 0.01
# This does bulk update.
estimator.options.update(
    default_precision=0.02, resilience={"zne_mitigation": True}
)

Metodo Run()

Gli unici valori che è possibile passare run() sono quelli definiti nell'interfaccia. Cioè, precision per Estimator. Questo sovrascrive qualsiasi valore impostato per default_precision nell'esecuzione corrente.

from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit.circuit.library import random_iqp
from qiskit.transpiler import generate_preset_pass_manager
from qiskit.quantum_info import SparsePauliOp

service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)

circuit1 = random_iqp(3)
circuit1.measure_all()
circuit2 = random_iqp(3)
circuit2.measure_all()

observable = SparsePauliOp("Z" * 3)

pass_manager = generate_preset_pass_manager(
    optimization_level=3, backend=backend
)

transpiled1 = pass_manager.run(circuit1)
transpiled2 = pass_manager.run(circuit2)
isa_observable1 = observable.apply_layout(transpiled1.layout)
isa_observable2 = observable.apply_layout(transpiled2.layout)

estimator = Estimator(mode=backend)
# Default precision to use if not specified in run()
estimator.options.default_precision = 0.01
# Run two circuits, requiring a precision of .02 for both.
estimator.run(
    [(transpiled1, isa_observable1), (transpiled2, isa_observable2)],
    precision=0.02,
)

Output:

<RuntimeJobV2('d9mqa0g8csec73fagtl0', 'estimator')>

Caso particolare: precisione

Il EstimatorV2.run metodo accetta due argomenti: un elenco di PUB, ciascuno dei quali può specificare un valore di precisione specifico per l' PUB, e un argomento chiave denominato "precision". Questi valori di precisione fanno parte dell'interfaccia di esecuzione dell'Estimator e sono indipendenti dalle opzioni dell'Estimator di runtime. Hanno la precedenza su qualsiasi valore specificato come opzione, al fine di rispettare l'astrazione dell'Estimator.

Tuttavia, se non precision è specificato né tramite l'opzione PUB né nell'argomento della parola chiave run (o se entrambi sono impostati su None), viene utilizzato il valore di precisione specificato nelle opzioni, in particolare default_precision.

Note

Questi parametri di precisione servono esclusivamente a specificare la precisione desiderata; non è garantito che i risultati raggiungano effettivamente la precisione specificata.

Si noti che le opzioni di Estimator includono sia default_shots che default_precision. Tuttavia, poiché la funzione "gate-twirling" è abilitata per impostazione predefinita, il prodotto di num_randomizations e shots_per_randomization ha la precedenza su queste due opzioni.

In particolare, per qualsiasi file di configurazione dell'Estimator ( PUB ):

  1. Se il parametro PUB specifica la precisione, utilizzare quel valore.
  2. Se nell'argomento è specificato il valore run di precisione, utilizzare quel valore.
  3. Se twirling è abilitato (impostazione predefinita: True), viene utilizzato il prodotto di num_randomizations e shots_per_randomization, come specificato nelle twirling opzioni.
  4. Se estimator.options.default_shots viene specificato, utilizzare quel valore per regolare la quantità di dati.
  5. Se estimator.options.default_precision viene specificato, utilizzare quel valore.

Ad esempio, se la precisione è specificata in tutte e quattro le posizioni, viene utilizzata quella con la precedenza più alta (la precisione specificata nell' PUB ).

Note

Sebbene la precisione specificata nell' PUB e e in run abbia una precedenza maggiore, il processo fallisce se twirling è abilitato e il prodotto di num_randomizations e shots_per_randomization è inferiore al numero di shot necessari per raggiungere la precisione richiesta. num_randomizationsIn questo scenario, EstimatorV2 non è in grado di distribuire i colpi tra i specificati.

Note

La precisione è inversamente proporzionale all'uso. In altre parole, minore è la precisione, maggiore è il tempo di elaborazione richiesto dalla QPU.

from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit.circuit.library import random_iqp
from qiskit.transpiler import generate_preset_pass_manager
from qiskit.quantum_info import SparsePauliOp

service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)

observable = SparsePauliOp("Z" * 3)

circuit = random_iqp(3)
circuit.measure_all()

pass_manager = generate_preset_pass_manager(
    optimization_level=3, backend=backend
)

isa_circuit = pass_manager.run(circuit)
isa_observable = observable.apply_layout(isa_circuit.layout)

# Setting precision during primitive initialization
estimator = Estimator(mode=backend, options={"default_precision": 0.05})

# Run with precision=0.02, overwriting the default.
estimator.run(
    [(isa_circuit, isa_observable1)],
    precision=0.02,
)

Output:

<RuntimeJobV2('d9mqa2o8csec73fagtpg', 'estimator')>

Disattiva tutte le funzioni di mitigazione e soppressione degli errori

È possibile disattivare tutte le funzioni di mitigazione e soppressione degli errori se, ad esempio, si sta conducendo una ricerca sulle proprie tecniche di mitigazione. Per farlo, imposta resilience_level = 0.

Esempio:

from qiskit_ibm_runtime import EstimatorV2 as Estimator, QiskitRuntimeService

# Define the service.  This allows you to access an IBM QPU.
service = QiskitRuntimeService()

# Get a backend
backend = service.least_busy(operational=True, simulator=False)

# Define Estimator
estimator = Estimator(backend)

options = estimator.options

# Turn off all error mitigation and suppression
options.resilience_level = 0

Opzioni disponibili

La tabella seguente illustra le opzioni disponibili nell'ultima versione di qiskit-ibm-runtime. Per visualizzare le versioni precedenti delle opzioni, visita la qiskit-ibm-runtime documentazione dell'API e seleziona una versione precedente.

  • Il numero totale di impulsi da utilizzare per circuito per configurazione.

    Opzioni : numero intero >= 0

    Impostazione predefinita : Nessuna

    default_shots Documentazione API

  • La precisione predefinita da utilizzare per qualsiasi chiamata a PUBrun() che non ne specifichi una.

    Opzioni : Float > 0

    Impostazione predefinita : 0.015625 (1 / √4096)

    default_precision Documentazione API

  • Gestire le impostazioni di mitigazione degli errori di disaccoppiamento dinamico.

    dynamical_decoupling Documentazione API

    • Opzioni : True, False

      Impostazione predefinita : False

    • Opzioni : middle, edges

      Impostazione predefinita : middle

    • Opzioni: asap, alap Impostazione predefinita: alap

    • Opzioni: XX, XpXm, XY4 Impostazione predefinita: XX

    • Opzioni: True, False Impostazione predefinita: False

  • environment Documentazione API

    • Funzione richiamabile che riceve Job ID e Job result.

      Opzioni : Nessuna

      Impostazione predefinita : Nessuna

    • Elenco dei tag.

      Opzioni : Nessuna

      Impostazione predefinita : Nessuna

    • Opzioni : DEBUG, INFO, AVVISO, ERRORE, CRITICO

      Impostazione predefinita : AVVISO

    • Opzioni : True, False

      Impostazione predefinita : False

  • execution Documentazione API

    • Se riportare i qubit allo stato fondamentale ad ogni esecuzione.

      Opzioni : True, False

      Impostazione predefinita : True

    • Il ritardo tra una misurazione e il successivo circuito quantistico.

      Opzioni : Valore compreso nell'intervallo specificato da backend.rep_delay_range

      Impostazione predefinita : specificata da backend.default_rep_delay

  • Limita la durata di esecuzione di un processo, in secondi. Per ulteriori dettagli, consulta la guida sul tempo massimo di esecuzione.

    Opzioni : numero intero di secondi compreso tra [1 e 10800]

    Impostazione predefinita : 10800 (3 ore)

  • Opzioni avanzate di resilienza per ottimizzare la strategia di resilienza.

    resilience Documentazione API

    • Opzioni per l'apprendimento del rumore del livello.

      resilience.layer_noise_learning Documentazione API

    • Opzioni : [elenco] di 2-10 valori compresi tra [0 e 200]

      Impostazione predefinita : (0, 1, 2, 4, 16, 32)

    • Opzioni : Nessuna, numero intero >= 1

      Impostazione predefinita : 4

    • Opzioni : numero intero >= 1

      Impostazione predefinita : 32

    • Opzioni : numero intero >= 1

      Impostazione predefinita : 128

    • Opzioni : NoiseLearnerResult, Sequence[LayerError]

      Impostazione predefinita : Nessuna

    • Opzioni : True, False

      Impostazione predefinita : True

    • Opzioni per l'apprendimento del rumore di misurazione.

      resilience.measure_noise_learning Documentazione API

    • Opzioni : numero intero >= 1

      Impostazione predefinita : 32

    • Opzioni : Intero, auto

      Impostazione predefinita : auto

    • Opzioni : True, False

      Impostazione predefinita : False

    • Opzioni di mitigazione della cancellazione probabilistica degli errori.

      resilience.pec Documentazione API

    • Opzioni : None, numero intero ≥ 1

      Impostazione predefinita : 100

    • Opzioni : auto, numero decimale compreso tra [0 e 1]

      Impostazione predefinita : auto

    • Opzioni : True, False

      Impostazione predefinita : False

    • Opzioni : gate_folding, gate_folding_front, gate_folding_back, pea

      Impostazione predefinita : gate_folding

    • Opzioni : Elenco dei galleggianti

      Impostazione predefinita : [0, *noise_factors]

    • Opzioni : Una o più delle seguenti: exponential, linear, double_exponential, polynomial_degree_(1 <= k <= 7), fallback

      Impostazione predefinita : (exponential, linear)

    • Opzioni : elenco di galleggianti; ogni galleggiante deve essere ≥ 1

      Impostazione predefinita : (1, 1.5, 2) per PEA, e (1, 3, 5) altrimenti

  • Quanto livello di resilienza occorre garantire in caso di errori? Livelli più elevati producono risultati più accurati, ma comportano tempi di elaborazione più lunghi. Per ulteriori informazioni, consulta la sezione sui livelli di resilienza nell'argomento "Gestione del rumore".

    Opzioni : 0, 1, 2

    Impostazione predefinita : 1

    resilience_level Documentazione API

  • Valori consentiti : numero intero

    Impostazione predefinita : Nessuna

    seed_estimator

  • Opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzioni opzi

    simulator Documentazione API

    • Opzioni : Elenco dei nomi dei gate di base su cui eseguire l'unrolling

      Impostazione predefinita : l'insieme di tutte le porte di base supportate dal simulatore Qiskit Aer

    • Opzioni : Elenco delle interazioni dirette tra due qubit

      Impostazione predefinita : Nessuna, il che implica l'assenza di vincoli di connettività (connettività completa).

    • Opzioni : Qiskit Aer NoiseModel o la sua rappresentazione

      Impostazione predefinita : Nessuna

    • Valori consentiti : numero intero

      Impostazione predefinita : Nessuna

  • Opzioni di rotazione

    twirling Documentazione API

    • Opzioni : Vero, Falso

      Impostazione predefinita : False

    • Opzioni : Vero, Falso

      Impostazione predefinita : True

    • Opzioni : auto, numero intero ≥ 1

      Impostazione predefinita : auto

    • Opzioni : auto, numero intero ≥ 1

      Impostazione predefinita : auto

    • Opzioni : active, active-circuit, active-accum, all

      Impostazione predefinita : active-accum

  • Opzioni sperimentali, se disponibili.


Compatibilità delle funzioni

Alcune funzionalità di runtime non possono essere utilizzate contemporaneamente in un unico processo. Fai clic sulla scheda corrispondente per visualizzare un elenco delle funzionalità incompatibili con quella selezionata:

  • Incompatibile con:

    • Giro della porta
    • PEA
    • Pec
  • Potrebbe non funzionare se si utilizzano gate personalizzati. Incompatibile con:

    • PEA
    • Pec
  • Incompatibile con:

    • Portali frazionati
    • Allungamenti

    Altre note:

    • La rotazione delle misure può essere applicata solo alle misure terminali.
    • Non funziona con intrecciatori non Clifford.
  • Incompatibile con:

    • Portali frazionati
    • ZNE con copertina a libro
    • Pec
  • Incompatibile con:

    • Portali frazionati
    • ZNE con copertina a libro
    • PEA

Passi successivi

Suggerimenti
Questa pagina è stata utile?
Segnala un bug, un errore di battitura o richiedi contenuti su GitHub.