Share via


Qiskit ile Azure Quantum'a bağlantı hattı gönderme

Paketi kullanarak Qiskit kuantum devresi göndermeyi azure-quantumPython öğrenin. Yerleşik paketi olan Azure Quantum not defterini kullanarak veya yerel makinenizden Qiskit devrelerini Azure Quantum'a azure-quantumPython gönderebilirsiniz.

Daha fazla bilgi için bkz . Kuantum devreleri.

Not

Microsoft Quantum Geliştirme Seti (Klasik QDK) artık 30 Haziran 2024'e kadar desteklenmeyecektir. Mevcut bir QDK geliştiricisiyseniz kuantum çözümleri geliştirmeye devam etmek için yeni Azure Quantum Geliştirme Seti'ne (Modern QDK) geçmenizi öneririz. Daha fazla bilgi için bkz . Q# kodunuzu Modern QDK'ye geçirme.

Önkoşullar

Yükleme ayrıntıları için bkz . VS Code'da Modern QDK'yi yükleme.

  • Azure aboneliğinizdeki bir Azure Quantum çalışma alanı. Çalışma alanı oluşturmak için bkz . Azure Quantum çalışma alanı oluşturma.

  • Python ve Pip'in yüklü olduğu bir ortamPython.

  • Azure Quantum Geliştirme Seti, Pythonve Jupyter uzantılarının yüklü olduğu VS Code.

  • [qiskit] etiketine sahip Azure Quantum azure-quantumPython paketi. Qiskit'in en son sürümüne sahip olduğunuzdan emin olun. Daha fazla bilgi için bkz . Azure-quantum Python paketini güncelleştirme.

  • [qiskit] etiketine sahip Azure Quantum azure-quantumPython paketinin en son sürümü.

    Not

    Qiskit'in en son sürümüne sahip olduğunuzdan emin olun. Daha fazla bilgi için bkz . Azure-quantum Python paketini güncelleştirme.

    python -m pip install --upgrade azure-quantum[qiskit] qsharp ipykernel 
    

    Not

    Jupyter Python çekirdeği ipykernel algılanmazsa VS Code bunu yüklemenizi ister.

Yeni bir Jupyter Notebook oluşturma

  1. VS Code'da Komut paleti Görüntüle'yi > ve ardından Oluştur: Yeni Jupyter Not Defteri'ni seçin.
  2. Sağ üst kısımda VS Code, not defteri için seçilen ve sanal Python ortamın Python sürümünü algılar ve görüntüler. Birden çok Python ortamınız varsa, sağ üstteki çekirdek seçiciyi kullanarak bir çekirdek seçmeniz gerekebilir. Ortam algılanmadıysa kurulum bilgileri için VS Code'da Jupyter Not Defterleri bölümüne bakın.

Gerekli içeri aktarmaları yükleme

Not defterinizin ilk hücresinde, gerekli içeri aktarmaları yüklemek için aşağıdaki kodu çalıştırın:

import azure.quantum
from qiskit import QuantumCircuit
from qiskit.visualization import plot_histogram
from azure.quantum.qiskit import AzureQuantumProvider

Azure Quantum hizmetine Bağlan

Azure Quantum hizmetine bağlanmak için kaynak kimliğine ve Azure Quantum çalışma alanınızın konumuna ihtiyacınız vardır. Azure hesabınızda oturum açın, https://portal.azure.comAzure Quantum çalışma alanınıza gidin ve üst bilgiden değerleri kopyalayın.

Azure Quantum çalışma alanından kaynak kimliğini ve konumunu alma

Yeni bir hücre ekleyin ve hesap bilgilerinizi Workspace kullanarak oluşturma ve AzureQuantumProvider Nesneleri kullanarak Azure Quantum çalışma alanınıza bağlanın.

workspace = Workspace(  
    resource_id = "", # Add the resourceID of your workspace
    location = "" # Add the location of your workspace (for example "westus")
    )

provider = AzureQuantumProvider(workspace)

Tüm arka uçları listeleme

Artık çalışma alanınızda kullanılabilen tüm kuantum bilgi işlem arka uçlarını yazdırabilirsiniz:

print("This workspace's targets:")
for backend in provider.backends():
    print("- " + backend.name())
