Hızlı Başlangıç: Qiskit ile bağlantı hattı gönderme Azure Quantum

Qiskit kuantum azure-quantum devrelerini IonQ veya Honeywell kuantum bilgi işlem hedefine göndermek için paketin nasıl Python Azure Quantum öğrenin. Daha fazla bilgi için bkz. Kuantum devreleri.

Önkoşullar

  • Bu hizmetle Azure Quantum için bir Azure aboneliğine ihtiyacınız vardır. Azure aboneliğiniz yoksa ücretsiz bir hesap oluşturun.
  • Bu senaryoda Azure Quantum sağlayıcı honeywell veya IonQ (ya da her ikisi) için bir çalışma alanı oluşturun ve etkinleştirin. Daha fazla bilgi için bkz. Çalışma alanı Azure Quantum oluşturma.

azure-quantum Python paketini yükleme

Python paketi, Azure Quantum çalışma alanına bağlanmak ve azure-quantum IonQ ve Honeywell gibi kuantum işlem hedeflerine kuantum devreleri göndermeye yönelik gerekli işlevleri içerir.

  1. Henüz yüklememiş olması durumunda Python 3.6 veya sonraki bir sürümü yükleyin.

  2. PIP'i yükleyin ve 19.2 veya daha yüksek bir sürüme sahip olduğundan emin olun.

    İsteğe bağlı olarak, Miniconda veya Anaconda kullanıyorsanız, environment.yml dosyasını indirip aşağıdakini çalıştırarak yeni bir ortam oluşturun:

    conda env create -f environment.yml
    

    Bu, aşağıdakilerle etkinleştiren yeni bir conda ortamı oluşturur:

    conda activate azurequantum
    
  3. pip kullanarak azure-quantum paketi yükleyin. Bayrağını --upgrade kullanarak en son sürümü edin emin olun.

    pip install --upgrade azure-quantum[qiskit]
    
  4. sık kullanılan kod düzenleyicisini veya VS Code , Jupyter veya iPythongibi etkileşimli Python aracını başlatma.

Gerekli içeri aktarmaları yükleme

İlk olarak, gerekli içeri aktarmaları yüklemek için aşağıdaki hücreyi çalıştırın:

from qiskit import QuantumCircuit
from qiskit.visualization import plot_histogram
from qiskit.tools.monitor import job_monitor
from azure.quantum.qiskit import AzureQuantumProvider

Bağlan hizmetine Azure Quantum

Azure Quantum hizmetine bağlanmak için, programınız kaynak kimliğine ve çalışma alanınıza Azure Quantum gerekir. Azure hesabınızla oturum https://portal.azure.com açın, çalışma alanınıza Azure Quantum ve üst bilgiden değerleri kopyalayın.

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

Çalışma alanınıza bağlanan bir AzureQuantumProvider nesne oluşturmak için değerleri aşağıdaki provider oluşturucuya Azure Quantum yapıştırın.

provider = AzureQuantumProvider(
  resource_id="",
  location=""
)

Tüm arka uçları listele

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

print([backend.name() for backend in provider.backends()])
['ionq.qpu', 'ionq.simulator', 'honeywell.hqs-lt-s1', 'honeywell.hqs-lt-s1-apival', 'honeywell.hqs-lt-s2', 'honeywell.hqs-lt-s2-apival', 'honeywell.hqs-lt-s1-sim']

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 

Hızlı bir şekilde sonuç almak için provider.get_backend Backend IonQ Simulator arka ucuna bağlanmak üzere bir nesnesi oluşturmak için kullanın:

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

Artık programı Azure Quantum hizmeti aracılığıyla çalıştırabilirsiniz ve sonucu eldeabilirsiniz. Aşağıdaki hücre, 100 çekimle devreyi çalıştıran bir iş göndermenizi sağlar:

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

İş ilerleme durumunu izlemek için daha önce içe aktarılan Qiskit'i kullanarak job_monitor işin durumunu ' izleyebilirsiniz. İş tamamlanıncaya kadar bu çağrının engellenmiş olduğunu unutmayın:

job_monitor(job)
Job Status: job has successfully run

İş tamamlandıktan sonra sonuçları geri almak için şu işlemi çalıştırın:

result = job.result()

Bu bir nesnesi qiskit.Result döndürür.

type(result)
qiskit.result.result.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'))])

Bu Qiskit paketinde yerel bir nesne olduğundan, sonuçları görselleştirmek için Qiskit ' ve result.get_counts plot_histogram kullanabilirsiniz. Tüm olası bitstring etiketlerinin temsil olduğundan emin olmak için bunları 'ye counts ekleyin.

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

IonQ QPU üzerinde çalıştırma

