Přeskočit na hlavní obsah

Běžně používané parametry pro transpilaci

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 verze nebo novější.

qiskit[all]~=2.3.0
qiskit-ibm-runtime~=0.43.1

Tato stránka popisuje některé z běžněji používaných parametrů pro lokální transpilaci. Tyto parametry se konfigurují pomocí argumentů funkce generate_preset_pass_manager nebo transpile.

Stupeň aproximace

Pomocí stupně aproximace můžeš určit, jak přesně má výsledný Circuit odpovídat požadovanému (vstupnímu) Circuit. Jedná se o desetinné číslo v rozsahu (0,0–1,0), kde 0,0 znamená maximální aproximaci a 1,0 (výchozí hodnota) znamená žádnou aproximaci. Nižší hodnoty vyměňují přesnost výstupu za snazší provedení (tedy méně Gate). Výchozí hodnota je 1,0.

Při syntéze dvoukubitových unitárních operací (používané v počátečních fázích všech úrovní a ve fázi optimalizace s optimalizační úrovní 3) tato hodnota určuje cílovou věrnost výstupní dekompozice. Tedy jak velká chyba je zavedena při převodu maticové reprezentace Circuit na diskrétní Gate. Pokud je stupeň aproximace nižší (více aproximace), výstupní Circuit ze syntézy se bude více lišit od vstupní matice, ale pravděpodobně bude mít méně Gate (protože libovolnou dvoukubitovou operaci lze dokonale rozložit pomocí nejvýše tří CX Gate) a bude snazší ho spustit.

Když je stupeň aproximace menší než 1,0, mohou být syntetizovány Circuit s jedním nebo dvěma CX Gate, což vede k menší chybě z hardwaru, ale větší z aproximace. Protože CX je nejnákladnější Gate z hlediska chyb, může být výhodné snížit jejich počet za cenu věrnosti při syntéze (tato technika byla použita ke zvýšení kvantového objemu na zařízeních IBM®: Validating quantum computers using randomized model circuits).

Jako příklad vygenerujeme náhodnou dvoukubitovou UnitaryGate, která bude syntetizována v počáteční fázi. Nastavením approximation_degree na hodnotu nižší než 1,0 může být vygenerován přibližný Circuit. Musíme také zadat basis_gates, aby metoda syntézy věděla, které Gate může pro přibližnou syntézu použít.

# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-runtime
from qiskit import QuantumCircuit, QuantumRegister
from qiskit.circuit.library import UnitaryGate
from qiskit.quantum_info import random_unitary
from qiskit.transpiler import generate_preset_pass_manager

UU = random_unitary(4, seed=12345)
rand_U = UnitaryGate(UU)

qubits = QuantumRegister(2, name="q")
qc = QuantumCircuit(qubits)
qc.append(rand_U, qubits)
pass_manager = generate_preset_pass_manager(
optimization_level=1,
approximation_degree=0.85,
basis_gates=["sx", "rz", "cx"],
)
approx_qc = pass_manager.run(qc)
print(approx_qc.count_ops()["cx"])
2

Výsledkem je 2, protože aproximace vyžaduje méně CX Gate.

Seed generátoru náhodných čísel

Některé části Transpileru jsou stochastické, takže opakované transpilace mohou vracet různé výsledky. Chceš-li získat reprodukovatelný výsledek, můžeš nastavit seed pro pseudonáhodný generátor čísel pomocí argumentu seed_transpiler. Opakované spuštění se stejným seedem vrátí stejné výsledky.

Příklad:

pass_manager = generate_preset_pass_manager(
optimization_level=1, seed_transpiler=11, basis_gates=["sx", "rz", "cx"]
)
optimized_1 = pass_manager.run(qc)
optimized_1.draw("mpl")

Output of the previous code cell

Počáteční rozvržení

Před transpilací jsou Qubit obsažené v tvém Circuit virtuální Qubit, které nemusí nutně odpovídat fyzickým Qubit na cílovém Backend. Počáteční mapování virtuálních Qubit na fyzické Qubit můžeš zadat pomocí argumentu initial_layout. Vezmi na vědomí, že konečné rozvržení Qubit se může lišit od počátečního rozvržení, protože Transpiler může Qubit permutovat pomocí swap Gate nebo jiných prostředků.

V níže uvedeném příkladu sestavíme počáteční rozvržení pro mock Backend FakeSherbrooke vytvořením objektu Layout. Naše rozvržení mapuje první Qubit našeho Circuit na Qubit 5 Sherbrooke a druhý Qubit našeho Circuit na Qubit 6 Sherbrooke. Fyzické Qubit jsou vždy reprezentovány celými čísly.

from qiskit_ibm_runtime.fake_provider import FakeSherbrooke
from qiskit.transpiler import Layout

backend = FakeSherbrooke()

a, b = qubits
initial_layout = Layout({a: 5, b: 6})

pass_manager = generate_preset_pass_manager(
optimization_level=1, backend=backend, initial_layout=initial_layout
)
transpiled_circ = pass_manager.run(qc)

transpiled_circ.draw("mpl", idle_wires=False)

Output of the previous code cell

Kromě zadání objektu Layout můžeš také předat seznam celých čísel, kde ii-tý prvek seznamu obsahuje fyzický Qubit, na který má být mapován ii-tý Qubit. Například:

initial_layout = [5, 6]

pass_manager = generate_preset_pass_manager(
optimization_level=1, backend=backend, initial_layout=initial_layout
)
transpiled_circ = pass_manager.run(qc)

transpiled_circ.draw("mpl", idle_wires=False)

Output of the previous code cell

Pomocí funkce plot_error_map můžeš vygenerovat diagram grafu zařízení s informacemi o chybách a s označenými fyzickými Qubit. Podobné diagramy si také můžeš prohlédnout na stránce Compute resources.

from qiskit.visualization import plot_error_map

plot_error_map(backend, figsize=(30, 24))

Output of the previous code cell

Možnosti fází Transpileru a pluginů

Tyto možnosti mají příponu _method. Ovlivňují fungování Transpileru a používají se k získání lepšího, odlišného nebo specifického výstupu z Transpileru.

  • init_method (str) - Plugin, který se použije pro inicializační fázi.

  • layout_method (str) - Průchod výběru rozvržení (trivial, dense, sabre). Může to být také název externího pluginu, který se použije pro fázi rozvržení.

  • optimization_method (str) - Plugin, který se použije pro optimalizační fázi.

  • routing_method (str) - Název průchodu směrování (basic, lookahead, default, sabre, none). Může to být také název externího pluginu, který se použije pro fázi směrování.

  • scheduling_method (str) - Název průchodu plánování. Může to být také název externího pluginu, který se použije pro fázi plánování.

    • as_soon_as_possible: Naplánuje instrukce hladově: co nejdříve na dostupném Qubit zdroji (alias: asap).
    • as_late_as_possible: Naplánuje instrukce co nejpozději. To znamená, že Qubit jsou v základním stavu, kdykoli je to možné (alias: alap).
  • translation_method (str) - Název průchodu překladu (unroller, translator, synthesis). Může to být také název externího pluginu, který se použije pro fázi překladu.

  • unitary_synthesis_method (str) - Název metody unitární syntézy, která se má použít. Ve výchozím nastavení se používá default.

poznámka

Chceš-li zobrazit seznam všech nainstalovaných pluginů pro danou fázi, spusť list_stage_plugins("stage_name"). Například pokud chceš zobrazit seznam všech nainstalovaných pluginů pro fázi směrování, spusť list_stage_plugins(routing).

Další kroky