1. Ana sayfa
  2. İçerik planı
  3. Provider sistemi · Qiskit
Qiskit · devre yürütme

Provider sistemi — hesap, katalog ve erişim sınırı

Provider, Qiskit dünyasında "backend'leri nereden alıyorum?" sorusunun cevabını tek bir nesnede toplar. Yerel Aer simülatöründe bu soyutlama neredeyse görünmezken, IBM Quantum tarafında QiskitRuntimeService (veya önceki nesil IBMQ sağlayıcıları) hesap kimliği, organizasyon ve proje kapsamı, backend kataloğu ve Runtime API uçlarını sarmalar. Bu sayfa, sağlayıcının rolünü uzun ve ayrıntılı anlatır: kimlik doğrulama disiplini (token'ı asla koda gömmeyin), katalog ve filtreleme, instance ve erişim kapsamı, tipik hatalar, yerel öğrenme yolları. Tüm çalışan kod örnekleri yereldir — ağ üzerinden IBM'e bağlanmaz, hesap veya API anahtarı gerektirmez. Bulut akışı yalnızca yorum satırlarında iskelet olarak durur.

  • Rol: katalog + kimlik + Runtime köprüsü
  • Güvenlik: token yapılandırması kod dışında
  • Yerel örnek: FakeBackend · Aer

Provider nedir ve ne yapmaz?

Soyut düzeyde bir provider, kullanıcı kodu ile yürütülebilir hedefler (backend'ler) arasındaki fabrikadır. Siz bir devre yazarsınız; provider size "hangi makineleri görebildiğinizi" listeler, seçtiğiniz hedefe bağlanmanız için gerekli oturum bilgisini taşır ve çoğu zaman run veya Runtime primitives çağrılarının arkasındaki HTTP/WebSocket trafiğini sizden gizler. Provider devre inşa etmez, transpile etmez ve algoritmanızın doğruluğunu garanti etmez; o işler sırasıyla devre modeli, optimizasyon ve sizin deney tasarımınızdadır.

Backend ile ayrım

Backend mimarisi sayfasında vurgulandığı gibi, BackendV2 bir sözleşmedir: qubit sayısı, native kapılar, coupling, kalibrasyon özeti. Provider ise o sözleşmelerin kaynağını yönetir: hangi backend adları mevcut, hangi planla görünür, hangi Runtime kanalından çağrılır. Aynı backend adı, farklı hesaplarda farklı kuyruk derinliği veya hiç listelenmeme hâlinde olabilir; bu yüzden "kodum çalışıyordu, arkadaşımda çalışmıyor" sorularının ilk cevabı çoğu zaman provider kapsamıdır, Qiskit sürümü değil.

Bu sayfanın sınırı

Kurumsal SSO, faturalandırma, organizasyon politikaları veya IBM Cloud IAM detayları burada işlenmez; bunlar ürün belgelerinin alanıdır. Burada amaç, Qiskit kullanıcısının zihninde sağlayıcı katmanını netleştirmek ve güvenli yerel örneklerle aynı desenleri öğretmektir.

Tek cümle Provider, backend fabrikasıdır; backend ise yürütme sözleşmesidir. İkisini karıştırmak, hata ayıklamada yanlış katmana müdahale etmek demektir.

Qiskit RuntimeService ve nesil değişimi

IBM Quantum ekosisteminde modern yol, qiskit-ibm-runtime paketindeki QiskitRuntimeService üzerinden yürür. Bu sınıf, eski IBMQ / load_account akışlarının yerini almış veya onlarla bir süre bir arada yaşamış olabilir; sürüm notları her yükseltmede okunmalıdır. RuntimeService'in görevi kabaca üçlüdür: (1) kimlik doğrulamasını ve oturumu yönetmek, (2) erişilebilir backend listesini sunmak, (3) Sampler/Estimator gibi primitives ve oturum API'lerine giriş noktası sağlamak. Bu üç görevin hepsi "provider" başlığı altında toplanır çünkü kullanıcı açısından tek kapıdan geçilir.

Primitives ve provider ilişkisi

Runtime yürütmesi sayfasında primitives derinleştirilecek; burada yalnızca şu bağ kurulur: primitives çağrısı yapıldığında bile alt tarafta yine bir hedef backend ve bir oturum seçilir; bu seçim RuntimeService üzerinden akar. Dolayısıyla "Sampler'ı doğrudan backend'e bağladım" (Sampler(mode=backend)) ile "Session içinde buluttaki gerçek cihaza bağladım" aynı arayüz ailesidir fakat provider katmanı ikinci yolda zorunludur.

Sürüm ve paket ayrımı

qiskit çekirdeği, qiskit-aer ve qiskit-ibm-runtime farklı sürüm takvimlerine sahiptir. Provider hatalarını ayırt ederken önce hangi paketin stack trace'de göründüğüne bakın: Aer hatası ile RuntimeService hatası farklı kök nedenlere işaret eder.

Kimlik doğrulama ve yapılandırma disiplini

IBM Quantum'a bağlanırken tipik yol, IBM hesabından üretilen bir API token'ının yerel diske (çoğu zaman qiskit-ibm.json veya ortam değişkeni) kaydedilmesidir. Güvenlik kuralı: token'ı asla kaynak koduna, Jupyter hücresine kalıcı olarak veya bu statik siteye yapıştırmayın. Eğitim materyallerinde token göstermek, hem hesabınızı riske atar hem de öğrenciye yanlış alışkanlık kazandırır. Doğru desen: bir kerelik save_account veya resmi CLI ile yapılandırma, ardından kodda yalnızca QiskitRuntimeService() gibi parametresiz fabrika çağrıları. Bu sayfadaki kodlar bilinçli olarak token içermez ve ağa çıkmaz.

Ortam değişkenleri ve CI

Sürekli entegrasyon ortamlarında token'ı gizli değişken olarak enjekte etmek yaygındır; fakat pipeline loglarına düşmemesi için dikkatli olun. Yerel makinede ise dosya izinlerini kısıtlamak (örneğin yalnızca kullanıcı okuyabilsin) iyi bir alışkanlıktır. Bu sayfa CI reçetesi vermez; yalnızca "provider güvenliği = kimlik bilgisini kod dışında tutma" ilkesini pekiştirir.

Bulut iskeleti (yorum)

Referans — çalıştırmayın Aşağıdaki satırlar yalnızca IBM kataloğu akışını hatırlatır; canlı hesap ve token gerektirir. Bu statik sitede kopyalayıp çalıştırmanız önerilmez.
# from qiskit_ibm_runtime import QiskitRuntimeService
# service = QiskitRuntimeService()  # ~/.qiskit/qiskit-ibm.json veya ortam değişkeni
# print([b.name for b in service.backends()])

Backend kataloğu ve meta veri

Provider, size bir katalog sunar: her girdi bir backend adı, durum bayrakları (operational, pending maintenance), simülatör mü gerçek mi, qubit sayısı gibi özet alanlarla birlikte listelenebilir. Katalog API'sinin tam imzası sürüme göre değişir; kavramsal olarak aradığınız şey şudur: "hesabımın görebildiği tüm hedefler" ve bunların üzerinde filtre uygulama. Filtre, yalnızca isim eşleştirmesi değildir; çoğu zaman min_num_qubits, simulator, operational gibi anahtarlarla ifade edilir.

Meta veri ile backend nesnesi

Katalog satırı, tam bir BackendV2 örneği değil de özet olabilir; gerçek yürütme için genelde isimden backend çözülür veya doğrudan nesne alınır. Özet ile tam nesne arasındaki fark, performans ve UI tasarımında önemlidir: binlerce kullanıcıya katalog sayfası çizerken her satır için ağır bir backend örneği oluşturmak verimsizdir.

Katalogdan seçime köprü

"Hangi backend?" sorusunun algoritmik cevabı backend seçimi sayfasında genişletilir; provider sayfasında odak, kataloğun nereden geldiği ve kimin görebildiğidir.

Filtreleme ve seçim stratejisi

Üretim kodunda "ilk sıradaki backend" veya "alfabetik en küçük ad" gibi sezgisel seçimler tehlikelidir: bakım penceresine denk gelebilir, kuyruk süresi uzayabilir veya simülatör yerine yanlışlıkla ücretli bir cihaz seçilebilir. Sağlıklı strateji: (1) açık filtreler (en az qubit, simülatör/gerçek ayrımı, operational), (2) kuyruk ve kalite metrikleri için ayrı bir gözlem katmanı, (3) seçilen backend adının loglanması. Provider bu stratejinin ilk adımına veri sağlar; gözlem ve maliyet kontrolü sizin operasyon katmanınızdadır.

least_busy ve alternatifleri

least_busy yardımcıları pratik görünür; fakat "düşük kuyruk" her zaman "en iyi bilimsel sonuç" anlamına gelmez. Ayrıca bulut çağrısı gerektirdiği için bu sayfanın kod laboratuvarında yer almaz — yalnızca kuyruk mantığı ve seçim sayfalarında birlikte düşünülmelidir.

Instance, hub ve erişim kapsamı

IBM Quantum'da bir hesap bazen birden fazla instance (hub / group / project hiyerarşisi) ile ilişkilendirilir. Aynı token ile bile, hangi instance'ın aktif olduğu kataloğu değiştirir: bir projede gördüğünüz cihaz diğerinde listelenmeyebilir. Provider tarafında bu, "hangi kök düğümde geziyorum?" sorusuna denk gelir. Öğretim açısından kritik nokta: erişim reddi bazen kod hatası değil, yanlış instance veya süresi dolmuş plandır.

Organizasyon ve paylaşılan hesaplar

Laboratuvar veya ekip ortamında paylaşılan servis hesapları kullanılıyorsa, kimin hangi kota altında koştuğu belirsizleşebilir. Operasyonel disiplin: kişisel token ile dene, pipeline'da ayrı kimlik kullan, paylaşılan hesapta etiketleme ve loglama zorunlu kıl.

Tipik hatalar ve ayırt etme

Yetkisiz erişim, süresi dolmuş token, yanlış instance, bakımdaki cihaz veya kota aşımı — hepsi üstte benzer bir istisna ile bitebilir. Ayırt etmek için: (1) stack trace'de qiskit_ibm_runtime mi qiskit çekirdeği mi görünüyor, (2) hata mesajında "unauthorized" / "forbidden" / "not found" geçiyor mu, (3) aynı kod Aer ile çalışıyor mu. Üçüncü soru evet ise, sorun büyük olasılıkla provider veya ağ katmanındadır, devre cebri doğrudur.

Yerel doğrulama önceliği

Bulutta teşhis yapmadan önce Aer ve fake backend ile aynı transpile + run hattını koşmak, zaman kazandırır.

Pratik kural Önce yerel (Aer / Fake), sonra bulut. Provider hatası şüphesinde token ve instance'ı kod yerine yapılandırma tarafında kontrol edin.

Yerel sağlayıcı benzeri desenler

Öğrenme ve birim test için IBM provider'ına ihtiyaç yoktur. İki güçlü yerel desen vardır: (1) AerSimulator ile doğrudan yürütme — katalog tek öğedir; (2) FakeManilaV2 gibi sahte donanımlar — gerçek bir cihazın target ve gürültü modelini taklit eder, böylece "provider bana şu backend'i verdi" akışını taklit eden ince bir sarmalayıcı yazılabilir. Bu sayfanın laboratuvarı ikinci deseni kullanır: küçük bir FakeCatalog sınıfı, gerçek QiskitRuntimeService.backends() API'sini taklit etmez ama aynı programlama düşüncesini öğretir.

Test çifteği: aynı devre, iki sahte hedef

İki farklı fake backend aynı transpile politikasını farklı kapı sayılarına iter; böylece "provider farklı hedef döndürdü" senaryusu yerelde yeniden üretilir. Detay backend mimarisi ve fake kullanımı ile birleşik okunmalıdır.

Kod laboratuvarı

Üç blok da tamamen yereldir: ağ çağrısı yok, token yok, IBM hesabı yok. Birinci blok, sahte backend'leri bir sözlükte toplayan minimal bir "katalog" desenini gösterir. İkinci blok, aynı Bell devresini Aer ve fake üzerinde koşturarak provider hatasından ayırt etmeyi destekler. Üçüncü blok, küçük bir sarmalayıcı ile "isimden backend al" fabrikasını gösterir — gerçek RuntimeService çağrısının yerel karşılığıdır.

local_fake_catalog.py Python
from qiskit_ibm_runtime.fake_provider import FakeManilaV2

class FakeCatalog:
    """Yerel öğretim: IBM kataloğunu taklit etmez, 'isim → fabrika' düşüncesini gösterir."""

    def __init__(self):
        self._registry = {
            "fake_manila": FakeManilaV2,
        }

    def list_names(self):
        return sorted(self._registry)

    def resolve(self, name: str):
        factory = self._registry.get(name)
        if factory is None:
            raise KeyError(f"Bilinmeyen backend: {name}")
        return factory()

cat = FakeCatalog()
for n in cat.list_names():
    b = cat.resolve(n)
    print(n, "→", b.name, "qubits=", b.num_qubits)
qiskit Yerel katalog · ağ yok UTF-8 · LF
local_provider_smoke_test.py Python
from qiskit import QuantumCircuit, transpile
from qiskit_aer import AerSimulator
from qiskit_ibm_runtime.fake_provider import FakeManilaV2

qc = QuantumCircuit(2, 2)
qc.h(0)
qc.cx(0, 1)
qc.measure([0, 1], [0, 1])

def smoke(backend, label, shots=512):
    tqc = transpile(qc, backend=backend, optimization_level=2)
    counts = backend.run(tqc, shots=shots).result().get_counts()
    print(f"{label:>10} → {counts}")

smoke(AerSimulator(), "aer")
smoke(FakeManilaV2(), "fake")
qiskit Provider hatası mı? Önce yerel iki hedef UTF-8 · LF
local_backend_factory.py Python
from qiskit import QuantumCircuit, transpile
from qiskit_ibm_runtime.fake_provider import FakeManilaV2

def make_backend(name: str):
    if name == "fake_manila":
        return FakeManilaV2()
    raise ValueError(f"Bilinmeyen backend: {name} — kataloğu genişletin.")

backend = make_backend("fake_manila")

qc = QuantumCircuit(2, 2)
qc.h(0)
qc.cx(0, 1)
qc.measure([0, 1], [0, 1])

tqc = transpile(qc, backend=backend, optimization_level=2)
counts = backend.run(tqc, shots=1024).result().get_counts()
print(backend.name, "→", counts)
qiskit İsim → backend → transpile → run · yerel UTF-8 · LF

İleri okuma ve özet

Provider sistemi, Qiskit'in bulut tarafındaki kapısıdır: kimlik, katalog, Runtime köprüsü. Yerelde Aer ve fake backend'lerle aynı programlama düşüncesini kurarak öğrenmek, bulut hatalarını hızlı ayırt etmenizi sağlar. Token'ı koda gömmeyin; seçilen backend adını ve instance'ı loglayın; filtreleri açık yazın.

Özet Provider = kimlik + katalog + Runtime girişi. Backend = yürütme sözleşmesi. Öğrenirken ve hata ayıklarken önce yerel; bulutta token ve instance'ı yapılandırma tarafında tutun.