This workspace's targets:
- ionq.qpu
- ionq.qpu.aria-1
- ionq.simulator
- microsoft.estimator
- quantinuum.hqs-lt-s1
- quantinuum.hqs-lt-s1-apival
- quantinuum.hqs-lt-s2
- quantinuum.hqs-lt-s2-apival
- quantinuum.hqs-lt-s1-sim
- quantinuum.hqs-lt-s2-sim
- quantinuum.qpu.h1-1
- quantinuum.sim.h1-1sc
- quantinuum.sim.h1-1e
- rigetti.sim.qvm
- rigetti.qpu.ankaa-2

Basit bir bağlantı hattı çalıştırma

İlk olarak, çalıştırmak için basit bir Qiskit bağlantı hattı oluşturun.

# Create a Quantum Circuit acting on the q register
circuit = QuantumCircuit(3, 3)
circuit.name = "Qiskit Sample - 3-qubit GHZ circuit"
circuit.h(0)
circuit.cx(0, 1)
circuit.cx(1, 2)
circuit.measure([0,1,2], [0, 1, 2])

# Print out the circuit
circuit.draw()
     ┌───┐          ┌─┐      
q_0: ┤ H ├──■───────┤M├──────
     └───┘┌─┴─┐     └╥┘┌─┐   
q_1: ─────┤ X ├──■───╫─┤M├───
          └───┘┌─┴─┐ ║ └╥┘┌─┐
q_2: ──────────┤ X ├─╫──╫─┤M├
               └───┘ ║  ║ └╥┘
c: 3/════════════════╩══╩══╩═
                     0  1  2 

Programınızı çalıştırmak için bir target seçin

IonQ simülatöründe çalıştırma

Gerçek donanım üzerinde çalıştırmadan önce simülatörde bağlantı hattını test edelim. IonQ Simulator arka ucuna bağlanmak üzere bir Backend nesne oluşturmak için kullanınget_backend:

simulator_backend = provider.get_backend("ionq.simulator")

IonQ arka uçları, donanım üzerinde en iyi şekilde çalışacak şekilde derlenen tanımlı bir geçit kümesinden gelen geçitleri destekler. Bağlantı hattınız bu listede olmayan geçitler içeriyorsa, Qiskit tarafından sağlanan işlevi kullanarak transpile desteklenene gateset dönüştürmeniz gerekir:

from qiskit import transpile
circuit = transpile(circuit, simulator_backend)

Dönüştürme işlevi, geçitlerin belirtilen arka uçta desteklenen kapılara ayrıştırıldığı yeni bir devre nesnesi döndürür.

Artık programı Azure Quantum hizmeti aracılığıyla çalıştırabilir ve sonucu alabilirsiniz. Aşağıdaki hücre, bağlantı hattını 100 çekimle çalıştıran bir iş gönderir:

job = simulator_backend.run(circuit, shots=100)
job_id = job.id()
print("Job id", job_id)
Job id 00000000-0000-0000-0000-000000000000

İş tamamlanana kadar beklemek ve sonuçları döndürmek için şunu çalıştırın:

result = job.result()
print(result)
Result(backend_name='ionq.simulator', backend_version='1', qobj_id='Qiskit Sample - 3-qubit GHZ circuit', job_id='00000000-0000-0000-0000-000000000000', success=True, results=[ExperimentResult(shots=100, success=True, meas_level=2, data=ExperimentResultData(counts={'000': 50, '111': 50}, probabilities={'000': 0.5, '111': 0.5}), header=QobjExperimentHeader(meas_map='[0, 1, 2]', name='Qiskit Sample - 3-qubit GHZ circuit', num_qubits='3', qiskit='True'))])

Sonuç, Qiskit paketine özgü bir nesne olduğundan, sonuçları görselleştirmek için Qiskit'in result.get_counts ve plot_histogram kullanabilirsiniz. Tüm olası bit dizesi etiketlerinin temsili olduğundan emin olmak için, bunları öğesine countsekleyin.

counts = {format(n, "03b"): 0 for n in range(8)}
counts.update(result.get_counts(circuit))
print(counts)
plot_histogram(counts)
{'000': 50, '001': 0, '010': 0, '011': 0, '100': 0, '101': 0, '110': 0, '111': 50}

IonQ Simulator'da Qiskit bağlantı hattı sonucu

İş maliyetini tahmin

QPU'da bir işi çalıştırmadan önce çalıştırmanın maliyetini tahmin edebilirsiniz. QPU'da bir işi çalıştırmanın maliyetini tahmin etmek için yöntemini kullanabilirsiniz estimate_cost :

backend = provider.get_backend("ionq.qpu")
cost = backend.estimate_cost(circuit, shots=1024)

