1. Ana sayfa
  2. İçerik planı
  3. Devre kaydı · PennyLane
PennyLane · QNode ve kuantum iş akışı

Devre kaydı — kuantum gövdenin yakalanması ve trace

PennyLane’de kuantum “devresi”, çoğu zaman elle çizilmiş bir nesne değil; QNode’a bağlı kuantum fonksiyonunun çalıştırılarak kayda alınması (trace) ile oluşur. Her qml.RY, qml.CNOT ve dönüş satırındaki qml.expval çağrısı, o an tape’e yazılır. Bu sayfa, differentiable quantum programming perspektifinde kullanıcı gözüyle kayıt sürecini anlatır — tape iç yapısı, yürütüm sırası veya Qiskit transpiler burada merkezde değildir.

  • Trace: QNode çağrısı · gövde yürütümü · işlem listesi
  • Şablon: sabit vs dinamik kayıt · epoch ve önbellek
  • Sınır: kayıt ✓ · tape/yürütüm → yan sayfalar

Devre Kaydı: Trace ve Kullanıcı Gövdesi

Devre kaydı, kuantum fonksiyonunuzun Python gövdesinin QNode bağlamında bir kez (veya dinamik senaryoda her çağrıda) yürütülmesi ve her kuantum API çağrısının sıralı bir işlem listesine dönüştürülmesidir. Kullanıcı “devre çiziyorum” sanır; motor “gövdeyi trace ediyorum” der. Bu liste daha sonra tape nesnesine aktarılır — tape’in iç cebiri tape sistemi sayfasındadır.

Qiskit QuantumCircuit’ten fark

Qiskit’te QuantumCircuit nesnesine kapıları siz eklersiniz; devre görselleştirme ve job girdisi aynı nesnedir. PennyLane’de kayıt fonksiyon merkezlidir: dekoratörlü gövde çalışır, kayıt katmanı operatör çağrılarını yakalar. Transpile, routing ve backend kuyruğu bu aşamada yoktur; kısa köprü: QuantumCircuit yapısı.

Ayırt edici nokta Kayıt hatası görüyorsanız önce gövde ve kablolar; yürütüm veya gradyan hatası görüyorsanız tape + cihaz + diff_methodyürütüm akışı §7.

QNode Çağrısı Kaydı Nasıl Tetikler

@qml.qnode(dev) ile sarılmış fonksiyon çağrıldığında PennyLane önce girdileri bağlar ( yürütüm akışı §2), ardından kuantum gövdesini kayıt modunda çalıştırır. Bu sırada gerçek kuantum durumu “eğitim için” tam anlamıyla simüle edilmek zorunda değildir; amaç, hangi operatörlerin hangi sırayla uygulandığını sabitlemektir.

Kayıt anı vs yürütüm anı

Aynı QNode çağrısında kayıt ve yürütüm ardışık aşamalardır: önce trace ile tape şablonu oluşur, sonra cihaz bu tape’i değerlendirir. Kullanıcı tek satır görür; mimari olarak iki adımdır. Zaman sırasının tamamı yürütüm akışı sayfasında; burada yalnızca “gövde ne zaman, nasıl yakalanır?” sorusu vardır.

QNode sınırı, imza ve dekoratör seçenekleri QNode mimarisi sayfasında; kayıt davranışını etkileyen tipik seçenekler cihaz ve arayüzdür, fakat kayıt mantığı gövdeye bağlıdır.

Kayda Giren: Kapılar, Şablonlar, Ölçümler

Kayda giren her şey, trace sırasında tape’e yazılacak bir işlem veya gözlemlenebilir düğümü olarak yakalanır. Kullanıcı Python’da qml.* çağırır; kayıt katmanı bunu sıralı bir programa çevirir — tape’in iç listesi tape sistemi §3 sayfasında; burada hangi çağrıların kayda girdiği vurgulanır.

  • Tekil kapılar · şablonlar · dönüş ölçümleri — aşağıda alt başlıklar.

Tekil kapılar: her çağrı bir kayıt satırı

qml.RX, qml.Hadamard, qml.CNOT gibi tekil operatörler, kayıt anında bir işlem kaydı üretir: operatör kimliği, hedef kablolar (ve varsa kontrol kabloları), parametre bağlantısı. Parametre Python sayısıysa o çağrıda sabit açı yazılabilir; tensörse yuva bırakılır — ayrıntı §6.

Kayıt perspektifinden sıra önemlidir: gövdede hangi sırada çağrıldıysa tape’de o sırada görünür. “Aynı kapı” iki kez çağrılırsa iki ayrı satır vardır; Qiskit’te circuit.ry’yi iki kez eklemekle aynı mantık. Kablo listesi bu adımda doğrulanır — tanımsız kablo kayıtta patlar; kablo yönetimi ile önceden hizalayın.

