Sıfır Hata Kuran Bir Qiskit Aer Gürültü Modeli de Başarıyla Döner
Hiç gürültü kurmayan bir simülatör, doğru gürültüyü kuranla aynı temiz tuple'ı döndürür. SuperconducTED gürültü motoru bunu, gürültüsünü fiziksel olarak doğru hale getiren commit'te yaşadı. Ölçülen hata sayıları ve onlarla gelen koruma aşağıda.
Kraus projektörü hangi kapıların gürültü taşıyacağına neden karar veremiyor
Motor, Qiskit Aer'in üstüne IBM kalibrasyon snapshot'larını gürültü modeli topluluklarına çeviren bir fuzzy çıkarım katmanı koyuyor. Aer, bir quantum error'ı add_quantum_error üzerinden bir instruction adına ve bir qubit listesine bağlıyor (Aer'in NoiseModel kaynağı). Hangi instruction adlarının fiziksel sayılacağına o zincirin yukarısında bir yerde karar verilmesi gerekiyor.
ChannelProjector bir (gate_name, qubits) çifti alıyor ve kanalı kurarken gate_name'i bilerek yok sayıyor; channels/kraus.py ise değişime kapalı. Bu yüzden FuzzyNoiseModel.prepare() devredeki her tek qubit'lik instruction'ı projektöre veriyordu. Aynı damping kanalı sıfır süreli sanal rz kapılarına iniyor, delay ve Aer save instruction'larına kadar ulaşabiliyordu (PR 96).
Kalibrasyon kaydı allowlist'i yeniyor, çünkü backend onu kendisi yeniden yazıyor
Issue 73 iki aday kaynak koydu ortaya: kalibrasyon snapshot'ının kendi kapı kayıtları ya da elle yazılmış bir allowlist. ADR-028 snapshot'ı seçti. Tek qubit'lik bir kapı, properties.gates[*].parameters[gate_length] kaydı kesin pozitifse uygun sayılıyor; o kayıt, referans modelin termal gevşeme hedefleri için kullandığı training/targets.py::gate_lengths ayrıştırıcısıyla okunuyor.
Böylece rz, eksik metadata yüzünden değil fiziksel bir nedenle dışarıda kalıyor. Deponun test ettiği arşivlenmiş ibm_fez snapshot'ında 156 rz kaydının tamamı 0 ns gate_length taşıyor; id, rx, sx ve x ise 156 qubit boyunca 24 ns taşıyor. Bu değerlerde qubit başına dağılım yok: fixture her kapı için tek bir nominal süre tutuyor, her qubit'in ölçümünü değil. delay ve Aer save instruction'larının properties.gates kaydı hiç yok, o yüzden kapalı tarafa düşüyorlar.
Ledger, allowlist'in neden kaybettiğini yazıyor. Cihazın fiziğinin ikinci bir kopyası oluyor, backend yeniden kalibre edildiğinde sessizce kayıyor ve qubit başına bir olguyu ifade edemiyor. Uygunluk bu yüzden kapı adı ile fiziksel qubit demetini birlikte eşleştiriyor: bir qubit'te kalibre edilmiş kapı, komşusunda aynı kapıyı yetkilendirmiyor.
Bozuk bir kayıt, eksik bir kayıttan farklı davranıyor. Sayısal olmayan bir değer ya da ns dışında bir birim, uygunluk hiç değerlendirilmeden ayrıştırıcının içinde CalibrationParseError fırlatıyor. İki başarısızlıktan sesli olanı bu.
Sıfır süreli bir rz, kurulan gürültünün yarısını taşıyordu
Üç qubit'lik bir GHZ devresini transpile(circuit, basis_gates=['id','rz','sx','x','cz'], optimization_level=1, seed_transpiler=0) ile cihaz tabanına derleyin, sonra prepare() çağırın. Düzeltme öncesi ağaçta ['rz','sx'] üzerine, toplam altı hata kuruyor. Değişiklikten sonra yalnızca ['sx'] üzerine, toplam üç hata kuruyor (uygulama kaydı).
O devredeki gürültünün yarısı, kalibrasyonun 0 ns olarak arşivlediği bir instruction'a bağlıydı. Regresyon testi eski davranış konusunda daha açık sözlü: düzeltme öncesi ağaca karşı çalıştırıldığında assertion ['delay', 'rz', 'save_density_matrix', 'sx', 'x'] == ['sx', 'x'] diye okunuyor.
Derlenmemiş bir devre, içi boş bir gürültü modeli alıyor
Uygunluğu fiziksel taban adlarına bağlamanın bir bedeli var ve değişiklik onu ortadan kaldırmak yerine görünür kıldı. benchmarks/harness.py:75, prepare()'ı mantıksal devrelerle çağırıyor ve hiç transpile etmiyor. Aynı fixture'a karşı ghz(3) kurulan bir hatadan sıfıra, vqe(3) altıdan sıfıra düşüyor; qft(3) her iki ağaçta da zaten sıfırdaydı.
Bu çalıştırmaların hepsi yine başarıyla bitiyor. prepare() tuple'ını döndürüyor, Aer gürültüsüz bir devreyi simüle ediyor ve bir benchmark satırı, kapatılmış bir motordan ölçülmüş sayıyı rapor ediyor.
Düzeltme bu yüzden sessizliği duyulur kılan ikinci bir değişiklikle geliyor. prepare(), döndürmek üzere olduğu NoiseModel'i inceliyor ve hiçbir şey kurulmamışsa devrenin instruction adlarını kalibrasyonun uygun adlarının yanına yazdırıyor:
FuzzyNoiseModel.prepare installed no error: none of the circuit's
candidate instructions ['barrier', 'cx', 'h', 'measure'] is eligible
under this calibration ['id', 'rx', 'sx', 'x']. Compile the circuit to
the calibrated physical basis before calling prepare().
Hata fırlatmak yerine uyarıyor ve çağrının başarıyla bitmesine izin veriyor. Yalnız rz içeren ya da yalnız ölçüm yapan bir devre meşru biçimde gürültüsüzdür, ayrıca ADR-021 prepare()'ın dönüş sözleşmesini sabitliyor. stacklevel değerinin 3 olması, uyarıyı kütüphanenin içindeki bir satıra değil harness.py:75'e atfediyor.
cz'nin gate uzunluğu pozitif, yine de uygun değil
gate_lengths, qubits listesi bir uzunluğunda olmayan her kaydı atlıyor. Arşivlenmiş snapshot'ta cz'nin 68 ile 88 ns arasında gate_length taşıyan 352 kaydı var ve hiçbiri uygun kümeye girmiyor. Bu, bugünkü projektörle uyuşuyor; o da yalnızca tek qubit'lik, dolayısıyla şimdilik kaybedilen bir şey yok.
ADR-028 tuzağı, çok qubit'li bir kanalı kim yazacaksa onun için not ediyor. Yalnızca projektörü değiştirmek yeni kanalı erişilemez bırakır, çünkü uygun olmayan bir çift hiç hata üretmiyor. O başarısızlık da harness'takiyle aynı biçimde sessiz.
Kalibrasyondan türetilmiş bir çalıştırmadan sayı okumadan önce
Modelden çıkan hiçbir rakama güvenmeden önce modelin ne kurduğunu sayın. Aer, dönen NoiseModel üzerinde noise_instructions'ı açıyor; boş bir listenin başarılı bir çıkışın yanında durması başarısızlığın tamamı. Buna yol açan sıralama, yani prepare()'ı transpile()'dan önce çağırmak ya da transpile'ı hiç yapmamak, yazması kolay ve sonrasında görünmez.
Gerçek donanımda hata azaltma yapan herkes aynı muhasebe sorunuyla öbür taraftan karşılaşıyor; probabilistic error cancellation'daki örnekleme maliyeti aritmetiği bunu ortaya koyuyor. Vendor kalibrasyon verisinden gürültü modeli kuruyorsanız SuperconducTED deposundaki ADR-028'i ve CalibrationGateEligibilityPolicy'yi okuyun; çevresindeki fuzzy katmanın ne işe yaradığı için SuperconducTED vaka çalışmasını inceleyin.