Spécifier les options du Sampler
Versions des packages
Le code de cette page a été développé avec les prérequis suivants. Nous recommandons d'utiliser ces versions ou des versions plus récentes.
qiskit[all]~=2.4.0
qiskit-ibm-runtime~=0.46.1
Tu peux utiliser des options pour personnaliser la primitive Sampler. Cette section explique comment spécifier les options de la primitive Qiskit Runtime. Bien que l'interface de la méthode run() des primitives soit commune à toutes les implémentations, leurs options ne le sont pas. Consulte les références API correspondantes pour obtenir des informations sur les options de qiskit.primitives.BackendSamplerV2 et qiskit_aer.primitives.SamplerV2.
Définir les options du Sampler
Tu peux définir des options lors de l'initialisation du Sampler, après son initialisation, ou mettre à jour les options une fois qu'il a été initialisé. Pour savoir comment utiliser ces techniques, consulte la rubrique Introduction aux options.
De plus, tu peux définir la valeur shots dans la méthode run(), comme décrit dans la section suivante.
Méthode Run()
Les seules valeurs que tu peux passer à run() sont celles définies dans l'interface, c'est-à-dire shots. Cela écrase toute valeur définie pour default_shots pour l'exécution en cours.
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-runtime
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import SamplerV2 as Sampler
from qiskit.circuit.library import random_iqp
from qiskit.transpiler import generate_preset_pass_manager
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
circuit1 = random_iqp(3)
circuit1.measure_all()
circuit2 = random_iqp(3)
circuit2.measure_all()
pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend
)
transpiled1 = pass_manager.run(circuit1)
transpiled2 = pass_manager.run(circuit2)
sampler = Sampler(mode=backend)
# Default shots to use if not specified in run()
sampler.options.default_shots = 500
# Sample two circuits at 128 shots each.
sampler.run([transpiled1, transpiled2], shots=128)
<RuntimeJobV2('d8286680bvlc73d1vmu0', 'sampler')>
Cas particuliers
Shots
La méthode SamplerV2.run accepte deux arguments : une liste de PUBs, chacun pouvant spécifier une valeur de shots propre au PUB, et un argument mot-clé shots. Ces valeurs de shots font partie de l'interface d'exécution du Sampler et sont indépendantes des options du Sampler Runtime. Elles ont la priorité sur toute valeur spécifiée dans les options afin de respecter l'abstraction Sampler.
Cependant, si shots n'est spécifié ni par un PUB ni dans l'argument mot-clé run (ou s'ils sont tous None), alors la valeur de shots provenant des options est utilisée, notamment default_shots.
Pour résumer, voici l'ordre de priorité pour spécifier les shots dans le Sampler, pour tout PUB particulier :
- Si le PUB spécifie des shots, utiliser cette valeur.
- Si l'argument mot-clé
shotsest spécifié dansrun, utiliser cette valeur. - Si
twirlingest activé (True par défaut), alors le produit denum_randomizationset deshots_per_randomization, tel que spécifié dans les optionstwirling, est utilisé. - Si
sampler.options.default_shotsest spécifié, utiliser cette valeur.
Ainsi, si des shots sont spécifiés à tous les endroits possibles, celui ayant la priorité la plus haute (shots spécifiés dans le PUB) est utilisé.
Bien que les shots spécifiés dans le PUB et dans run aient une priorité plus haute, le job échoue si twirling est activé et que le produit de num_randomizations et shots_per_randomization est inférieur à la valeur de shots. Dans ce scénario, SamplerV2 est incapable de répartir les shots entre les num_randomizations spécifiés.
Exemple :
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import SamplerV2 as Sampler
from qiskit.circuit.library import random_iqp
from qiskit.transpiler import generate_preset_pass_manager
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
circuit1 = random_iqp(3)
circuit1.measure_all()
circuit2 = random_iqp(3)
circuit2.measure_all()
pass_manager = generate_preset_pass_manager(
optimization_level=3, backend=backend
)
transpiled1 = pass_manager.run(circuit1)
transpiled2 = pass_manager.run(circuit2)
# Setting shots during primitive initialization
sampler = Sampler(mode=backend, options={"default_shots": 4096})
# Setting options after primitive initialization
# This uses auto-complete.
sampler.options.default_shots = 2000
# This does bulk update. The value for default_shots is overridden
# if you specify shots with run() or in the PUB.
sampler.options.update(
default_shots=1024, dynamical_decoupling={"sequence_type": "XpXm"}
)
# Sample two circuits at 128 shots each.
sampler.run([transpiled1, transpiled2], shots=128)
<RuntimeJobV2('d82868ugbeec73alfa80', 'sampler')>
Options disponibles
Le tableau suivant documente les options de la dernière version de qiskit-ibm-runtime. Pour voir les versions d'options antérieures, consulte la référence API qiskit-ibm-runtime et sélectionne une version précédente.
default_shots
Le nombre total de shots à utiliser par circuit et par configuration.
Choix : Entier >= 0
Par défaut : None
dynamical_decoupling
Contrôler les paramètres de la mitigation d'erreur par découplage dynamique.
Documentation API dynamical_decoupling
dynamical_decoupling.enable
Choix : True, False
Par défaut : False
dynamical_decoupling.extra_slack_distribution
Choix : middle, edges
Par défaut : middle
dynamical_decoupling.scheduling_method
Choix : asap, alap
Par défaut : alap
dynamical_decoupling.sequence_type
Choix : XX, XpXm, XY4
Par défaut : XX
dynamical_decoupling.skip_reset_qubits
Choix : True, False
Par défaut : False
environment
environment.job_tags
Liste de balises.
Choix : None
Par défaut : None
environment.log_level
Choix : DEBUG, INFO, WARNING, ERROR, CRITICAL
Par défaut : WARNING
environment.private
Choix : True, False
Par défaut : False
execution
execution.init_qubits
Indique s'il faut réinitialiser les qubits à l'état fondamental pour chaque shot.
Choix : True, False
Par défaut : True
execution.rep_delay
Le délai entre une mesure et le circuit quantique suivant.
Choix : Valeur dans la plage fournie par backend.rep_delay_range
Par défaut : Donné par backend.default_rep_delay
execution.meas_type
Choix : classified, kerneled, avg_kerneled
Par défaut : classified
max_execution_time
Limite la durée d'exécution d'un job, en secondes. Consulte le guide sur le temps d'exécution maximum pour plus de détails.
Choix : Nombre entier de secondes dans la plage [1, 10800]
Par défaut : 10800 (3 heures)
simulator
Options à passer lors de la simulation d'un Backend
simulator.basis_gates
Choix : Liste des noms de portes de base à déplier
Par défaut : L'ensemble de toutes les portes de base supportées par le simulateur Qiskit Aer
simulator.coupling_map
Choix : Liste d'interactions à deux qubits dirigées
Par défaut : None, ce qui implique l'absence de contraintes de connectivité (connectivité complète).
simulator.noise_model
Choix : Qiskit Aer NoiseModel, ou sa représentation
Par défaut : None
simulator.seed_simulator
Choix : Entier
Par défaut : None
twirling
Options de twirling
twirling.enable_gates
Choix : True, False
Par défaut : False
twirling.enable_measure
Choix : True, False
Par défaut : False
twirling.num_randomizations
Choix : auto, Entier >= 1
Par défaut : auto
twirling.shots_per_randomization
Choix : auto, Entier >= 1
Par défaut : auto
twirling.strategy
Choix : active, active-circuit, active-accum, all
Par défaut : active-accum
experimental
Options expérimentales, le cas échéant.
Compatibilité des fonctionnalités
Certaines fonctionnalités Runtime ne peuvent pas être utilisées ensemble dans un même job. Clique sur l'onglet approprié pour obtenir la liste des fonctionnalités incompatibles avec la fonctionnalité sélectionnée :
Circuits dynamiques
Incompatible avec :
- Découplage dynamique
Autres remarques :
- Le twirling de portes peut être appliqué aux circuits dynamiques, mais uniquement aux portes qui ne se trouvent pas dans des blocs conditionnels. Le twirling de mesure ne peut être appliqué qu'aux mesures terminales.
- Compatible avec les portes fractionnaires lors de l'utilisation de
qiskit-ibm-runtimev0.42.0 ou ultérieur.
Découplage dynamique
Incompatible avec :
- Circuits dynamiques
Portes fractionnaires
Incompatible avec :
- Twirling de portes
Compatible avec les circuits dynamiques lors de l'utilisation de qiskit-ibm-runtime v0.42.0 ou ultérieur.
Twirling de portes
Incompatible avec :
- Portes fractionnaires
- Étirements
Autres remarques :
- Le twirling de portes peut être appliqué aux circuits dynamiques, mais uniquement aux portes qui ne se trouvent pas dans des blocs conditionnels.
- Le twirling de mesure ne peut être appliqué qu'aux mesures terminales.
- Le twirling de mesure est incompatible avec l'instruction
store. - Ne fonctionne pas avec les enchevêtreurs non-Clifford.
Prochaines étapes
- Consulte le guide Introduction aux options.
- Trouve plus de détails sur les méthodes
SamplerV2dans la référence API Sampler. - Décide du mode d'exécution dans lequel exécuter ton job.
- Renseigne-toi sur la gestion du bruit avec Sampler.