Skip to main content
IBM Quantum Platform

Définir les options de l'estimateur

  • Le code présenté sur cette page a été développé en tenant compte des exigences suivantes. Nous vous recommandons d'utiliser ces versions ou des versions plus récentes.

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

Vous pouvez utiliser les options pour personnaliser la primitive Estimator. Si l'interface de la méthode run() des primitives est commune à toutes les implémentations, leurs options, elles, ne le sont pas. Consultez la documentation de l'API pour plus d'informations sur les qiskit.primitives.BaseEstimatorV2 options qiskit_aer.BaseEstimatorV2 et.

Remarques :

Remarques concernant la spécification des options dans les primitives de l'Estimator
  • Vous pouvez consulter les options disponibles et modifier leurs valeurs pendant ou après l'initialisation d'Estimator.
  • Utilisez la update() méthode pour appliquer les modifications à options l'attribut.
  • Unset Si vous ne spécifiez pas de valeur pour une option, celle-ci se voit attribuer la valeur spéciale et les paramètres par défaut du serveur sont utilisés.
  • options L'attribut est de dataclass type Python. Vous pouvez utiliser la méthode intégrée asdict pour le convertir en dictionnaire.

Définir les options de l'estimateur

Vous pouvez définir des options lors de l'initialisation d'Estimator, après l'avoir initialisé, ou (uniquement pour precision ) dans la run() méthode.

Initialisation des types primitifs

Lors de l'initialisation d'Estimator, vous pouvez lui passer une instance de la classe d'options ou un dictionnaire; il en fera alors une copie. Ainsi, la modification du dictionnaire d'origine ou de l'instance d'options n'a aucune incidence sur les options associées à la primitive.

Cours sur les options

Lors de la création d'une instance de la EstimatorV2 classe, vous pouvez lui passer une instance de la classe d'options. Ces options seront alors prises en compte lorsque vous utiliserez run() pour effectuer le calcul. Indiquez les options sous ce format : options.option.sub-option.sub-sub-option = choice. Exemple : options.dynamical_decoupling.enable = True

Exemple :

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)

Dictionnaire

Vous pouvez définir les options sous forme de dictionnaire lors de l'initialisation d'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]},
        },
    },
)

Options de mise à jour après l'initialisation

Vous pouvez définir les options sous ce format : estimator.options.option.sub-option.sub-sub-option = choice pour bénéficier de la saisie semi-automatique, ou utiliser la update() méthode pour effectuer des mises à jour en masse.

Il n'est pas nécessaire d'instancier la EstimatorV2 classe d'options (EstimatorOptions) si vous définissez les options après avoir initialisé l'élément primitif.

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

Méthode Run()

Les seules valeurs que vous pouvez transmettre à run() sont celles définies dans l'interface. C'est-à-dire, precision pour Estimator. Cela remplace toute valeur définie pour default_precision lors de l'exécution en cours.

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

Cas particulier : la précision

La EstimatorV2.run méthode accepte deux arguments : une liste de PUB, dont chacun peut spécifier une valeur de précision propre à l' PUB, et un argument de mot-clé « precision ». Ces valeurs de précision font partie de l'interface d'exécution de l'Estimator et sont indépendantes des options de l'Estimator d'exécution. Elles ont priorité sur toutes les valeurs spécifiées en tant qu'options afin de respecter l'abstraction de l'Estimator.

Cependant, si precision n'est spécifié par aucune PUB ni dans l'argument mot-clé run (ou s'ils sont tous None ), puis la valeur de précision des options est utilisée, notamment default_precision.

Note

Ces paramètres de précision servent uniquement à définir la précision souhaitée; il n'est pas garanti que les résultats atteignent la précision spécifiée.

Notez que les options de l'estimateur comprennent à la fois default_shots et default_precision. Cependant, comme la fonction « gate-twirling » est activée par défaut, le produit de num_randomizations et shots_per_randomization l'emporte sur ces deux options.

Plus précisément, pour toute PUB d'Estimator :

  1. Si l' PUB e la précision, utilisez cette valeur.
  2. Si l'argument « precision » est spécifié dans run, utilisez cette valeur.
  3. Si twirling cette option est activée (valeur par défaut : True), le produit de num_randomizations et shots_per_randomization, tel que spécifié par les twirling options, est utilisé.
  4. Si estimator.options.default_shots est spécifié, utilisez cette valeur pour contrôler la quantité de données.
  5. Si estimator.options.default_precision est spécifié, utilisez cette valeur.

Par exemple, si la précision est spécifiée aux quatre endroits, c'est celle qui a la priorité la plus élevée (la précision spécifiée dans l' PUB ) qui est utilisée.

