Sari la conținutul principal

Introducere în transpilare

O prezentare generală a transpilării și a instrumentelor relevante de utilizat, fie local, fie în cloud.

Transpilarea este procesul de rescriere a unui circuit de intrare dat pentru a corespunde topologiei unui dispozitiv cuantic specific și de optimizare a instrucțiunilor circuitului în vederea execuției pe calculatoare cuantice cu zgomot. Această documentație acoperă instrumentele și fluxurile de lucru pentru transpilarea locală, disponibile tuturor utilizatorilor Qiskit, precum și pentru Qiskit Transpiler Service bazat pe cloud, disponibil utilizatorilor cu plan Premium, Flex și On-Prem (prin IBM Quantum Platform API). Dacă folosești primitive și ești interesat doar de opțiunile implicite de transpilare oferite de serviciul Qiskit Runtime, citește subiectul Configure runtime compilation for Qiskit Runtime.

Procesul de transpilare ia un circuit care conține instrucțiunile tale:

Un circuit cuantic cu doi Qubiți care conține o poartă Hadamard și două porți CNOT.

Transpilarea îl transformă astfel încât să fie folosite doar instrucțiunile disponibile pe un Backend ales și optimizează acele instrucțiuni pentru a minimiza efectele zgomotului:

Același circuit cuantic cu doi Qubiți după transpilare. Conține porți RZ, X, SX și ECR.


O componentă centrală a Qiskit SDK, Transpiler-ul este proiectat pentru modularitate și extensibilitate. Principala sa utilizare este de a scrie noi transformări ale circuitelor (cunoscute drept pași ai Transpiler-ului) și de a le combina cu alți pași existenți, reducând semnificativ adâncimea și complexitatea circuitelor cuantice. Pașii care sunt înlănțuiți și ordinea în care sunt executați au un efect major asupra rezultatului final. Această conductă este determinată de obiectele PassManager și StagedPassManager. StagedPassManager orchestrează execuția unuia sau mai multor PassManager-e și determină ordinea în care sunt executate, în timp ce obiectul PassManager este doar o colecție de unul sau mai mulți pași. Gândește-te la StagedPassManager ca la dirijorul unei orchestre, la PassManager-e ca la diferitele secțiuni instrumentale și la obiectele Pass ca la muzicienii individuali. În acest fel, poți compune circuite cuantice eficiente din punct de vedere hardware care îți permit să execuți lucrări la scară utilă, menținând în același timp zgomotul la un nivel gestionabil.

Găsești mai multe informații despre etapele pass manager în subiectul Transpiler stages.

Arhitectura setului de instrucțiuni

Pe lângă reducerea adâncimii și complexității circuitelor cuantice, Transpiler-ul este conceput să transforme instrucțiunile conținute într-un QuantumCircuit dat pentru a respecta Arhitectura Setului de Instrucțiuni (ISA) a unui Backend specific. Circuitele care respectă ISA conțin doar instrucțiuni suportate de Target al Backend-ului, cum ar fi porțile de bază disponibile ale hardware-ului, măsurătorile, resetările și operațiunile de control al fluxului, și respectă constrângerile specificate de conectivitatea hardware-ului, adică CouplingMap al target-ului. Când trimiți un job la un Backend IBM Quantum®, circuitele trebuie să respecte ISA-ul Backend-ului.

Etapele Transpiler-ului

Conducta preconfigurata de transpilare a Qiskit constă din șase etape fundamentale:

  1. init - Acest pas rulează orice pași inițiali necesari înainte ca circuitul să poată fi integrat. De obicei, implică desfășurarea instrucțiunilor personalizate și convertirea circuitului la porți cu unul și doi Qubiți. Implicit, validează instrucțiunile circuitului și traduce porțile cu mai mulți Qubiți în porți cu unul și doi Qubiți.
  2. layout - Acest pas aplică un layout, mapând Qubiții virtuali din circuitul tău pe Qubiții fizici ai QPU-ului.
  3. routing - Acest pas rulează după ce a fost aplicat un layout și va injecta porți (adică SWAP-uri) în circuitul original pentru a-l face compatibil cu conectivitatea QPU-ului (harta de cuplare).
  4. translation - Acest pas traduce porțile din circuit în setul de bază de instrucțiuni al QPU-ului.
  5. optimization - Acest pas rulează o buclă de optimizare pentru a găsi descompuneri mai eficiente ale circuitului cuantic până când o condiție este îndeplinită (cum ar fi o adâncime fixă).
  6. scheduling - Această etapă este destinată oricăror pași de planificare conștienți de hardware. Dacă utilizatorul specifică o metodă de planificare, această etapă ține cont de tot timpul inactiv din circuit.

Dacă personalizezi un flux de lucru de transpilare, folosește aceste etape ca ghid în timpul dezvoltării.

Transpilarea cu pass manager-e

Modalitatea recomandată de a transpila un circuit este să creezi un staged pass manager și apoi să execuți metoda sa run cu circuitul tău ca intrare. Poți folosi funcția generate_preset_pass_manager pentru a genera un staged pass manager cu valori implicite rezonabile.

Utilizatorii mai avansați pot personaliza un set de obiecte PassManager și StagedPassManager și pot determina ordinea în care este rulată fiecare etapă. Aceasta poate schimba dramatic circuitul de ieșire final. De fapt, o abordare personalizată a transpilării unui algoritm cuantic produce adesea o suprimare a erorilor mai eficientă decât abordarea implicită. O abordare personalizată implică rescrierea circuitelor cuantice pentru a corespunde constrângerilor hardware și a suprima efectele zgomotului. Fluxul logic al acestui lanț de instrumente este personalizabil și nu trebuie să fie liniar. Procesul de transpilare poate pregăti bucle iterative, ramificații condiționale și alte comportamente complexe. Un bun punct de plecare atunci când dezvolți un set de pași personalizați este să examinezi secvența implicită de transformări.

Pentru o prezentare generală a transpilării cu pass manager-e, vezi Transpile with pass managers.

Transpilarea implicită

Pentru o modalitate mai simplă, dar mai puțin personalizabilă, de a folosi Transpiler-ul „din cutie", folosește funcția qiskit.compiler.transpile. Aceasta generează și rulează unul dintre obiectele preset StagedPassManager pe baza, printre alte opțiuni, a unui indicator optimization_level care poate fi setat la 0, 1, 2 sau 3. Nivelurile mai ridicate generează circuite mai optimizate, cu prețul unor timpi de transpilare mai lungi.

Pașii următori

Recomandări