QDK ile Qiskit programlarını Azure Quantum'a gönderme

Microsoft Quantum Geliştirme Seti (QDK) ile Azure Quantum'da targets çalıştırılacak Qiskit programlarını gönderebilirsiniz. Qdk'nin yerleşik seyrek simülatörü ile yerel makinenizde Qiskit programları da çalıştırabilirsiniz. QDK, Qiskit'in hem sürüm 1'i hem de 2. sürümünü destekler.

Bu makalede, Visual Studio Code'da (VS Code) bir Jupyter Notebook'tan QDK Python kitaplığıyla Qiskit programlarını çalıştırmayı öğreneceksiniz.

Not

Kuantum bilgisayarda targetçalıştırılacak bir iş göndermeden önce kuantum programınızı bir simülatörde target çalıştırmak en iyi yöntemdir. Her Azure Quantum sağlayıcısı bir veya daha fazla ücretsiz simülatör targetssunar.

Önkoşullar

Qiskit işlerini Azure Quantum'a göndermek ve yerel seyrek simülatörde Qiskit programlarını çalıştırmak için aşağıdakilere sahip olmanız gerekir:

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

  • ve Pip'in yüklü olduğu yerel Python bir ortam (sürüm 3.10 veya üzeriPython).

  • Visual Studio Code (VS Code) ile Python ve Jupyter uzantılarının yüklü olduğu.

  • qdk Python kitaplığı, azure ve qiskit ekleri ile ipykernel paketi ile birlikte.

    pip install --upgrade "qdk[azure,qiskit]" ipykernel
    

Quantum çalışma alanınızda Azure Quantum'a target iş gönderme

Azure Quantum targetüzerinde çalıştırılacak bir Qiskit programı göndermek için şu adımları izleyin:

  1. VS Code'da Görünüm menüsünü açın ve Komut Paleti'ni seçin.

  2. Oluştur: Yeni Jupyter Not Defteri'ni girin ve seçin. Boş bir Jupyter Notebook dosyası yeni bir sekmede açılır.

  3. Not defterinizin ilk hücresine bir Qiskit bağlantı hattı yazın. Örneğin, aşağıdaki bağlantı hattını kullanın:

    from qiskit import QuantumCircuit
    
    # Create a Quantum circuit that acts 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()
    
  4. Azure Quantum çalışma alanınıza bağlanın.

    from qdk.azure import Workspace 
    
    workspace = Workspace(resource_id="") # Add the resource ID of your workspace
    
  5. Çalışma alanınızdan Qiskit programlarını çalıştırabilen sağlayıcıları alın ve her sağlayıcı için kullanılabilir targets olanını yazdırın.

    from qdk.azure.qiskit import AzureQuantumProvider
    
    provider = AzureQuantumProvider(workspace)
    
    for backend in provider.backends():
        print("- " + backend.name)
    
  6. İşinizi göndermek istediğiniz Azure Quantum arka ucunu target ile ayarlayın. Örneğin, aşağıdaki kod Rigetti simülatöründe programınızı çalıştırmak için bir arka uç ayarlar:

    backend = provider.get_backend('rigetti.sim.qvm')
    
  7. Programınızı Azure Quantum'da target çalıştırın ve sonuçları alın. Aşağıdaki kod, programınızı belirtilen target üzerinde 1.000 kez çalıştırır ve sonuçları depolar:

    job = backend.run(circuit, shots=1000)
    
    result = job.result()
    print(result)
    

İş sonuçlarınızı inceleme

result nesnesi, her bir çekimin ölçüm sonucu ve her olası ölçümün toplam sayıları ve olasılıkları gibi iş sonuçlarınız hakkında bilgiler içerir.

Ölçüm sonuçlarının histogramını oluşturmak için devrenizi get_counts yöntemine aktarın ve ardından sayımı plot_histogram modülünden qiskit.visualization işlevine aktarın. Aşağıdaki kod, nesneyi tüm olası ölçüm sonuçlarını gösterecek şekilde yeniden biçimlendirmektedir counts :

from qiskit.visualization import plot_histogram

print("Job ID:", job.job_id())

counts = result.get_counts(circuit)
print('Counts:', counts)

# Reformat counts to include all possible measurement outcomes, even those with zero counts
full_counts = {format(n, "03b"): 0 for n in range(8)}
full_counts.update(counts)

plot_histogram(full_counts)

Not

Qiskit işlevini plot_histogram kullanmak için Matplotlib'i yüklemeniz gerekir.

pip install matplotlib

Kubit kaybı olan programlar için Qiskit iş sonuçları

Bazı kuantum donanım türleri bir program çalıştırması sırasında kubit kaybıyla karşılaşabilir. Qiskit programı için bir çekim sırasında herhangi bir noktada kubit kaybı oluşursa, bu çekim Azure Quantum iş sonuçlarından kaldırılır. Örneğin, kubit kaybı 200 çekimden 10'unda gerçekleşirse, iş sonuçları yalnızca 190 toplam ölçüm sayısına sahiptir.

Kubit kaybının oluştuğu çekimler de dahil olmak üzere tüm çekimler için ham sonuçlar, results nesnesinde hala mevcut. Aşağıdaki kod her iki sonuç kümesini de alır:

# Get results only for shots without qubit loss
print('Counts:', result.results[0].data.counts)
print('Probabilities:', result.results[0].data.probabilities)
print('Memory:', result.results[0].data.memory)

# Get the raw total shot results
print('Raw counts:', result.results[0].data.raw_counts)
print('Raw probabilities:', result.results[0].data.raw_probabilities)
print('Raw memory:', result.results[0].data.raw_memory)

Kubit kaybı olmayan veya targets işler için varsayılan sonuçlar ve ham sonuçlar aynıdır.

Not

Qiskit iş sonuçları için memory özniteliği, her çekime ait ölçüm sonuçlarının bir listesidir.

QDK seyrek simülatöründe bir işi çalıştırın

QDK, Azure Quantum'a iş göndermek yerine yerel makinenizde Qiskit programlarını çalıştırmak için kullanabileceğiniz yerleşik bir seyrek simülatör içerir. Seyrek simülatörde bir Qiskit programı çalıştırmak için, QSharpBackend kullanarak bir backend nesnesi oluşturun.

from qsharp.interop.qiskit import QSharpBackend

backend = QSharpBackend()
job = backend.run(circuit)
counts = job.result().get_counts()
print(counts)

Sonraki adımlar