Přeskočit na hlavní obsah

Rychlý start s Executor

Verze balíčků

Kód na této stránce byl vyvinut s použitím následujících požadavků. Doporučujeme používat tyto nebo novější verze.

qiskit[all]~=2.4.0
qiskit-ibm-runtime~=0.46.1
samplomatic~=0.18.0
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-runtime samplomatic

Podobně jako Sampler primitiv, Executor vzorkuje výstupní registry ze spuštění kvantových obvodů, ale nemá žádné vestavěné potlačování ani zmírňování chyb. Místo toho je součástí modelu řízeného spouštění, který poskytuje ingredience pro zachycení záměrů návrhu na straně klienta a přesouvá nákladné generování variant obvodů na stranu serveru. Executor sleduje direktivy uvedené v anotacích obvodů a možnostech, generuje a váže hodnoty parametrů, spouští vázané obvody na hardwaru a vrací výsledky spuštění a metadata. Neprovádí žádná implicitní rozhodnutí za tebe a dává ti plnou kontrolu a transparentnost.

poznámka

Balíček Qiskit zatím nemá základní třídu pro primitiv Executor.

Než začneš

Některé příklady kódu na této stránce používají samplex, který je součástí balíčku Samplomatic. Proto před spuštěním těchto bloků kódu musíš nainstalovat Samplomatic, jak je uvedeno v následujícím bloku kódu. Více informací najdeš v dokumentaci Samplomatic.

pip install samplomatic

# For visualization support, include the visualization dependencies.
# pip install samplomatic[vis]

Kroky k použití primitivu Executor

1. Inicializace účtu

Protože Qiskit Runtime je spravovaná služba, musíš nejprve inicializovat svůj účet. Poté můžeš vybrat QPU, které chceš použít k výpočtu očekávané hodnoty.

Pokud ještě nemáš účet, postupuj podle kroků v Nastavení účtu IBM Cloud®.

from qiskit_ibm_runtime import QiskitRuntimeService, Executor
from qiskit_ibm_runtime.quantum_program import QuantumProgram
from qiskit.circuit import QuantumCircuit
from qiskit.transpiler import generate_preset_pass_manager
from samplomatic.transpiler import generate_boxing_pass_manager
from samplomatic import build

# Initialize the service and choose a backend
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
print(backend)
<IBMBackend('ibm_fez')>

2. Vytvoření a transpilace obvodu

K použití primitivu Executor potřebuješ alespoň jeden obvod. Volitelně může mít parametry.

# Generate the circuit
circuit = QuantumCircuit(2)
circuit.h(0)
circuit.h(1)
circuit.cz(0, 1)
circuit.h(1)

# Using `measure_all` automatically creates the necessary
# classical registers.
circuit.measure_all()

Circuit musí být transformován tak, aby používal pouze instrukce podporované QPU (označované jako obvody instrukční sady architektury (ISA)). K tomu použij Transpiler.

# Transpile the circuit
preset_pass_manager = generate_preset_pass_manager(
backend=backend, optimization_level=0
)
isa_circuit = preset_pass_manager.run(circuit)

3. Inicializace QuantumProgram

Inicializuj QuantumProgram se svou pracovní zátěží. QuantumProgram se skládá z QuantumProgramItems. Každá položka se obvykle skládá z obvodu, sady hodnot parametrů a případně samplex pro randomizaci obsahu obvodu. Podrobnosti najdeš v části Vstupy a výstupy Executor.

Následující buňka inicializuje QuantumProgram a specifikuje provedení 25 snímků. Dále přidá transpilovaný cílový Circuit.

# Initialize an empty program
program = QuantumProgram(shots=25)

# Append the circuit to the program
program.append_circuit_item(isa_circuit)

4. Volitelně: Seskupení Gate a měření do anotovaných boxů

Seskupení instrukcí do boxů a jejich anotování je primárním způsobem, jak specifikovat svůj záměr. V následujícím příkladu používáme generate_boxing_pass_manager a jeho parametry twirling pro seskupení dvouQubitových Gate a měření do boxů a aplikaci anotace twirling.

# Generate a boxing pass manager to group gates
# and measurements into boxes and add
# a`Twirl` annotation.
boxes_pm = generate_boxing_pass_manager(
# Add gate twirling
enable_gates=True,
# Add measurement twirling
enable_measures=True,
)

boxed_circuit = boxes_pm.run(isa_circuit)
boxed_circuit.draw("mpl", idle_wires=False)

Output of the previous code cell

5. Volitelně: Vytvoření šablony obvodu a samplex a jejich přidání do programu

Dále použij metodu Samplomatic build k vygenerování páru šablonového obvodu a samplex. Šablonový obvod je strukturálně ekvivalentní původnímu obvodu. Jednoqubitové Gate jsou však nahrazeny parametrizovanými Gate za účelem implementace předepsaných anotací (twirling Gate a měření v tomto příkladu). Samplex kóduje veškeré informace potřebné ke generování randomizovaných parametrů pro šablonový obvod.

Po vygenerování páru šablonového obvodu a samplex použij metodu append_samplex_item k přidání páru do programu.

Podrobnosti o samplomatic.samplex.Samplex a jeho argumentech najdeš v dokumentaci API Samplomatic.

# Build the template circuit and the samplex
template_circuit, samplex = build(boxed_circuit)

# Append the template circuit and samplex as a `samplex_item`
program.append_samplex_item(
template_circuit,
samplex=samplex,
shape=(num_randomizations := 20,),
)

6. Spuštění Executor a získání výsledků

Spusť QuantumProgram na backendu IBM® pomocí primitivu Executor s výchozími možnostmi. Informace o dostupných možnostech najdeš v části Možnosti Executor.

# Initialize an Executor with the default options
executor = Executor(mode=backend)

# Submit the job
job = executor.run(program)
job
<RuntimeJobV2('d8286580bvlc73d1vmsg', 'executor')>
# Retrieve the result
result = job.result()

Výsledek je typu QuantumProgramResult. Informace o objektu výsledku najdeš v části Vstup a výstup Executor.

Další kroky

Doporučení