Gerçek donanıma (Kuantum İşlemci birimi (QPU) bağlanmak için, yöntemine hedefin "ionq.qpu" adını provider.get_backend girin:

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

Bağlantı hattında çalıştırmak için bağlantı Azure Quantum.

Not

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

Daha önce olduğu gibi, job_monitor iş durumunu izlemek ve sonuçları plot_histogram çizime almak için kullanın.

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

# Monitor job progress and wait until complete:
job_monitor(qpu_job)

# Get the job results (this method also waits for the Job to complete):
result = qpu_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

azure-quantum Python paketini yükleme

Python paketi, Azure Quantum çalışma alanına bağlanmak ve azure-quantum IonQ ve Honeywell gibi kuantum işlem hedeflerine kuantum devreleri göndermeye yönelik gerekli işlevleri içerir.

  1. Henüz yüklememiş olması durumunda Python 3.6 veya sonraki bir sürümü yükleyin.

  2. PIP'i yükleyin ve 19.2 veya daha yüksek bir sürüme sahip olduğundan emin olun.

    İsteğe bağlı olarak, Miniconda veya Anaconda kullanıyorsanız, environment.yml dosyasını indirip aşağıdakini çalıştırarak yeni bir ortam oluşturun:

    conda env create -f environment.yml
    

    Bu, aşağıdakilerle etkinleştiren yeni bir conda ortamı oluşturur:

    conda activate azurequantum
    
  3. pip kullanarak azure-quantum paketi yükleyin. Bayrağını --upgrade kullanarak en son sürümü edin emin olun.

    pip install --upgrade azure-quantum[qiskit]
    
  4. sık kullanılan kod düzenleyicisini veya VS Code , Jupyter veya iPythongibi etkileşimli Python aracını başlatma.

Gerekli içeri aktarmaları yükleme

İlk olarak, gerekli içeri aktarmaları yüklemek için aşağıdaki hücreyi çalıştırın:

from qiskit import QuantumCircuit
from qiskit.visualization import plot_histogram
from qiskit.tools.monitor import job_monitor
from azure.quantum.qiskit import AzureQuantumProvider

Bağlan hizmetine Azure Quantum

Azure Quantum hizmetine bağlanmak için, programınız kaynak kimliğine ve çalışma alanınıza Azure Quantum gerekir. Azure hesabınızla oturum https://portal.azure.com açın, çalışma alanınıza Azure Quantum ve üst bilgiden değerleri kopyalayın.

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

Çalışma alanınıza bağlanan bir AzureQuantumProvider nesne oluşturmak için değerleri aşağıdaki provider oluşturucuya Azure Quantum yapıştırın.

provider = AzureQuantumProvider(
  resource_id="",
  location=""
)

Tüm arka uçları listele

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

print([backend.name() for backend in provider.backends()])
    ['ionq.simulator', 'ionq.qpu', 'honeywell.hqs-lt-s1', 'honeywell.hqs-lt-s1-apival', 'honeywell.hqs-lt-s1-sim']

API doğrulayıcıda çalıştırma

Not

Honeywell API doğrulayıcı arka ucu ölçümde her zaman 0'dır.

# Get Honeywell's API validator backend:
apival_backend = provider.get_backend("honeywell.hqs-lt-s1-apival")
# 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 
# Submit the circuit to run on Azure Quantum
job = apival_backend.run(circuit, count=1024)
job_id = job.id()
print("Job id", job_id)

# Monitor job progress and wait until complete:
job_monitor(job)

# Get the job results (this method also 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='honeywell.hqs-lt-s1-apival', 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={'000': 1024}, probabilities={'000': 1.0}), header=QobjExperimentHeader(name='Qiskit Sample - 3-qubit GHZ circuit'))])
{'000': 1024, '001': 0, '010': 0, '011': 0, '100': 0, '101': 0, '110': 0, '111': 0}

Honeywell API doğrulayıcıda Qiskit bağlantı hattı sonucu

Honeywell QPU üzerinde çalıştırma

API doğrulayıcıda başarıyla çalıştırdıktan sonra, işini Honeywell'in donanım işlemcilerinden (Kuantum İşlemci Birimi (QPU) biri üzerinde çalıştırabilirsiniz.

Not

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

# Get Honeywell's QPU backend:
qpu_backend = provider.get_backend("honeywell.hqs-lt-s1")
# Submit the circuit to run on Azure Quantum
job = qpu_backend.run(circuit, count=500)
job_id = job.id()
print("Job id", job_id)

# Monitor job progress and wait until complete:
job_monitor(job)
Job id 00000000-0000-0000-0000-000000000000
Job Status: job has successfully run
# Get the job results (this method also 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)
Result(backend_name='honeywell.hqs-lt-s1-apival', 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={'011': 16, '010': 5, '001': 1, '000': 500, '111': 471, '101': 6, '100': 17, '110': 8}, probabilities={'011': 0.015625, '010': 0.0048828125, '001': 0.0009765625, '000': 0.48828125, '111': 0.4599609375, '101': 0.005859375, '100': 0.0166015625, '110': 0.0078125}), header=QobjExperimentHeader(name='Qiskit Sample - 3-qubit GHZ circuit'))])
{'000': 500, '001': 1, '010': 5, '011': 16, '100': 17, '101': 6, '110': 8, '111': 471}

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