Şablonlar ve katmanlar: kayıtta açılma (unroll)

qml.StronglyEntanglingLayers, qml.AngleEmbedding veya özel @qml.template blokları, kullanıcıya tek satır görünür; kayıt sırasında içlerindeki tekil kapılara açılır. Trace sonunda tape’de yüksek seviye blok kalmaz — yalnızca temel işlemler listesi vardır.

Bu açılmanın kayıt aşamasında olması önemlidir: şablonun şekil sözleşmesi (kaç katman, kaç kablo, ağırlık tensörü boyutu) kayıt anında kontrol edilir; uyumsuzluk burada görülür. Epoch boyunca aynı şablon çağrılıyorsa kayıt iskeleti sabit kalır; farklı şablon derinliği her çağrıda yeni kayıt demektir ( §5). Şablon içi matematik veya donanım native seti burada değil — yalnızca “blok → kapı listesi” dönüşümü.

Dönüş ölçümleri: kaydın kapanışı

Kuantum fonksiyonunun return satırındaki qml.expval, qml.probs, qml.sample vb. ifadeler kayıt sırasında tape sonuna gözlemlenebilir düğümleri olarak eklenir. Trace, ölçüm yazılmadan “bitmiş” sayılmaz: dönüş, kayıt akışının zorunlu kapanışıdır.

Birden fazla ölçüm demet olarak dönebilir (return qml.expval(A), qml.probs(wires=...)); kayıt her birini ayrı düğüm olarak yazar, sıra demet sırasıyla uyumludur. Hangi ölçümün maliyete girdiği ve gradyan davranışı ölçüm süreci sayfasında; burada yalnızca “return satırı = kayıt olayı” hatırlatılır. Ölçüm yoksa veya gövde erken return ile dallanırsa kayıt yolu değişir — §4’e bakın.

Döngüler ve Python yapısı

Sabit üst sınırlı for döngüleri genelde kayda açılarak girer: her iterasyon ayrı kapı satırı üretir. Bu, Qiskit’te elle tekrarlanan circuit.ry(...) çağrılarının fonksiyonel karşılığıdır. Kablo indeksleri döngü değişkeniyle üretiliyorsa, kayıt öncesi kablo envanterinin tutarlı olması gerekir — kablo yönetimi ile hizalayın.

Klasik–kuantum karışımı gövdede

Gövde içinde klasik hesap (liste, NumPy) yapılabilir; fakat kayda yalnızca qml.* kuantum çağrıları ve dönüş ölçümleri yazılır. Klasik kod, parametre değerini hazırlamak için kullanılır; kuantum işlem listesine doğrudan “print” veya dosya I/O yazılmaz. Hibrit modelde klasik ön katman genelde QNode dışında kalır — kuantum fonksiyonları sayfasındaki eğitim iskeletine bakın.

Kayda Girmeyen ve Sorunlu Desenler

Her Python ifadesi kayda dönüşmez. Kayıt katmanı, kuantum programın statik veya yarı-statik bir iskeletini çıkarmaya çalışır; klasik kontrol akışı bu iskeleti oynatırsa eğitim ve önbellek beklentileri bozulur.

Veri bağımlı dallanma

if x > 0: gibi girdiye bağlı dallar, çağrı başına farklı kayıt yolu üretebilir — tape şablonu sabit kalmaz. Bu desen kuantum betikleri başlığında ayrıntılandırılır; burada yalnızca “kayıt her çağrıda yeniden mi yazılıyor?” sorusunu sorun.

Yan etkiler ve gizli durum

Global değişkenle kablo sayısını değiştirmek, kayıt ile yürütüm arasında sürpriz üretir. QNode gövdesi mümkün olduğunca saf fonksiyon gibi yazılmalı: girdiler → kuantum işlemler → ölçüm dönüşü. Yan etki şüphesi varsa tek çağrıda tape çıktısını (debug API veya düşük seviye kayıt) kontrol edin.

Yanlış kablo veya operatör

Tanımsız kablo, cihazın desteklemediği operatör veya uyumsuz ölçüm çoğu zaman kayıt veya hemen sonrasında exception verir — henüz epoch ortasında “gradyan bozuk” sanmayın. Belirti → katman eşlemesi: yürütüm akışı §7.

Sabit Şablon ve Dinamik Kayıt

Uzun eğitim koşularında ideal senaryo: aynı kayıt şablonu, yalnızca parametre değerleri değişir. Böylece tape yeniden oluşturulmaz; JIT/önbellek ve batch genişletme amorti edilir ( tape §6).

