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 :
- 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 àoptionsl'attribut. UnsetSi 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.optionsL'attribut est dedataclasstype Python. Vous pouvez utiliser la méthode intégréeasdictpour 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.
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 :
- Si l' PUB e la précision, utilisez cette valeur.
- Si l'argument « precision » est spécifié dans
run, utilisez cette valeur. - Si
twirlingcette option est activée (valeur par défaut : True), le produit denum_randomizationsetshots_per_randomization, tel que spécifié par lestwirlingoptions, est utilisé. - Si
estimator.options.default_shotsest spécifié, utilisez cette valeur pour contrôler la quantité de données. - Si
estimator.options.default_precisionest 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.
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.
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 = 0Options 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
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)
Gérer les paramètres de réduction des erreurs de découplage dynamique.
dynamical_decouplingDocumentation de l'APIChoix :
True,FalsePar défaut :
FalseChoix :
middle,edgesPar défaut :
middleOptions :
asap,alapPar défaut :alapOptions :
XX,XpXm,XY4Par défaut :XXOptions :
True,FalsePar défaut :False
environmentDocumentation de l'APIFonction appelable qui reçoit
Job IDetJob 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,FalsePar défaut :
False
executionDocumentation de l'APIFaut-il ramener les qubits à l'état fondamental à chaque impulsion?
Choix :
True,FalsePar défaut :
TrueLe délai entre une mesure et le circuit quantique qui suit.
Options : Valeur comprise dans la plage fournie par
backend.rep_delay_rangePar 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.
resilienceDocumentation de l'APIOptions pour l'apprentissage du bruit de couche.
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 :
4Valeurs possibles : nombre entier >= 1
Par défaut :
32Valeurs possibles : nombre entier >= 1
Par défaut :
128Choix :
NoiseLearnerResult,Sequence[LayerError]Par défaut : Aucun
Choix :
True,FalsePar défaut :
TrueOptions pour l'apprentissage du bruit de mesure.
Valeurs possibles : nombre entier >= 1
Par défaut :
32Valeurs possibles : nombre entier,
autoPar défaut :
autoChoix :
True,FalsePar défaut :
FalseOptions probabilistes d'atténuation des erreurs.
Valeurs possibles :
None, nombre entier >= 1Par défaut :
100Valeurs possibles :
auto, nombre à virgule flottante compris entre [0 et 1]Par défaut :
autoChoix :
True,FalsePar défaut :
FalseChoix :
gate_folding,gate_folding_front,gate_folding_back,peaPar défaut :
gate_foldingOptions : 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),fallbackPar 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)pourPEA, 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,2Par défaut :
1Options à passer lors de la simulation d'un backend
simulatorDocumentation de l'APIOptions : 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
twirlingDocumentation de l'APIRéponses : Vrai, Faux
Par défaut : False
Réponses : Vrai, Faux
Par défaut : True
Valeurs possibles :
auto, nombre entier >= 1Par défaut :
autoValeurs possibles :
auto, nombre entier >= 1Par défaut :
autoChoix :
active,active-circuit,active-accum,allPar 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
- Pour plus d'informations sur ces
EstimatorV2méthodes, consultez la documentation de l'API Estimator. - Choisissez le mode d'exécution dans lequel vous souhaitez exécuter votre tâche.
- Découvrez la gestion du bruit avec Estimator.