Introducere în serviciul de transpilare AI Qiskit
Utilizare estimată QPU: Nicio (NOTĂ: Acest tutorial nu execută joburi deoarece se concentrează pe transpilare)
Fundal
Serviciul de transpilare AI Qiskit (QTS) introduce optimizări bazate pe învățare automată atât în pasele de rutare, cât și în cele de sinteză. Aceste moduri AI au fost concepute pentru a aborda limitările transpilării tradiționale, în special pentru circuite la scară largă și topologii de hardware complexe.
Începând cu iulie 2025, Serviciul de Transpilare a fost migrat pe noua platformă IBM Quantum® și nu mai este disponibil. Pentru cele mai recente actualizări despre starea Serviciului de Transpilare, consultați documentația serviciului de transpilare. Poți utiliza în continuare transpilarea AI local, similar cu transpilarea standard Qiskit. Înlocuiește pur și simplu generate_preset_pass_manager() cu generate_ai_pass_manager(). Această funcție construiește un manager de pase care integrează pasele de rutare și sinteză AI direct în fluxul tău local de transpilare.
Caracteristici cheie ale paselor AI
-
Pase de rutare: rutarea bazată pe AI poate ajusta dinamic căile qubiților în funcție de circuitul și backend-ul specific, reducând nevoia de porți SWAP excesive.
AIRouting: Selectarea layout-ului și rutarea circuitului
-
Pase de sinteză: tehnicile AI optimizează descompunerea porților multi-qubit, minimizând numărul de porți cu doi qubiți, care sunt în general mai predispuse la erori.
AICliffordSynthesis: Sinteza porților CliffordAILinearFunctionSynthesis: Sinteza circuitelor cu funcții liniareAIPermutationSynthesis: Sinteza circuitelor de permutareAIPauliNetworkSynthesis: Sinteza rețelelor Pauli (disponibilă doar în Serviciul de Transpilare Qiskit, nu în mediul local)
-
Comparație cu transpilarea tradițională: transpilarea standard Qiskit este un instrument robust care poate gestiona eficient un spectru larg de circuite cuantice. Totuși, când circuitele cresc în dimensiune sau configurațiile hardware devin mai complexe, pasele AI pot oferi câștiguri suplimentare de optimizare. Prin utilizarea modelelor învățate pentru rutare și sinteză, QTS rafinează în continuare layout-urile circuitelor și reduce overhead-ul pentru sarcini cuantice dificile sau la scară largă.
Acest tutorial evaluează modurile AI folosind atât pase de rutare, cât și de sinteză, comparând rezultatele cu transpilarea tradițională pentru a evidenția unde AI oferă câștiguri de performanță.
Pentru mai multe detalii despre pasele AI disponibile, consultați documentația paselor AI.
De ce să folosești AI pentru transpilarea circuitelor cuantice?
Pe măsură ce circuitele cuantice cresc în dimensiune și complexitate, metodele tradiționale de transpilare se confruntă cu dificultăți în optimizarea layout-urilor și reducerea eficientă a numărului de porți. Circuitele mai mari, în special cele care implică sute de qubiți, impun provocări semnificative pentru rutare și sinteză din cauza constrângerilor dispozitivelor, conectivității limitate și ratelor de eroare ale qubiților.
Tocmai aici transpilarea bazată pe AI oferă o soluție potențială. Prin valorificarea tehnicilor de învățare automată, transpilarea AI din Qiskit poate lua decizii mai inteligente privind rutarea qubiților și sinteza porților, ducând la o optimizare mai bună a circuitelor cuantice la scară largă.
Rezultate sumare ale benchmarkingului