Note

Bien que la précision spécifiée dans l' PUB et dans run ait une priorité plus élevée, la tâche échoue si twirling est activé et que le produit de num_randomizations et shots_per_randomization est inférieur au nombre de tirs nécessaires pour atteindre cette précision. num_randomizationsDans ce scénario, EstimatorV2 n'est pas en mesure de répartir les prises de vue entre les éléments spécifiés.

Note

La précision est inversement proportionnelle à l'utilisation. En d'autres termes, plus la précision est faible, plus l'exécution nécessite de temps de calcul sur le 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')>

Désactivez toutes les fonctions d'atténuation et de suppression des erreurs

Vous pouvez désactiver toutes les fonctions d'atténuation et de suppression des erreurs si, par exemple, vous menez des recherches sur vos propres techniques d'atténuation. Pour ce faire, définissez resilience_level = 0.

Exemple :

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

Options disponibles

Le tableau suivant présente les options de la dernière version de qiskit-ibm-runtime. Pour consulter les versions antérieures de cette option, rendez-vous sur la qiskit-ibm-runtime documentation de l'API et sélectionnez une version antérieure.

  • Le nombre total de tirs à utiliser par circuit et par configuration.

    Valeurs possibles : nombre entier >= 0

    Par défaut : Aucun

    default_shots Documentation de l'API

  • La précision par défaut à utiliser pour tout appel de la fonction PUBrun() qui n'en spécifie pas.

    Options : Flottant > 0

    Valeur par défaut : 0.015625 (1 / racine carrée de 4096)

    default_precision Documentation de l'API

  • Gérer les paramètres de réduction des erreurs de découplage dynamique.

    dynamical_decoupling Documentation de l'API

    • Choix : True, False

      Par défaut : False

    • Choix : middle, edges

      Par défaut : middle

    • Options : asap, alap Par défaut : alap

    • Options : XX, XpXm, XY4 Par défaut : XX

    • Options : True, False Par défaut : False

  • environment Documentation de l'API

    • Fonction appelable qui reçoit Job ID et Job result.

      Options : Aucune

      Par défaut : Aucun

    • Liste des balises.

      Options : Aucune

      Par défaut : Aucun

    • Options : DEBUG, INFO, WARNING, ERROR, CRITICAL

      Par défaut : AVERTISSEMENT

    • Choix : True, False

      Par défaut : False

  • execution Documentation de l'API

    • Faut-il ramener les qubits à l'état fondamental à chaque impulsion?

      Choix : True, False

      Par défaut : True

    • Le délai entre une mesure et le circuit quantique qui suit.

      Options : Valeur comprise dans la plage fournie par backend.rep_delay_range

      Par défaut : fourni par backend.default_rep_delay

  • Définit la durée maximale d'exécution d'une tâche, en secondes. Pour plus de détails, consultez le guide sur la durée maximale d'exécution.

    Valeurs possibles : nombre entier exprimant le nombre de secondes[,] compris entre 1 et 10 800

    Valeur par défaut : 10800 (3 heures)

  • Options avancées de résilience permettant d'affiner la stratégie de résilience.

    resilience Documentation de l'API

    • Options pour l'apprentissage du bruit de couche.

      resilience.layer_noise_learning Documentation de l'API

    • Options : [liste] de 2 à 10 valeurs comprises entre [0 et 200]

      Par défaut : (0, 1, 2, 4, 16, 32)

    • Options : Aucune, nombre entier >= 1

      Par défaut : 4

    • Valeurs possibles : nombre entier >= 1

      Par défaut : 32

    • Valeurs possibles : nombre entier >= 1

      Par défaut : 128

    • Choix : NoiseLearnerResult, Sequence[LayerError]

      Par défaut : Aucun

    • Choix : True, False

      Par défaut : True

    • Options pour l'apprentissage du bruit de mesure.

      resilience.measure_noise_learning Documentation de l'API

    • Valeurs possibles : nombre entier >= 1

      Par défaut : 32

    • Valeurs possibles : nombre entier, auto

      Par défaut : auto

    • Choix : True, False

      Par défaut : False

    • Options probabilistes d'atténuation des erreurs.

      resilience.pec Documentation de l'API

    • Valeurs possibles : None, nombre entier >= 1

      Par défaut : 100

    • Valeurs possibles : auto, nombre à virgule flottante compris entre [0 et 1]

      Par défaut : auto

    • Choix : True, False

      Par défaut : False

    • Choix : gate_folding, gate_folding_front, gate_folding_back, pea

      Par défaut : gate_folding

    • Options : Liste des flottants

      Par défaut : [0, *noise_factors]

    • Choix : un ou plusieurs des éléments suivants : exponential, linear, double_exponential, polynomial_degree_(1 <= k <= 7), fallback

      Par défaut : (exponential, linear)

    • Options : liste de nombres à virgule flottante; chaque nombre doit être supérieur ou égal à 1

      Par défaut : (1, 1.5, 2) pour PEA, et (1, 3, 5) sinon

  • Quel niveau de résilience faut-il mettre en place pour faire face aux erreurs? Des niveaux plus élevés donnent des résultats plus précis, mais au prix d'un temps de traitement plus long. Pour en savoir plus, consultez la section consacrée aux niveaux de résilience dans la rubrique « Gestion du bruit ».

    Options : 0, 1, 2

    Par défaut : 1

    resilience_level Documentation de l'API

  • Valeurs possibles : nombre entier

    Par défaut : Aucun

    seed_estimator

  • Options à passer lors de la simulation d'un backend

    simulator Documentation de l'API

    • Options : liste des noms de portes de base vers lesquelles effectuer le dépliage

      Par défaut : l'ensemble de toutes les portes de base prises en charge par le simulateur Qiskit Aer

    • Choix : Liste des interactions dirigées entre deux qubits

      Par défaut : Aucune, ce qui signifie qu'il n'y a aucune contrainte de connectivité (connectivité totale).

    • Options : Qiskit Aer NoiseModel ou sa représentation

      Par défaut : Aucun

    • Valeurs possibles : nombre entier

      Par défaut : Aucun

  • Options de rotation

    twirling Documentation de l'API

    • Réponses : Vrai, Faux

      Par défaut : False

    • Réponses : Vrai, Faux

      Par défaut : True

    • Valeurs possibles : auto, nombre entier >= 1

      Par défaut : auto

    • Valeurs possibles : auto, nombre entier >= 1

      Par défaut : auto

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

      Par défaut : active-accum

  • Options expérimentales, lorsqu'elles sont disponibles.


Compatibilité des fonctions

Certaines fonctionnalités d'exécution ne peuvent pas être utilisées conjointement dans une même tâche. Cliquez sur l'onglet correspondant pour afficher la liste des fonctionnalités incompatibles avec celle que vous avez sélectionnée :

  • Incompatible avec :

    • Tourner la barrière
    • PEA
    • PEC
  • Cela pourrait ne pas fonctionner si vous utilisez des portes personnalisées. Incompatible avec :

    • PEA
    • PEC
  • Incompatible avec :

    • Portes fractionnaires
    • Étirements

    Remarques supplémentaires :

    • La rotation des mesures ne peut s'appliquer qu'aux mesures de terminaison.
    • Ne fonctionne pas avec les entangleurs autres que Clifford.
  • Incompatible avec :

    • Portes fractionnaires
    • ZNE à rabat
    • PEC
  • Incompatible avec :

    • Portes fractionnaires
    • ZNE à rabat
    • PEA

Etapes suivantes

Recommandations
Cette page a-t-elle été utile ?
Signaler un bogue, une coquille ou proposer du contenu sur GitHub.