print(f"Estimated cost: {cost.estimated_total}")

Bu, tahmini maliyeti ABD doları cinsinden yazdırır.

En güncel fiyatlandırma ayrıntıları için IonQ Fiyatlandırması'na bakın veya çalışma alanınızı bulun ve fiyatlandırma seçeneklerini çalışma alanınızın "Sağlayıcı" sekmesinde görüntüleyin: aka.ms/aq/myworkspaces.

IonQ QPU üzerinde çalıştırma

Gerçek donanıma (Kuantum İşlemci Birimi (QPU) bağlanmak için yönteminin target"ionq.qpu" adını sağlamanız yeterlidirget_backend:

qpu_backend = provider.get_backend("ionq.qpu")

Azure Quantum'da çalıştırılacak bağlantı hattını gönderin, sonuçları alın ve sonuçları çizmek için çalıştırın plot_histogram .

Not

QPU'da bir bağlantı hattını çalıştırmak için gereken süre, geçerli kuyruk sürelerine bağlı olarak değişebilir.

# Submit the circuit to run on Azure Quantum
job = qpu_backend.run(circuit, shots=1024)
job_id = job.id()
print("Job id", job_id)

# Get the job results (this method waits for the Job to complete):
result = job.result()
print(result)
counts = {format(n, "03b"): 0 for n in range(8)}
counts.update(result.get_counts(circuit))
print(counts)
plot_histogram(counts)
Job id 00000000-0000-0000-0000-000000000000
Job Status: job has successfully run
Result(backend_name='ionq.simulator', backend_version='1', qobj_id='Qiskit Sample - 3-qubit GHZ circuit', job_id='00000000-0000-0000-0000-000000000000', success=True, results=[ExperimentResult(shots=1024, success=True, meas_level=2, data=ExperimentResultData(counts={'0': 505, '1': 6, '2': 1, '3': 1, '4': 1, '5': 10, '6': 11, '7': 488}, probabilities={'0': 0.4932, '1': 0.0059, '2': 0.001, '3': 0.001, '4': 0.001, '5': 0.0098, '6': 0.0117, '7': 0.4766}), header=QobjExperimentHeader(name='Qiskit Sample - 3-qubit GHZ circuit', num_qubits='3', qiskit='True'))])
{'000': 505, '001': 6, '010': 1, '011': 1, '100': 1, '101': 10, '110': 11, '111': 488}

IonQ QPU üzerinde Qiskit bağlantı hattı sonucu

Önemli

Tek bir işte birden çok bağlantı hattının gönderilmesi şu anda desteklenmemektedir. Geçici bir çözüm olarak, her bağlantı hattını zaman uyumsuz olarak göndermek için yöntemini çağırabilir backend.run ve ardından her işin sonuçlarını getirebilirsiniz. Örneğin:

jobs = []
for circuit in circuits:
    jobs.append(backend.run(circuit, shots=N))

results = []
for job in jobs:
    results.append(job.result())

Önkoşullar

  • Etkin aboneliği olan bir Azure hesabı. Azure hesabınız yoksa ücretsiz kaydolun ve kullandıkça öde aboneliğine kaydolun.
  • Azure Quantum çalışma alanı. Daha fazla bilgi için bkz . Azure Quantum çalışma alanı oluşturma.

Çalışma alanınızda yeni bir not defteri oluşturma

  1. Azure portalında oturum açın ve önceki adımda oluşturduğunuz çalışma alanını seçin.
  2. Sol dikey pencerede Not Defterleri'ni seçin.
  3. Not Defterlerim'e ve Yeni Ekle'ye tıklayın.
  4. Dosya için Qiskit.ipynb gibi bir ad yazın ve Dosya oluştur'a tıklayın.

Yeni not defteriniz açıldığında, aboneliğinize ve çalışma alanı bilgilerinize göre ilk hücrenin kodunu otomatik olarak oluşturur.

from azure.quantum import Workspace
workspace = Workspace ( 
    resource_id = "", # Add your resource_id 
    location = ""  # Add your workspace location (for example, "westus") 
)

Not

Aksi belirtilmediği sürece, derleme sorunlarını önlemek için her hücreyi oluştururken sırayla çalıştırmanız gerekir.

Kodu çalıştırmak için hücrenin solundaki üçgen "oynat" simgesine tıklayın.

Gerekli içeri aktarmaları yükleme

İlk olarak, bazı ek modülleri içeri aktarmanız gerekir.

+ Kod'a tıklayarak yeni bir hücre ekleyin ve aşağıdaki kodu ekleyin ve çalıştırın:

from qiskit import QuantumCircuit
from qiskit.visualization import plot_histogram
from azure.quantum.qiskit import AzureQuantumProvider

Azure Quantum hizmetine Bağlan

Ardından, Azure Quantum çalışma alanınıza bağlanmak için önceki hücredeki nesneyi kullanarak Workspace bir AzureQuantumProvider nesne oluşturun. Aşağıdaki koda sahip yeni bir hücre ekleyin:

provider = AzureQuantumProvider(workspace)

Basit bir bağlantı hattı tanımlama

Yeni bir hücrede bir circuit nesne oluşturun. Bu örnek basit bir kuantum rastgele bit oluşturucudur. Bağlantı hattını tanımlamak ve görüntülemek için aşağıdaki kodu ekleyin:

# Create a Quantum Circuit acting on the q register
circuit = QuantumCircuit(3, 3)
circuit.name = "Qiskit Sample - 3-qubit GHZ circuit"
circuit.h(0)
circuit.cx(0, 1)
circuit.cx(1, 2)
circuit.measure([0, 1, 2], [0, 1, 2])

# Print out the circuit
circuit.draw()
     ┌───┐          ┌─┐      
q_0: ┤ H ├──■───────┤M├──────
     └───┘┌─┴─┐     └╥┘┌─┐   
q_1: ─────┤ X ├──■───╫─┤M├───
          └───┘┌─┴─┐ ║ └╥┘┌─┐
q_2: ──────────┤ X ├─╫──╫─┤M├
               └───┘ ║  ║ └╥┘
c: 3/════════════════╩══╩══╩═
                     0  1  2 

Tümünü listele targets

Artık çalışma alanınızda kullanılabilen tüm kuantum bilişimini targetsveya arka uçlarını görüntüleyebilirsiniz. Yeni bir hücre ekleyin ve aşağıdaki satırı çalıştırın:

print("This workspace's targets:")
for backend in provider.backends():
    print("- " + backend.name())
This workspace's targets:
- ionq.qpu
- ionq.simulator
- ionq.qpu.aria-1
- microsoft.estimator
- quantinuum.qpu.h1-1
- quantinuum.sim.h1-1sc
- quantinuum.sim.h1-1e
- rigetti.sim.qvm
- rigetti.qpu.ankaa-2

Programınızı çalıştırmak için bir target seçin

Kodunuzu gerçek kuantum donanımında çalıştırmadan önce denetlemek için IonQ kuantum simülatörünü ionq.simulatorkullanabilirsiniz.

Yeni bir hücre ekleyin ve IonQ kuantum simülatörünü targettemsil eden bir nesne oluşturun:

# Get IonQ quantum simulator target:
simulator_backend = provider.get_backend("ionq.simulator")

IonQ simülatöründe çalıştırma

Bağlantı hattınızı simülatörde çalıştırmak için aşağıdaki kodu ekleyin. Bu örnek, işinizi göndermek için yöntemini target kullanır run ve ardından iş durumunu izler.

# Submit the circuit to run on Azure Quantum
job = simulator_backend.run(circuit, shots=100)
job_id = job.id()
print("Job id", job_id)

İş başarıyla çalıştırıldığında, iş sonuçlarını alın ve bunları görüntüleyin:

# Get the job results:
result = job.result()
print(result)
Result(backend_name='ionq.simulator', backend_version='1', qobj_id='Qiskit Sample - 3-qubit GHZ circuit', job_id='7d909574-98d4-11ec-b382-00155d957f5d', success=True, results=[ExperimentResult(shots=100, success=True, meas_level=2, data=ExperimentResultData(counts=defaultdict(<class 'int'>, {'000': 50, '111': 50}), probabilities=defaultdict(<class 'int'>, {'000': 0.5, '111': 0.5})), header=QobjExperimentHeader(meas_map='[0, 1, 2]', name='Qiskit Sample - 3-qubit GHZ circuit', num_qubits='3', qiskit='True'))])

Bu result tür Qiskit paketine özgü bir nesne olduğundan, sonuçları görselleştirmek için Qiskit'leri result.get_counts kullanabilirsiniz plot_histogram . Tüm olası bit dizesi etiketlerinin temsili olduğundan emin olmak için, bunları öğesine countsekleyin.

counts = {format(n, "03b"): 0 for n in range(8)}
counts.update(result.get_counts(circuit))
print(counts)
plot_histogram(counts)
{'000': 50, '001': 0, '010': 0, '011': 0, '100': 0, '101': 0, '110': 0, '111': 50}

IonQ Simulator'da Qiskit bağlantı hattı sonucu

İş maliyetini tahmin

Bir işi gerçek kuantum donanımında veya kuantum işleme biriminde (QPU) çalıştırmadan önce, çalıştırmanın ne kadar maliyeti olduğunu tahmin edebilirsiniz.

İlk olarak, kullanılabilir sağlayıcıların listesini yeniden alın:

print("This workspace's targets:")
for backend in provider.backends():
    print("- " + backend.name())
This workspace's targets:
- ionq.qpu
- ionq.simulator
- ionq.qpu.aria-1
- microsoft.estimator
- quantinuum.qpu.h1-1
- quantinuum.sim.h1-1sc
- quantinuum.sim.h1-1e
- rigetti.sim.qvm
- rigetti.qpu.ankaa-2

Ardından, IonQ kuantum bilgisayarını temsil eden bir nesne oluşturun:

qpu_backend = provider.get_backend("ionq.qpu")

QPU'da bir işi çalıştırmanın maliyetini tahmin etmek için yöntemini targetkullanarak estimate_cost yeni bir hücre ekleyin ve çalıştırın:

cost = qpu_backend.estimate_cost(circuit, shots=100)

print(f"Estimated cost: {cost.estimated_total}")

Bu, tahmini maliyeti ABD Doları cinsinden görüntüler.

En güncel fiyatlandırma ayrıntıları için IonQ Fiyatlandırması'na bakın veya çalışma alanınızı bulun ve çalışma alanınızın Sağlayıcılar dikey penceresinde fiyatlandırma seçeneklerini görüntüleyin.

IonQ QPU üzerinde çalıştırma

IonQ simülatöründe işinizi başarıyla çalıştırdıktan ve QPU maliyetini tahmin ettikten sonra, bağlantı hattınızı donanım üzerinde çalıştırmanın zamanı geldi.

Not

QPU'da bir bağlantı hattını çalıştırmak için gereken süre, geçerli kuyruk sürelerine bağlı olarak değişir. Çalışma alanınızın Sağlayıcılar dikey penceresini seçerek için target ortalama kuyruk süresini görüntüleyebilirsiniz.

İşinizi run göndermek ve izlemek için API Validator ile daha önce kullandığınız yöntem ve işlemleri kullanın:

# Submit the circuit to run on Azure Quantum
job = qpu_backend.run(circuit, shots=1024)
job_id = job.id()
print("Job id", job_id)

İş bittiğinde, iş sonuçlarını önceki gibi alın ve bir grafikte görüntüleyin:

result = job.result()
print(result)
counts = {format(n, "03b"): 0 for n in range(8)}
counts.update(result.get_counts(circuit))
print(counts)
plot_histogram(counts)
Job id 910b5ac8-98cd-11ec-b3ba-00155d5528cf
Job Status: job has successfully run
Result(backend_name='ionq.simulator', backend_version='1', qobj_id='Qiskit Sample - 3-qubit GHZ circuit', job_id='Job id 54e8c740-98d9-11ec-b382-00155d957f5d', success=True, results=[ExperimentResult(shots=1024, success=True, meas_level=2, data=ExperimentResultData(counts={'0': 505, '1': 6, '2': 1, '3': 1, '4': 1, '5': 10, '6': 11, '7': 488}, probabilities={'0': 0.4932, '1': 0.0059, '2': 0.001, '3': 0.001, '4': 0.001, '5': 0.0098, '6': 0.0117, '7': 0.4766}), header=QobjExperimentHeader(name='Qiskit Sample - 3-qubit GHZ circuit', num_qubits='3', qiskit='True'))])
{'000': 505, '001': 6, '010': 1, '011': 1, '100': 1, '101': 10, '110': 11, '111': 488}

IonQ QPU üzerinde Qiskit bağlantı hattı sonucu

Önemli

Tek bir işte birden çok bağlantı hattının gönderilmesi şu anda desteklenmemektedir. Geçici bir çözüm olarak, her bağlantı hattını zaman uyumsuz olarak göndermek için yöntemini çağırabilir backend.run ve ardından her işin sonuçlarını getirebilirsiniz. Örneğin:

jobs = []
for circuit in circuits:
    jobs.append(backend.run(circuit, shots=N))

results = []
for job in jobs:
    results.append(job.result())

Sonraki adımlar