Snapshot sistemleri — devre içi durum kaydı ve sonuç ağacı
Snapshot, kuantum devresinde seçtiğiniz anda — ölçüm histogramına indirgenmeden önce — simülatörün elinde tuttuğu kuantum durumunun veya türev istatistiklerin klasik bellekte saklanmasıdır. Modern Aer yolunda bu iş, çoğu zaman save_statevector, save_density_matrix, save_probabilities gibi save_* talimatlarıyla yapılır. Genel Aer çerçevesi Aer simülatörü sayfasında, tam genlik ve yoğunluk yürütmesi sırasıyla statevector ve yoğunluk matrisi başlıklarında; shot döngüsü shot mantığı sayfasında tutulur — burada snapshot’ın semantiği, etiketleme ve bellek maliyeti üzerinde duruyoruz.
Snapshot kavramı ve kullanım alanı
Simülatör, dalga fonksiyonunu veya yoğunluğu iç temsilde taşır; snapshot ise bu iç temsilin belirli bir devre anında dışarı aktarılmış bir kopyasıdır. Bu çıktı algoritma hata ayıklamasında, ara durum görselleştirmesinde, basit tomografi veya doğrulama hatlarında kullanılır. Donanımda aynı soyutlama her zaman yoktur; çoğu cihazda “devre ortası tam genlik” talebi farklı protokollerle karşılanır — bu yüzden buradaki anlatım Aer ve uyumlu simülatör yürütmesiyle sınırlıdır.
Bu sayfanın sınırı
Her Aer sürümünde sonuç ağacından veri çekme API’sinin tam yolu değişebilir; aşağıdaki kodlar öğretimseldir ve çalıştırmadan önce kullandığınız sürüm belgeleriyle eşleştirme gerekir.
Ölçüm ve snapshot: semantik ayrım
Projektif ölçüm, Born olasılıklarına göre klasik bir sonuç üretir ve çoklu shot ile frekans tablosuna dönüşür. Snapshot ise — doğru yöntem seçildiğinde — henüz o indirgeme yapılmadan önce vektör veya yoğunluk gibi tam bilgiyi (veya olasılık vektörünü) kaydeder. İkisini aynı “klasik çıktı” kutusunda düşünmek, hem performans hem yorum hatalarına yol açar: biri istatistik özet, diğeri ara temsil dökümüdür.
Dinamik devreler
Klasik kontrol akışı içeren devrelerde snapshot’ın nereye oturduğu, hangi dalın yürütüldüğüne bağlıdır. Bu sayfa o dallanma reçetesini vermez; yalnızca “snapshot talimatı hangi ünite bloktan sonra geçerlidir?” sorusunun takip edilmesi gerektiğini vurgular.
save_* talimatları ve miras çizgisi
Qiskit ekosisteminde uzun süre Snapshot adlı ayrı bir talimat sınıfı kullanıldı; Aer ve çekirdek devre modeli olgunlaştıkça bu ihtiyaç, doğrudan devreye eklenen save_statevector vb. ile birleştirildi. Bugün yeni kod yazarken “snapshot” kelimesini düşüncede tutup aracı olarak save_* ailesini seçmek, bakım açısından daha güvenli bir yoldur. Hangi save_* varyantının mevcut olduğu sürüme ve derleme seçeneklerine bağlıdır; tam liste için resmi belgeyi esas alın.
Olasılık ve beklenti
Tam genlik yerine Born olasılıklarını veya belirli observable beklentilerini kaydetmek isteyebilirsiniz; bu, bellek ile bilgi ayrımını hareket ettirir — bazen histograma yaklaşırsınız, bazen hâlâ vektörden daha hafif bir ara temsil elde edersiniz.
Eski API’den kopuş
Eski örneklerde görülen Snapshot çağrılarını kopyalarken çağrı imzası ve sonuç ağacı yollarını güncellemek gerekir; aksi halde eğitim notu “çalışır” görünür ama ürettiği veri yapısı sessizce beklediğinizden farklıdır.
Etiket, sıra ve çoklu kayıt
Her snapshot için anlamlı bir label seçmek, sonradan sonuç ağacında veriyi çekmeyi kolaylaştırır. Aynı etiketi birden fazla kez kullanmak, sürüme göre üzerine yazma veya hata üretme davranışına yol açabilir; bu yüzden üretim kodunda etiketleri devre yapısından türetilen benzersiz dizgilerle yönetmek iyi bir alışkanlıktır. Devredeki sıra, hangi kapılardan sonra durumun okunacağını belirler; transpile sonrası kapı sırası değişirse snapshot konumu da kayar.
Transpile uyarısı
Optimize edilmiş devrede snapshot’ın beklenenden “önce” veya “sonra” görünmesi, yalnızca görsel bir sorun değil, matematiksel olarak farklı bir ara duruma işaret edebilir. Bu yüzden snapshot’lı hatları transpile ederken eşdeğerlik kontrolü ayrı bir adımdır.
Shot döngüsü ve sonuç nesnesi
shots>1 seçildiğinde, her shot bağımsız bir yürütme olarak düşünülebilir; snapshot talimatları da bu yürütmelerin içinde tekrarlanır. Bu, bellek ve süre maliyetini shot ile çarpar. Histogram ile snapshot verisini aynı tabloda birleştirmek istiyorsanız, hangi shot’tan hangi kaydın alındığını açıkça modellemeniz gerekir — Aer’in sunduğu soyutlama sürüme göre değişir.
Shot sayısı seçimi
Ayrıntılı istatistik için shot mantığı sayfasındaki O(1/√N) sezgisi geçerlidir; snapshot ise çoğu zaman her shot’ta üstel boyutlu bir nesne taşır. İkisini birlikte büyütmek, bellek duvarını hızlı getirir.
Yöntem ve arka uç uyumu
Tam genlik snapshot’ı anlamlı kılan yöntem, iç temsilin genlik olmasıdır; yoğunluk snapshot’ı ise CPTP çizgisinde anlam kazanır. Stabilizer / Clifford hızlandırılmış yollarda hangi save_* varyantlarının tanımlı olduğu ayrı bir tablo gerektirir — “her yöntem her snapshot’ı destekler” varsayımı güvenli değildir. Bu yüzden yöntem seçimini Aer simülatörü çerçevesinde okumak, snapshot tasarımının ilk adımıdır.
Gürültü modelleri
Gürültülü yürütmede ara durum karışıktır; yoğunluk tabanlı snapshot doğal bir eşleşme sunabilir. Gürültü simülasyonu ile birlikte düşünüldüğünde, hangi temsilin raporlandığı netleşir.
Bellek maliyeti ve tasarım sınırları
Tek bir save_statevector çağrısı, kübit sayısı n için kabaca O(2ⁿ) karmaşık sayı alanında bellek dokunuşu anlamına gelir. Devre boyunca on kez tam genlik kaydetmek, kavramsal olarak aynı maliyeti tekrarlar; shot ile çarpıldığında tablo sert şekilde büyür. Bu yüzden üretim hattında ya seyrek etiketler ya da daha hafif save_probabilities gibi araçlar tercih edilir.
GPU ile birlikte
Büyük vektörleri GPU’da tutup sık snapshot almak, cihaz belleğini aynı üstel ölçekle zorlar; taşıma maliyeti için GPU ivmelendirmesi sayfasındaki uyarılar geçerlidir.
Klasik kayıt ve ölçüm postulatı: kısa not
John von Neumann’ın kuantum ölçümünü formalize eden çerçevesinde, “ölçüm” kavramı postülat düzeyinde tanımlanır ve klasik kayıt ile ilişkilendirilir. Simülatördeki snapshot ise mühendislik düzeyinde: dalga fonksiyonunun sayısal bir kopyasını klasik bellekte saklarsınız; bu, deneysel ölçüm protokolünün yerini tutmaz. İki dünya arasındaki farkı net tutmak, eğitim metinlerinde sık yapılan “simülatör çıktısı = laboratuvar olayı” yanlış anlamasını önler.
Bağlamda tutmak
Bu paragraf felsefi bir derinlik iddiası taşımaz; yalnızca snapshot’ı doğru zihinsel kutuya koymak içindir.
Kod laboratuvarı
İlk blok, dolanık öncesi tek bir genlik snapshot’ı ekler. İkinci blok, aynı devre üzerinde iki zaman etiketi üretir. Sonuçtan etiketlenmiş veriyi çekme yolu sürüme göre değişir; aşağıdaki çıktı tam nesneyi gösterir — üretimde etiket anahtarını belgelerden doğrulayın.
from qiskit import QuantumCircuit
from qiskit_aer import AerSimulator
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.save_statevector(label="bell")
backend = AerSimulator(method="statevector")
result = backend.run(qc).result()
print(result)
from qiskit import QuantumCircuit
from qiskit_aer import AerSimulator
qc = QuantumCircuit(2)
qc.h(0)
qc.save_statevector(label="step_a")
qc.cx(0, 1)
qc.save_statevector(label="step_b")
result = AerSimulator(method="statevector").run(qc).result()
print(result)
İleri okuma ve özet
Snapshot sistemleri, simülatörün iç dünyasını dışarı aktaran kontrollü musluklardır; ölçüm histogramından farklı bir sözleşme taşırlar ve bellek maliyeti shot ile birlikte büyür. Doğru etiket, doğru yöntem ve doğru sonuç API’si üçlüsü olmadan üretilen grafikler yanıltıcı olabilir.
- Aer simülatörü — yöntem ve sonuç çerçevesi.
- Statevector simülasyonu — tam genlik temsil.
- Ölçüm mantığı — histogram kökü.