Qiskit, PennyLane, Azure Quantum, Q# ve QDK programlarını Python’e göndermek için Microsoft Quantum Development Kit (OpenQASM) Cirq paketini kullanın.
Bu makalede, desteklenen her kuantum dili veya çerçevesi için iş gönderme örnekleri sağlanır.
OpenQASM kodu gerektirmeyen etkileşimli bir Python veya Q# iş akışı için, QDK için VS Code uzantısıyla iş gönderme bölümüne bakın.
Prerequisites
Aktif bir aboneliğe sahip bir Azure hesabı.
Çalışma Azure Quantum alanı. Bir çalışma alanı oluşturmak için bkz. Çalışma alanı oluşturmaAzure Quantum.
Python 3.10 veya daha yeni sürüm.
Jupyter not defteri kullanıyorsanız, VS Code gibi bir Jupyter ortamı ve paketi kullanın.
quantum'yi uzantısıyla yükleyin.
az extension add --upgrade --name quantum
qdk ve Python ekleriyle jupyterazure paketinin en son sürümünü yükleyin.
pip install --upgrade "qdk[azure,jupyter]"
Bir Qiskit veya qiskit programı göndermek istiyorsanız, cirq ve Cirq eklentilerini yükleyin.
pip install --upgrade "qdk[qiskit,cirq]"
Çalışma alanınıza Azure Quantum bağlanma
Warning
11 Ocak 2027'den itibaren, Azure Quantum bir Quantum çalışma alanında kullanıcıların iş sonuçlarına erişmek için Quantum Çalışma Alanı Veri Okuyucusu veya Kuantum Çalışma Alanı Veri Katkıda Bulunanı rolüne sahip olması gerekir. İş göndermek için Quantum Çalışma Alanı Veri Katkıda Bulunanı rolüne sahip olmanız gerekir. İş akışlarınızda Azure Quantum kesinti yaşanmasını önlemek için bu rolleri son tarihten önce uygun kullanıcılara atayın. Daha fazla bilgi için bkz. Çalışma alanında kullanıcılar için veri erişim rolleri atama.
bir iş göndermeden önce bir Azure Quantum çalışma alanına bağlanmanız gerekir.
qdk.azure modülü, Workspace çalışma alanlarına bağlanmak için Azure Quantum nesnesini sağlar. Çalışma alanınıza bağlanmak için aşağıdaki adımları izleyin.
Azure CLI ile oturum açma
Henüz açmadıysanız, Jupyter not defterini açmadan önce terminalden Azure oturum açın.
az login
Terminal üzerinden oturum açmazsanız, Python aracılığıyla bir Quantum çalışma alanına her bağlandığınızda kimlik doğrulaması yapmanız gerekir. Hesabınızın birden çok aboneliğe erişimi varsa, çalışma alanınızı Azure Quantum içeren aboneliği ayarlayın.
az account set --subscription <subscription-id>
Oturumun süresi dolduğunda veya farklı bir Azure hesabı kullanmak istediğinizde yeniden çalıştırınaz login.
Çalışma alanınızın kaynak kimliğini alma
-
Azure portalınaoturum açın.
- İşinizi göndermek istediğiniz Quantum çalışma alanına gidin.
-
Genel Bakış sayfasında Kaynak Kimliğini bulun ve kopyalayın.
Çalışma alanına bağlanma
Quantum çalışma alanınıza bağlanmak için kopyaladığınız kaynak kimliğine sahip bir Workspace nesne oluşturun.
from qdk.azure import Workspace
workspace = Workspace(resource_id="") # Add your resource ID
Bağlantıyı doğrulayın ve çalışma alanında kullanılabilen targets öğesini görüntüleyin.
for target in workspace.get_targets():
print(target.name)
Diğer bağlantı ve kimlik doğrulama seçenekleri için bkz. Çalışma alanınıza Azure Quantum bağlanma.
Note
Aşağıdaki örnekler işleri simülatöre targets gönderir. Çalışma alanınızda kullanılabilen targets, yapılandırdığınız sağlayıcılara bağlıdır.
Programınızı hazırlama ve gönderme
Kuantum diliniz veya çerçeveniz için sekmeyi seçin.
qdk.qsharp modülünü, Q# kodunu tanımlamak veya yüklemek, bir giriş noktasını QIR olarak derlemek ve Azure Quantum öğesini bir targetQIR öğesine göndermek için kullanın.
Q# programını tanımlayın ve derleyin
target
Q# öğesinin desteklediği bir targetQIR profili ile Azure Quantum öğesini başlatın.
from qdk import qsharp, TargetProfile
qsharp.init(target_profile=TargetProfile.Base)
QIR
target profilleri hakkında daha fazla bilgi için, QDKAzure QuantumQIR profilleri için target bölümüne bakın.
bir Q# işlem tanımlayın. Örneğin, aşağıdaki RandomBit işlemi kullanın.
qsharp.eval("""
operation RandomBit() : Result {
use q = Qubit();
H(q);
return MResetZ(q);
}
""")
İşlemi yerel simülatörde test edin.
print(qsharp.run("RandomBit()", shots=10))
İşlemi QIR olarak derleyin.
from qdk.qsharp import compile
program = compile("RandomBit()")
Q# İşi gönder
Çalışma alanınızdan uyumlu target seçin.
target = workspace.get_targets("rigetti.sim.qvm")
Derlenmiş programı gönderin.
job = target.submit(program, "qsharp-job", shots=100)
print("Job ID:", job.id)
İşin tamamlanmasını bekleyin ve sonuçlarını alın.
job.wait_until_completed()
print("Status:", job.details.status)
results = job.get_results()
print(results)
qdk.openqasm modülünü, QIR 3 kaynak kodunu OpenQASM'ye derlemek için kullanın ve ardından Azure Quantum'ü bir targetQIR'e gönderin.
OpenQASM programını tanımlayın ve derleyin
Bir OpenQASM devreyi Python dize olarak tanımlayın.
qasm_source = """
OPENQASM 3.0;
include "stdgates.inc";
bit[2] c;
qubit[2] q;
h q[0];
cx q[0], q[1];
c = measure q;
"""
Programı QIR içine derleyin.
from qdk.openqasm import compile
program = compile(qasm_source)
OpenQASM İşi gönder
Derlenmiş programı kabul eden bir target seçin.
target = workspace.get_targets("ionq.simulator")
Derlenmiş programı gönderin.
job = target.submit(program, "openqasm-job", shots=100)
print("Job ID:", job.id)
İşin tamamlanmasını bekleyin ve sonuçlarını alın.
job.wait_until_completed()
print("Status:", job.details.status)
results = job.get_results()
print(results)
Parametreli OpenQASM programlar için, bir iş göndermeden önce giriş değerlerini bağlayın.
OpenQASM içindeki QDK hakkında daha fazla bilgi için, bkz. OpenQASM içinde QDK programları geliştirme.
Bir AzureQuantumProvider sağlayıcısına Qiskit işleri göndermek için Azure Quantum modülündeki qdk.azure öğesini kullanın. Sağlayıcı nesnesi, uyumlu Azure Quantumtargets öğelerini listeler ve Qiskit işleri ve sonuçlarını döndürür.
Devre Qiskit oluştur
from qiskit import QuantumCircuit
circuit = QuantumCircuit(3, 3)
circuit.h(0)
circuit.cx(0, 1)
circuit.cx(1, 2)
circuit.measure([0, 1, 2], [0, 1, 2])
Qiskit İşi gönder
Çalışma alanından bir Azure Quantum sağlayıcı nesnesi oluşturun.
from qdk.azure.qiskit import AzureQuantumProvider
provider = AzureQuantumProvider(workspace)
Devreleri kabul Qiskit eden arka uçları listeleyin.
for backend in provider.backends():
print(backend.name)
Bir arka uç seçin ve devreyi gönderin.
backend = provider.get_backend("rigetti.sim.qvm")
job = backend.run(circuit, shots=100)
print("Job ID:", job.job_id())
print("Status:", job.status())
İşin tamamlanmasını bekleyin ve sonuçları alın Qiskit .
result = job.result()
counts = result.get_counts(circuit)
print(counts)
Qiskit bağdaştırıcı, Azure Quantum giriş biçimini işler ve sağlayıcı yanıtını Qiskit sonucuna dönüştürür.
Qiskit kubit kaybı olan programlar için iş sonuçları
Bir program çalışırken bazı kuantum donanımları 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 çıkarılır. Örneğin, kubit kaybı 200 çekimden 10'unda gerçekleşirse, iş sonuçları toplam 190 ö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.
Note
Qiskit iş sonuçları için memory özniteliği, her çekim için ölçüm sonucunu içeren bir listedir.
Bir AzureQuantumService sağlayıcısına Cirq işleri göndermek için Azure Quantum modülündeki qdk.azure öğesini kullanın. Hizmet nesnesi uyumlu Azure Quantumtargets listeler ve Cirq-yerel veya sağlayıcıya özgü sonuçlar döndürür.
Devre Cirq oluştur
import cirq
q0, q1 = cirq.LineQubit.range(2)
circuit = cirq.Circuit(
cirq.H(q0),
cirq.CX(q0, q1),
cirq.measure(q0, q1, key="result"),
)
Cirq İşi gönder
Azure Quantum Hizmet nesnesini oluşturun.
from qdk.azure.cirq import AzureQuantumService
service = AzureQuantumService(workspace)
Cirq devrelerini kabul eden targets’leri listeleyin.
for target in service.targets():
print(target.name)
Zaman uyumsuz bir iş oluşturun.
job = service.create_job(
program=circuit,
repetitions=100,
target="ionq.simulator",
)
print("Status:", job.status())
İşin tamamlanmasını bekleyin ve sonuçlarını alın.
result = job.results()
print(result)
Sonuçların biçimi sağlayıcıya ve targetöğesine bağlıdır. Bazı sağlayıcı sonuç nesneleri bir cirq.Result nesneye dönüştürülebilir.
Bir kuantum PennyLane düğümünü OpenQASM öğesine dönüştürün, QIR öğesini OpenQASM olarak derleyin ve Azure Quantum öğesini bir targetQIR öğesine gönderin.
Devre PennyLane oluştur
Aşağıdaki bağlantı hattı parametreli bir devredir. Geçidin RY etkisi açıya thetabağlıdır.
import pennylane as qml
device = qml.device("default.qubit", wires=2)
@qml.qnode(device)
def circuit(theta):
qml.Hadamard(wires=0)
qml.CNOT(wires=[0, 1])
qml.RY(theta, wires=1)
return qml.expval(qml.PauliZ(1))
Devreyi QIR olarak dönüştürün
Belirli bir parametre değeri için parametreli devreyi olarak OpenQASM dönüştürün.
theta = 0.3
qasm_source = qml.to_openqasm(circuit)(theta)
OpenQASM öğesini, uyumlu bir target profiliyle QIR olarak derleyin.
from qdk import TargetProfile
from qdk.openqasm import compile
program = compile(qasm_source, TargetProfile.Base)
PennyLane İşi gönder
Uyumlu target seçin ve QIR gönderin.
target = workspace.get_targets("rigetti.sim.qvm")
job = target.submit(program, "pennylane-job", shots=100)
print("Job ID:", job.id)
İşin tamamlanmasını bekleyin ve sonuçlarını alın.
job.wait_until_completed()
print("Status:", job.details.status)
results = job.get_results()
print(results)
Sonuçların biçimi sağlayıcıya ve targetöğesine bağlıdır.
Azure Quantumgönderilen PennyLane'den QIR kuantum düğümü sonuçlarını döndürmez.
İlgili içerik