Optimization seviyeleri — tek tamsayıyla seçilen transpile politika profili
optimization_level, Qiskit preset transpile yolunda hangi pass paketinin, hangi sıklıkta ve ne kadar agresif çalışacağını kabaca kodlayan kullanıcı düğmesidir. Düşük seviye hızlı derleme ve daha ham çıktı; yüksek seviye daha geniş layout ve routing araması ile daha ağır optimizasyon dalgaları anlamına gelir. Bu sayfa; seviyelerin mimari rolünü, tipik davranış farklarını, derleme maliyeti ile devre kalitesi takasını ve raporlama disiplinini işler. Hangi pass'in tam olarak çalıştığı sürüme göre değişir; burada politika ve ölçütler ön plandadır, imza ezberi değildir.
Kavram haritası ve politika düğmesi
optimization_level, tek bir optimizasyon algoritması değil, preset pass yöneticisi için seçilmiş bir politika profilidir. Bu profil; hangi ayrıştırma ve sadeleştirme dalgalarının açılacağını, layout ve routing aramasının ne kadar genişleyeceğini ve bazı şablon eşleştirmelerinin ne kadar agresif uygulanacağını birlikte etkiler. Sürüm yükseltmelerinde aynı sayısal seviye bile iç pass listesinde ince farklar gösterebilir; bu yüzden üretimde yalnızca “3 kullandım” demek yerine kütüphane sürümü ve hedef adı birlikte arşivlenmelidir.
Bu sayfanın sınırı
Belirli bir pass adının hangi sürümde eklendiği veya kaldırıldığı pass manager ve resmi sürüm notları ile takip edilir. Taban kümesinin ne anlama geldiği taban kapıları sayfasında; boru hattı evrelerinin genel sırası transpiler pipeline başlığında çerçevelenir. Burada odak seviye seçiminin maliyet–kalite ve operasyonel sonuçlarıdır.
Algoritma optimizasyonu ile karıştırmayın
Devre yazarken yaptığınız eşdeğerlik sadeleştirmeleri devre optimizasyonu konusuna aittir; optimization_level ise transpiler'ın otomatik derleme politikasını seçer. İkisi birbirini tamamlar; biri diğerinin yerine geçmez.
Seviye 0 ve 1: minimal ve hafif profil
Seviye 0 çoğu zaman “tabanı uygula, topolojik olarak yürütülebilir kıl, fakat ağır arama yapma” yaklaşımına yakındır: derleme hızlıdır, çıktı uzun ve ham kalabilir. Seviye 1 hafif optimizasyon ve daha kontrollü çeviri adımları ekler; üretim yükü olmayan hızlı döngülerde veya teşhis için makul bir başlangıç olabilir. Her iki profil de gerçek donanımda çalışır; fakat hata bütçesi sıkıysa çıktı derinliği gözle izlenmelidir.
Ne zaman tercih edilir?
Seviye 0–1; CI içinde hızlı duman testi, çok büyük devrelerde ön transpile kestirimi veya özel pass zincirinden önce ara durum üretmek için kullanılabilir. Sonuçların bilimsel kıyaslaması için genelde daha yüksek seviye veya özel politika gerekir.
Layout ve routing açısından
Düşük seviyelerde layout ve routing araması sınırlı kalır; uzun menzilli etkileşimlerde SWAP ve iki-qubit sayısı yükselebilir. Bu etkiler layout seçimi ve yönlendirme sayfalarıyla birlikte değerlendirilir.
Seviye 2: üretim için yaygın denge
Birçok ekip için seviye 2 varsayılan üretim profili olarak kabul edilir: derleme süresi ile devre kalitesi arasında makul bir denge kurar, layout ve routing için daha geniş arama bütçesi açar ve bir dizi sadeleştirme dalgasını çalıştırır. Tam olarak hangi pass'lerin devreye girdiği sürüme göre değişse de, zihinsel model şudur: “hemen çalıştır” ile “gece boyu agresif derle” arasında orta yol.
Metrik beklentisi
Aynı devre ve hedefte seviye 1'den 2'ye geçişte derinlik ve iki-qubit sayısında belirgin düşüş görmek yaygındır; kazanç sıfır veya negatif de olabilir çünkü hedefin hata modeli farklı kenarları ödüllendirebilir. Bu yüzden kıyaslama her zaman metrik + hedef + tohum üçlüsüyle yapılmalıdır.
Operasyonel not
Bulutta kısa süreli denemelerde seviye 2, kuyruk öncesi transpile maliyetini makul tutarken yürütülebilir devre üretir. Uzun varyasyonel döngülerde transpile'ı her iterasyonda tekrarlamak pahalıysa, önbellekleme veya sabit pass manager stratejisi düşünülmelidir.
Seviye 3: agresif arama ve sadeleştirme
Seviye 3, preset içinde mümkün olan en agresif genel profillerden birini seçer: daha geniş layout ve routing araması, daha fazla optimizasyon turu ve daha ağır şablon eşleştirmeleri. Bu, bazen derinlikte dramatik iyileşme getirirken transpile süresini ve bellek tüketimini belirgin biçimde artırır. Çok qubitli ve yoğun iki-qubit ağı olan devrelerde seviye 3'ün pratik süresi üstel büyüme gösterebilir.
Ne zaman mantıklıdır?
Yüksek maliyetli bir donanım koşusu öncesi, nihai yayın artefaktı üretirken veya bir kez derlenip çok kez yürütülecek bir devre paketinde seviye 3 araştırılabilir. Aynı betiğin her küçük değişiminde seviye 3 çalıştırmak ise geliştirici verimliliğini düşürür.
SWAP ve taban açısından
Agresif arama bazen açık swap sayısını düşürürken taban ayrıştırması sonrası toplam iki-qubit sayısını farklı şekilde yeniden dağıtır; raporlama önerisi SWAP ekleme sayfasındaki çift metrik disipliniyle uyumludur.
Derleme süresi, bellek ve CI disiplini
Transpile, klasik derleyicide olduğu gibi zaman ve bellek tüketir; seviye arttıkça bu maliyet genelde artar. Sürekli entegrasyon hatlarında “her commit'te seviye 3” politikası, küçük ekiplerde bile pipeline süresini şişirebilir. Pratik çözüm: geliştirme aşamasında düşük seviye veya önbellekli sonuç, yayın ve donanım öncesi doğrulamada yüksek seviye.
Önbellekleme ve artefakt
Aynı kaynak devre ve hedef için transpile çıktısını dosyaya yazmak, tekrarlanan derlemeyi ortadan kaldırır; ancak hedef kalibrasyonu değiştiğinde artefaktın geçerliliği sorgulanmalıdır.
Paralelleştirme sınırı
Python süreç modeli ve GIL nedeniyle tek bir transpile çağrısı çoğu zaman tek çekirdeği yoğun kullanır; yüksek seviye “ücretsiz paralellik” getirmez. Çoklu devre senaryolarında iş yükü dış süreçlere bölünebilir; bu mimari karar burada işlenmez, fakat seviye seçiminin toplam duvar saati süresine etkisini hesaba katın.
Hedef backend ve taban etkileşimi
Aynı optimization_level sayısı, farklı Target sözlüklerinde farklı sonuç üretir: native küme, coupling topolojisi ve kenar başına hata tahminleri arama uzayını şekillendirir. Bu yüzden “seviye 2 her zaman yeterlidir” cümlesi yalnızca belirli bir cihaz ailesi için savunulabilir. Simülatörde kısa görünen devre, gerçek cihaz tabanında uzayabilir.
Fake backend ile ölçüm
FakeBackend, gerçek bir cihazın target taklidini taşıdığı için seviye kıyasını
yerel ve hesapsız yapmayı kolaylaştırır. Ayrıntı
fake backend
kullanımı sayfasındadır.
Taban ve zamanlama köprüsü
Seviye yükseldikçe üretilen kapı sayısı değişebileceği gibi, sonraki zamanlama aşamasının göreceği süre grafiği de değişir. Uçtan uca maliyet, yalnızca transpile seviyesiyle tamamlanmaz.
Tohum, sürüm ve raporlama
Yüksek seviyelerde stokastik arama ve eşdeğer çözüm kırılımları sıklaşır. Aynı devre, hedef ve seviye ile bile farklı seed_transpiler değerleri farklı layout ve routing sonuçları üretebilir. Yayınlanan sonuçlarda seviye yalnız başına yazılmamalı; tohum, kütüphane sürümü, backend adı ve özet metrikler (derinlik, iki-qubit, SWAP) birlikte arşivlenmelidir. Bu disiplin transpiler pipeline · determinizm bölümüyle örtüşür.
Önerilen log şeması
Minimum alanlar: kaynak devre özeti, hedef adı, optimization level, seed, Qiskit sürümü, transpile süresi (duvar saati), çıktı metrikleri, nihai layout kısa özeti.
Özel politika
Preset seviyeleri yeterli değilse, kullanıcı kendi pass manager politikasını kurar; bu, seviye sayısını aşan ince kontrol demektir. Özel pass sayfası bu genişlemeye köprüdür.
Kod laboratuvarı
Örnekler yerel FakeManilaV2 üzerindedir: seviye 0–3 için derinlik ve kapı
sayımları, generate_preset_pass_manager ile aynı politikanın
doğrudan çalıştırılması ve kaba süre ölçümü.
from qiskit import QuantumCircuit, transpile
from qiskit_ibm_runtime.fake_provider import FakeManilaV2
qc = QuantumCircuit(4)
qc.h(range(4))
qc.cx(0, 3)
qc.cx(1, 2)
qc.cx(0, 2)
backend = FakeManilaV2()
seed = 7
for lvl in range(4):
tqc = transpile(qc, backend=backend, optimization_level=lvl, seed_transpiler=seed)
ops = tqc.count_ops()
cx = ops.get("cx", 0)
sw = ops.get("swap", 0)
print(f"level {lvl}: depth={tqc.depth()} cx={cx} swap={sw}")
from qiskit import QuantumCircuit
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
from qiskit_ibm_runtime.fake_provider import FakeManilaV2
qc = QuantumCircuit(3)
qc.cx(0, 2)
qc.cx(0, 1)
backend = FakeManilaV2()
pm = generate_preset_pass_manager(optimization_level=3, backend=backend, seed_transpiler=42)
tqc = pm.run(qc)
print(dict(tqc.count_ops()), "depth", tqc.depth())
import time
from qiskit import QuantumCircuit, transpile
from qiskit_ibm_runtime.fake_provider import FakeManilaV2
qc = QuantumCircuit(5)
qc.h(range(5))
for a in range(4):
qc.cx(a, a + 1)
qc.cx(0, 4)
backend = FakeManilaV2()
for lvl in (1, 3):
t0 = time.perf_counter()
transpile(qc, backend=backend, optimization_level=lvl, seed_transpiler=0)
dt = time.perf_counter() - t0
print(f"level {lvl}: {dt:.4f} s wall time")
İleri okuma ve özet
optimization_level, transpile politikasını tek düğmede toplar; içerik sürüme ve hedefe göre evrilir. Düşük seviye hız ve teşhis, orta seviye üretim dengesi, yüksek seviye ise nihai kalite araması için uygundur. Tüm kıyaslar tohum, sürüm ve metriklerle birlikte arşivlenmelidir.
- Pass manager — preset dışına çıkma ve pass sırası.
- Taban kapıları ve transpiler pipeline — hedef dil ve çerçeve.
- Layout seçimi, yönlendirme, SWAP ekleme — seviyenin etkilediği arama alanları.
- Zamanlama — transpile sonrası süre grafiği.
- Özel pass — seviye yerine özel politika.
- Devre optimizasyonu — kaynak devre tarafı.