Sabit şablon ne demek?

Kapı türü ve sırası epoch’lar arasında aynı; yalnızca açılar veya bağlı tensör değerleri güncellenir. Kayıt maliyeti ilk çağrıda ödenir, sonrakilerde yürütüm ağırlıklıdır. Benchmark yaparken ilk epoch’u ısınma sayın.

Dinamik kayıt ne zaman olur?

Python if, değişen döngü sınırı veya epoch ortasında değişen gövde, çağrı başına yeni tape üretir. Bu hata değildir; fakat throughput ve önbellek planını değiştirir. Dinamik kontrol için kuantum betikleri sayfasına geçin.

Parametreler Kayıt Anında

Kapıya verilen değer kayıt sırasında nasıl görülürse, tape’de öyle saklanır: Python sayısı çoğu zaman sabit açı; Torch/JAX tensörü parametre yuvası. Bu ayrım eğitilebilirliği ve şablon stabilitesini belirler.

Sabit açı vs eğitilebilir yuva

qml.RY(0.5, wires=0) ile kayıt: açı sabitlenmiş olabilir. qml.RY(weights[0], wires=0) ile kayıt: yapı sabit, değer yürütümde dolar. Yanlışlıkla sabit bırakılan eğitim parametresi “gradyan yok” üretir — önce kayıt çıktısını, sonra bağlamayı kontrol edin ( yürütüm akışı §2).

Veri gömme (x) ve ağırlıklar (weights)

Veri genelde her forward’da değişir; kayıt şablonu sabit kalıyorsa x tensör yuvası olarak yazılır. Ağırlıklar epoch boyunca güncellenir; kayıt bunları parametre düğümü olarak işaretler. Gömme boyutu ve kablo sayısı uyumu kablo yönetimi sayfasında.

Tape ile Ayrım ve Köprü

Devre kaydı = kullanıcı gövdesinin yakalanması (trace). Tape sistemi = yakalanan listenin yürütülebilir ara programı, transform ve gradyan genişletmesi. İkinci aşama olmadan birinci anlamlıdır; birinci olmadan ikinci oluşmaz.

Kayıt tamamlandıktan sonra akış: tape sistemi → cihaz yürütümü (cihaz sistemi) → tensör dönüşü → (eğitimde) türev ( yürütüm akışı). Bu sayfa zincirin yalnızca ilk halkasıdır.

Özet cümle Gövdeyi yazarsınız; PennyLane kaydeder. Tape’i görmezsiniz; ama kayıt kalitesi tape’in ve gradyanın kalitesini belirler.

Kod Örnekleri: Kayıt ve Şablon

Aşağıdaki örnekler kayıt davranışını sezmek içindir; API sürümüne duyarlı olabilir. Güncel kayıt API’si için PennyLane Circuits ve kayıt belgelerine bakın.

recording_static_template.py Python
import pennylane as qml

dev = qml.device("default.qubit", wires=3)

@qml.qnode(dev)
def ansatz(weights):
  # Sabit derinlik: kayıt şablonu epoch'lar arasında aynı kalır
  for w in range(3):
    qml.RY(weights[w], wires=w)
  qml.CNOT(wires=[0, 1])
  qml.CNOT(wires=[1, 2])
  return qml.expval(qml.PauliZ(0))

# İki çağrı: aynı kapı sırası, farklı parametre değerleri
print(ansatz([0.1, 0.2, 0.3]))
print(ansatz([0.4, 0.5, 0.6]))
pennylane · recording Sabit şablon · parametre değişimi UTF-8 · LF
recording_loop_unroll.py Python
import pennylane as qml

dev = qml.device("default.qubit", wires=4)
DEPTH = 2  # sabit üst sınır → kayıt öngörülebilir

@qml.qnode(dev)
def layer(x, weights):
  qml.AngleEmbedding(x, wires=range(4))
  for d in range(DEPTH):
    for i in range(4):
      qml.RY(weights[d, i], wires=i)
    for i in range(3):
      qml.CNOT(wires=[i, i + 1])
  return qml.expval(qml.PauliZ(0))
pennylane Döngü · kayda açılma

İleride ve Yan Sayfalarda Ne Var?

Kayıt tamamlandıktan sonraki halkalar:

Özet Devre kaydı, PennyLane’de kullanıcı gövdesinin trace ile yakalanmasıdır; differentiable hibrit eğitimin ilk teknik adımıdır. Tape ve yürütüm “sonra” gelir — kayıt temiz değilse orada düzeltme yapmak gerekmez, burada yapılır.