Skip to main content
IBM Quantum Platform

Guide de démarrage rapide de Sampler

La tâche principale de l'échantillonneur consiste à échantillonner le registre de sortie issu de l'exécution d'un ou plusieurs circuits quantiques. Les circuits dynamiques et les circuits paramétrés sont acceptés en entrée (si des circuits paramétrés sont soumis, les valeurs des paramètres doivent également être fournies). Sampler prend également en charge le découplage dynamique et le twirling intégrés pour la suppression des erreurs.

Les étapes décrites dans cette rubrique expliquent comment installer Sampler, découvrir les options disponibles pour le configurer et l'appeler dans un programme.

  • 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
    

Étapes pour utiliser la primitive Sampler

1. Créer le compte

Vous devez d'abord configurer votre compte. Vous pouvez ensuite sélectionner le QPU que vous souhaitez utiliser pour calculer la valeur attendue.

Si vous n'avez pas encore de compte, suivez les étapes décrites dans la rubrique « Configurer votre compte IBM Cloud ».

Portes fractionnaires

Pour utiliser les portes fractionnaires désormais prises en charge, définissez use_fractional_gates=True lorsque vous demandez un backend à une QiskitRuntimeService instance. Par exemple :

service = QiskitRuntimeService()
fractional_gate_backend = service.least_busy(use_fractional_gates=True)

Il s'agit d'une fonctionnalité expérimentale qui est susceptible d'évoluer à l'avenir.

from qiskit_ibm_runtime import QiskitRuntimeService

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

2. Créer un circuit

Il faut au moins un circuit comme entrée pour la primitive Sampler.

import numpy as np
from qiskit.circuit.library import efficient_su2

circuit = efficient_su2(127, entanglement="linear")
circuit.measure_all()
# The circuit is parametrized, so we will define the parameter values for execution
param_values = np.random.rand(circuit.num_parameters)

Le circuit et l'observable doivent être transformés afin de n'utiliser que des instructions prises en charge par le QPU (ce que l'on appelle des circuits d'architecture de jeu d'instructions, ou ISA ). Pour ce faire, utilisez le transcompilateur.

from qiskit.transpiler import generate_preset_pass_manager

pm = generate_preset_pass_manager(optimization_level=1, backend=backend)
isa_circuit = pm.run(circuit)
print(f">>> Circuit ops (ISA): {isa_circuit.count_ops()}")

Output:

>>> Circuit ops (ISA): OrderedDict([('rz', 3036), ('sx', 1769), ('cz', 378), ('measure', 127), ('barrier', 1)])

3. Initialiser l'échantillonneur « IBM Quantum »

Lorsque vous initialisez Sampler, utilisez le paramètre mode pour spécifier le mode dans lequel vous souhaitez qu'il s'exécute. Les valeurs possibles sont batch, session, ou pour backend les modes d'exécution par lots, par session et par tâche, respectivement. Pour plus d'informations, consultez la section « Introduction aux modes d'exécution du service de calcul d' IBM Quantum ». Veuillez noter que les utilisateurs d'Open Plan ne peuvent pas soumettre de tâches de session.

from qiskit_ibm_runtime import SamplerV2 as Sampler

sampler = Sampler(mode=backend)

4. Lancer Sampler et obtenir les résultats

Ensuite, appelez la run() méthode pour générer la sortie. Le circuit et les ensembles de valeurs de paramètres facultatifs sont fournis sous forme de tuples de blocs unifiés primitifs ( PUB ).

job = sampler.run([(isa_circuit, param_values)])
print(f">>> Job ID: {job.job_id()}")
print(f">>> Job Status: {job.status()}")

Output:

>>> Job ID: d9mq9og8csec73fagt7g
>>> Job Status: QUEUED
result = job.result()

# Get results for the first (and only) PUB
pub_result = result[0]
print(
    f"First ten results for the 'meas' output register: "
    f"{pub_result.data.meas.get_bitstrings()[:10]}"
)

Output:

First ten results for the 'meas' output register: ['1010011011000000000000000000000000001111111111001010101010001110011000011101100100011100111111111010010110000011010100110111100', '0111100001100000011011101000000111111001011010110000101100011000000011010001000100000111001110011001111010100001100010100000000', '0111010101001110000110100000000110011000011011001111000110101101010100010010111111101011000000010000101111000001010110001000000', '1100111011000010011001100100001101111000101111110110011001011001100110000000000110111100110011000001100000100100001000000000000', '0011111010101101001111111110011000111000000010100011011111111011100110101010111111111101111110100011101101011100110010011010100', '1011111111011010000000000111000000010101001001000110011101100010010001100110100101111111110010001000001000101111100100011000000', '1110101101101011111111000010101010111100110011001010101111110110101010101111110000001110001111101101010100111011110001000000000', '1001010011111010000001010100011000101110111110111101100001010100011110000001000001000110000000000001101010110010110000011001000', '0000101010100000111000100001010101100101011101010110000001100110011001111011111110111010101000011001000011001001101101001010110', '1001001011000000010011101100010011101100010001001100100110011101100100000000111101010010000101011011011110110110001000111101100']

Etapes suivantes

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