Aller au contenu principal

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 :

  1. Si le PUB spécifie des shots, utiliser cette valeur.
  2. Si l'argument mot-clé shots est spécifié dans run, utiliser cette valeur.
  3. Si twirling est activé (True par défaut), alors le produit de num_randomizations et de shots_per_randomization, tel que spécifié dans les options twirling, est utilisé.
  4. Si sampler.options.default_shots est 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é.

remarque

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

Documentation API default_shots

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

Documentation API 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

Documentation API 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)

Documentation API max_execution_time

simulator

Options à passer lors de la simulation d'un Backend

Documentation API simulator

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

Documentation API 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-runtime v0.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

Recommandations