În testele de benchmarking, transpilarea AI a produs în mod constant circuite mai puțin adânci și de calitate mai înaltă față de transpilarea standard Qiskit. Pentru aceste teste, am utilizat strategia implicită a managerului de pase din Qiskit, configurată cu [generate_preset_passmanager]. Deși această strategie implicită este adesea eficientă, poate să întâmpine dificultăți cu circuitele mai mari sau mai complexe. Prin contrast, pasele bazate pe AI au obținut o reducere medie de 24% a numărului de porți cu doi qubiți și o reducere de 36% a adâncimii circuitelor pentru circuitele mari (100+ qubiți) la transpilarea către topologia heavy-hex a hardware-ului IBM Quantum. Pentru mai multe informații despre aceste benchmarkuri, consultați acest blog.
Acest tutorial explorează beneficiile cheie ale paselor AI și modul în care acestea se compară cu metodele tradiționale.
# Added by doQumentation — required packages for this notebook
!pip install -q matplotlib numpy pandas qiskit qiskit-ibm-runtime qiskit-ibm-transpiler
# This cell is hidden from users;
# it just disables a linting rule.
# ruff: noqa: F811
Cerințe
Înainte de a începe acest tutorial, asigură-te că ai instalate următoarele:
- Qiskit SDK v1.0 sau o versiune mai recentă, cu suport pentru vizualizare
- Qiskit Runtime (
pip install qiskit-ibm-runtime) v0.22 sau o versiune mai recentă - Qiskit IBM® Transpiler cu modul AI local (
pip install 'qiskit-ibm-transpiler[ai-local-mode]')
Configurare
from qiskit import QuantumCircuit
from qiskit.circuit.library import efficient_su2, PermutationGate
from qiskit.synthesis.qft import synth_qft_full
from qiskit.circuit.random import random_circuit, random_clifford_circuit
from qiskit.transpiler import generate_preset_pass_manager, CouplingMap
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_transpiler import generate_ai_pass_manager
from qiskit.synthesis.permutation import (
synth_permutation_depth_lnn_kms,
synth_permutation_basic,
)
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import time
import logging
seed = 42
# Used for generating permutation circuits in part two for comparison
def generate_permutation_circuit(width, pattern):
circuit = QuantumCircuit(width)
circuit.append(
PermutationGate(pattern=pattern),
qargs=range(width),
)
return circuit
# Creates a Bernstein-Vazirani circuit given the number of qubits
def create_bv_circuit(num_qubits):
qc = QuantumCircuit(num_qubits, num_qubits - 1)
qc.x(num_qubits - 1)
qc.h(qc.qubits)
for i in range(num_qubits - 1):
qc.cx(i, num_qubits - 1)
qc.h(qc.qubits[:-1])
return qc
# Transpile a circuit with a given pass manager and return metrics
def transpile_with_metrics(pass_manager, circuit):
start = time.time()
qc_out = pass_manager.run(circuit)
elapsed = time.time() - start
depth_2q = qc_out.depth(lambda x: x.operation.num_qubits == 2)
gate_count = qc_out.size()
return qc_out, {
"depth_2q": depth_2q,
"gate_count": gate_count,
"time_s": elapsed,
}
# Used for collecting metrics for part 3 of synthesis methods
def synth_transpile_with_metrics(qc, pm, pattern_id, method):
start = time.time()
qc = pm.run(qc)
elapsed = time.time() - start
return {
"Pattern": pattern_id,
"Method": method,
"Depth (2Q)": qc.depth(lambda x: x.operation.num_qubits == 2),
"Gates": qc.size(),
"Time (s)": elapsed,
}
# Ignore logs like "INFO:qiskit_ibm_transpiler.wrappers.ai_local_synthesis:Running Linear Functions AI synthesis on local mode"
logging.getLogger(
"qiskit_ibm_transpiler.wrappers.ai_local_synthesis"
).setLevel(logging.WARNING)
Partea I. Tipare Qiskit
Să vedem acum cum se utilizează serviciul de transpilare AI cu un circuit cuantic simplu, folosind tipare Qiskit. Cheia constă în crearea unui PassManager cu generate_ai_pass_manager() în loc de standardul generate_preset_pass_manager().
Pasul 1: Mapează intrările clasice la o problemă cuantică
În această secțiune, vom testa transpilarea AI pe circuitul efficient_su2, un ansatz eficient hardware utilizat pe scară largă. Acest circuit este deosebit de relevant pentru algoritmii cuantici variaționali (de exemplu, VQE) și sarcinile de învățare automată cuantică, făcându-l un caz de test ideal pentru evaluarea performanței transpilării.
Circuitul efficient_su2 constă din straturi alternante de rotații pe un singur qubit și porți de entanglement de tipul CNOT. Aceste straturi permit explorarea flexibilă a spațiului de stări cuantice, menținând în același timp adâncimea porților la un nivel gestionabil. Prin optimizarea acestui circuit, urmărim să reducem numărul de porți, să îmbunătățim fidelitatea și să minimizăm zgomotul. Acesta este un candidat puternic pentru testarea eficienței transpilatorului AI.
# For our transpilation, we will use a large circuit of 101 qubits
qc = efficient_su2(90, entanglement="circular", reps=1).decompose()
# Draw a smaller version of the circuit to get a visual representation
qc_small = efficient_su2(5, entanglement="circular", reps=1).decompose()
qc_small.draw(output="mpl")
Pasul 2: Optimizează problema pentru execuția pe hardware cuantic
Alege un backend
Pentru acest exemplu, selectăm cel mai puțin ocupat backend IBM Quantum operațional care nu este un simulator și are cel puțin 100 de qubiți:
Notă: Deoarece backend-ul cel mai puțin ocupat se poate schimba în timp, pot fi selectate dispozitive diferite pentru rulări diferite. Proprietățile specifice dispozitivului, cum ar fi hărțile de cuplare, pot duce la diferențe în circuitele transpilate.
service = QiskitRuntimeService()
backend = service.least_busy(
operational=True, simulator=False, min_num_qubits=100
)
cm = backend.coupling_map
print(f"Using backend: {backend.name}")
Using backend: ibm_torino
Creează manageri de pase AI și tradiționali
Pentru a evalua eficacitatea transpilatorului AI, vom efectua două rulări de transpilare. Mai întâi, vom transpila circuitul folosind transpilarea AI. Apoi, vom rula o comparație prin transpilarea aceluiași circuit fără transpilarea AI, folosind metode tradiționale. Ambele procese de transpilare vor utiliza aceeași hartă de cuplare de la backend-ul ales și nivelul de optimizare setat la 3 pentru o comparație echitabilă.
Ambele metode reflectă abordarea standard pentru crearea instanțelor PassManager în vederea transpilării circuitelor în Qiskit.
pm_ai = generate_ai_pass_manager(
optimization_level=3,
ai_optimization_level=3,
coupling_map=cm,
include_ai_synthesis=True, # used for part 3 when comparing synthesis methods
)
pm_no_ai = generate_preset_pass_manager(
optimization_level=3,
coupling_map=cm,
seed_transpiler=seed, # note that the AI pass manager does not currently support seeding
)
Transpilează circuitele și înregistrează timpii.
# Transpile using standard (non-AI) pass manager
_, metrics_no_ai = transpile_with_metrics(pm_no_ai, qc)
print(
f"Standard transpilation: Depth (2q) {metrics_no_ai['depth_2q']}, "
f"Gate count {metrics_no_ai['gate_count']}, Time {metrics_no_ai['time_s']}"
)
# Transpile using AI pass manager
_, metrics_ai = transpile_with_metrics(pm_ai, qc)
print(
f"AI transpilation : Depth (2q) {metrics_ai['depth_2q']}, "
f"Gate count {metrics_ai['gate_count']}, Time {metrics_ai['time_s']}"
)
Standard transpilation: Depth (2q) 95, Gate count 458, Time 0.04650712013244629
AI transpilation : Depth (2q) 90, Gate count 456, Time 0.9342479705810547
În acest test, comparăm performanța transpilatorului AI și a metodei de transpilare standard pe circuitul efficient_su2. Transpilarea AI obține o adâncime a circuitului vizibil mai mică, menținând un număr similar de porți.
-
Adâncimea circuitului: Transpilarea AI produce un circuit cu o adâncime mai mică pe doi qubiți. Acest lucru este de așteptat, deoarece pasele AI sunt antrenate să optimizeze adâncimea prin învățarea tiparelor de interacțiune dintre qubiți și exploatarea mai eficientă a conectivității hardware față de euristicile bazate pe reguli.
-
Numărul de porți: Numărul total de porți rămâne similar între cele două metode. Acest lucru este în concordanță cu așteptările, deoarece transpilarea standard bazată pe SABRE minimizează explicit numărul de swap-uri, care domină overhead-ul de porți. Transpilarea AI prioritizează în schimb adâncimea globală și poate ocazional să facă un compromis cu câteva porți suplimentare pentru o cale de execuție mai scurtă.
-
Timpul de transpilare: Transpilarea AI durează mai mult decât metoda standard. Acest lucru se datorează costului computațional suplimentar al invocării modelelor învățate în timpul rutării și sintezei. Prin contrast, transpilarea bazată pe SABRE este acum semnificativ mai rapidă după ce a fost rescrisă și optimizată în Rust, oferind rutare euristică extrem de eficientă la scară.
Este important de menționat că aceste rezultate se bazează pe un singur circuit. Pentru a obține o înțelegere cuprinzătoare a modului în care transpilarea AI se compară cu metodele tradiționale, este necesar să testezi o varietate de circuite. Performanța QTS poate varia semnificativ în funcție de tipul circuitului optimizat. Pentru o comparație mai amplă, consultați benchmarkurile de mai sus sau vizitați blogul.