← Quantum Store · Rehberler · Dersler · Sözlük · Paketler · Öğrenme yolları · English
Qiskit kursu: gerçek kuantum programlama · Ders 6 / 6 · 12 dk
Gerçek kuantum bilgisayara: transpile ve IBM Quantum
Devreni transpile ile bir cihazın kapılarına çevir, IBM Quantum hesabını bağla, devreni gerçek bir kuantum bilgisayarda çalıştır ve gürültülü sonuçları yorumla.
Cihazın kendi kapıları var
Gerçek bir kuantum bilgisayar yalnızca birkaç temel kapıyı doğrudan uygulayabilir. IBM cihazlarında bunlar rz, sx, x gibi tek kübitlik kapılar ve bir tür iki kübitlik kapıdır. Ayrıca her kübit her kübite bağlı değildir; uzak iki kübit arasında CNOT gerekiyorsa araya SWAP’lar eklenir.
transpile, devreni cihazın tanıdığı kapılara ve kübit bağlantılarına çevirir ve mümkün olduğunca kısaltır. Aşağıdaki örnekte H kapısı rz ve sx kapılarına ayrılır. optimization_level 0 ile 3 arasında bir sayıdır; büyüdükçe transpile daha çok uğraşır ve genellikle daha kısa bir devre bulur.
from qiskit import QuantumCircuit, transpile
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()
tqc = transpile(qc, basis_gates=['rz', 'sx', 'x', 'cx'], optimization_level=1)
print(tqc.draw())
print(tqc.count_ops(), tqc.depth())
IBM Quantum hesabı
IBM Quantum Platform’da ücretsiz bir hesap açarak her ay sınırlı bir süre gerçek cihazları kullanabilirsin. Hesap sayfandan bir API anahtarı oluştur ve qiskit-ibm-runtime kütüphanesini kur (pip install qiskit-ibm-runtime). Anahtarı bir kez kaydetmen yeterli; bir şifre gibi sakla, koduna yazıp paylaşma.
from qiskit_ibm_runtime import QiskitRuntimeService
# Yalnızca bir kez çalıştır: anahtar bilgisayarına kaydedilir.
QiskitRuntimeService.save_account(token='API_ANAHTARIN', set_as_default=True)
Devreyi cihaza gönder
least_busy, o an en kısa sırası olan gerçek cihazı seçer. Devre bu cihaz için transpile edilir ve IBM’in Sampler’ına gönderilir; kodun geri kalanı simülatördekiyle aynıdır. Sıra uzunsa iş birkaç dakika bekleyebilir; job_id ile işini daha sonra IBM Quantum Platform’da da bulabilirsin.
from qiskit import transpile
from qiskit_ibm_runtime import QiskitRuntimeService, SamplerV2 as Sampler
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
tqc = transpile(qc, backend=backend)
sampler = Sampler(mode=backend)
job = sampler.run([tqc], shots=1000)
print(job.job_id())
counts = job.result()[0].data.meas.get_counts()
print(backend.name, counts)
Gerçek sonuçlar neden kusurlu?
Simülatörde Bell devresi yalnızca 00 ve 11 verir. Gerçek bir cihazda ise yüzde birkaç oranında 01 ve 10 da görürsün. Bunun sebebi gürültüdür: kapılar küçük hatalar yapar, kübitler zamanla durumlarını kaybeder ve ölçüm bazen yanlış okunur.
Devre ne kadar kısa olursa hata o kadar az birikir; transpile’ın devreyi kısaltmaya çalışması bu yüzden önemlidir. Gürültüyle başa çıkmanın yolları, hata azaltma ve hata düzeltme, okulun ileriki kurslarının konusu.
Kendin dene
Simülatör ideal bir cihazdır: GHZ örneğinde yalnızca 000 ve 111 çıkar; gerçek bir cihazda aynı devre az da olsa 001, 110 gibi hatalı sonuçlar da verir. İkinci CNOT’u kaldır: q2 dolanıklığa katılmaz ve sonuçlar 000 ile 011 olur.
Tarayıcıda dene (kurulum yok)Akılda kalsın
- Gerçek cihazlar yalnızca birkaç temel kapıyı ve sınırlı kübit bağlantılarını destekler.
- transpile devreyi cihazın kapılarına ve bağlantılarına çevirir, mümkünse kısaltır.
- IBM Quantum Platform’daki ücretsiz hesapla qiskit-ibm-runtime üzerinden gerçek cihazlarda çalışabilirsin.
- Gerçek sonuçlar gürültülüdür; kısa devreler daha az hata biriktirir.
Kendini sına
transpile ne yapar?
- Devreyi cihazın tanıdığı kapılara ve kübit bağlantılarına çevirir
- Devreyi gerçek bir cihazda çalıştırır
- Ölçüm sonuçlarındaki hataları düzeltir
Cevabı göster
Devreyi cihazın tanıdığı kapılara ve kübit bağlantılarına çevirir. transpile devreyi çalıştırmaz ve hataları düzeltmez; devreyi hedef cihazın temel kapılarına ve bağlantılarına uygun, mümkünse daha kısa bir devreye çevirir.
← Döndürme kapıları ve parametreli devreler · Öğrenme yollarına geç →