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.
Henüz yüklememiş olması durumunda Python 3.6 veya sonraki bir sürümü yükleyin.
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.ymlBu, aşağıdakilerle etkinleştiren yeni bir conda ortamı oluşturur:
conda activate azurequantumpip kullanarak
azure-quantumpaketi yükleyin. Bayrağını--upgradekullanarak en son sürümü edin emin olun.pip install --upgrade azure-quantum[qiskit]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.

Ç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 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}

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.
Henüz yüklememiş olması durumunda Python 3.6 veya sonraki bir sürümü yükleyin.
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.ymlBu, aşağıdakilerle etkinleştiren yeni bir conda ortamı oluşturur:
conda activate azurequantumpip kullanarak
azure-quantumpaketi yükleyin. Bayrağını--upgradekullanarak en son sürümü edin emin olun.pip install --upgrade azure-quantum[qiskit]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.

Ç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 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}
