() 패키지를 사용하여 , , , 및 프로그램을 에 제출합니다.
이 문서에서는 지원되는 각 양자 언어 또는 프레임워크에 대한 작업 제출 예제를 제공합니다.
OpenQASM 코드가 필요하지 않은 대화형 Python 또는 Q# 워크플로의 경우, QDK용 VS Code 확장을 사용하여 작업 제출하기를 참조하세요.
Prerequisites
활성 구독이 있는 Azure 계정.
Azure Quantum 작업 영역입니다. 작업 영역을 만들려면 작업 영역 만들기를 Azure Quantum 참조하세요.
Python 3.10 이상.
Jupyter Notebook을 사용하는 경우 VS Code용 Jupyter 확장 및 ipykernel 패키지와 같은 Jupyter 환경이 필요합니다.
확장을 사용하여 Azure CLI 설치합니다quantum.
az extension add --upgrade --name quantum
jupyter
azure 패키지의 최신 버전을 qdk 및 Python 추가 기능과 함께 설치합니다.
pip install --upgrade "qdk[azure,jupyter]"
Qiskit 또는 qiskit 프로그램을 제출하려면 cirq 및 Cirq 추가 기능을 설치하세요.
pip install --upgrade "qdk[qiskit,cirq]"
Azure Quantum 작업 영역에 연결
Warning
2027년 1월 11일부터 Azure Quantum Quantum 작업 영역 사용자가 작업 결과에 액세스하려면 Quantum Workspace Data Reader 또는 Quantum Workspace Data Contributor 역할이 필요합니다. 작업을 제출하려면 Quantum 작업 영역 데이터 기여자 역할이 필요합니다. 워크플로가 중단되는 것을 Azure Quantum 방지하려면 최종 기한 전에 해당 사용자에게 이러한 역할을 할당합니다. 자세한 내용은 작업 영역의 사용자에 대한 데이터 액세스 역할 할당을 참조하세요.
작업을 제출하기 전에 Azure Quantum 작업 영역에 연결되어 있어야 합니다.
qdk.azure 모듈은 Workspace 작업 영역에 연결하는 데 사용하는 Azure Quantum 개체를 제공합니다. 작업 영역에 연결하려면 다음 단계를 수행합니다.
Azure CLI 사용하여 로그인
아직 로그인하지 않은 경우 Jupyter Notebook을 열기 전에 터미널에서 Azure 로그인합니다.
az login
터미널에서 로그인하지 않으면 Python를 통해 Quantum 작업 영역에 연결할 때마다 인증해야 합니다. 계정이 여러 구독에 액세스할 수 있는 경우 Azure Quantum 작업 영역이 포함된 구독을 설정하세요.
az account set --subscription <subscription-id>
세션이 만료되거나 다른 Azure 계정을 사용하려는 경우 다시 실행 az login 합니다.
작업 영역의 리소스 ID 가져오기
-
Azure Portal에 로그인합니다.
- 작업을 제출하려는 Quantum 작업 영역으로 이동합니다.
-
개요 페이지에서 리소스 ID를 찾아 복사합니다.
작업 영역에 연결
Quantum 작업 영역에 연결하려면 복사한 리소스 ID를 사용하여 Workspace 개체를 만듭니다.
from qdk.azure import Workspace
workspace = Workspace(resource_id="") # Add your resource ID
연결을 확인하고 작업 영역에서 사용 가능한 targets을 확인합니다.
for target in workspace.get_targets():
print(target.name)
다른 연결 및 인증 옵션은 작업 영역에 연결을 참조하세요Azure Quantum.
메모
다음 예제에서는 시뮬레이터에 작업을 제출 합니다 targets. 작업 영역에서 사용할 수 있는 targets는 구성한 공급자에 따라 달라집니다.
프로그램 준비 및 제출
양자 언어 또는 프레임워크에 대한 탭을 선택합니다.
qdk.qsharp 모듈을 사용하여 Q# 코드를 정의하거나 로드하고, 진입점을 QIR로 컴파일한 다음, QIR를 Azure Quantumtarget에 제출합니다.
Q# 프로그램을 정의하고 컴파일합니다
target
Q#에서 지원하는 targetQIR 프로필로 Azure Quantum을 초기화합니다.
from qdk import qsharp, TargetProfile
qsharp.init(target_profile=TargetProfile.Base)
QIR
target 프로필에 대한 자세한 내용은 QDKAzure QuantumQIR의 프로필은 target을 참조하세요.
Q# 작업을 정의합니다. 예를 들어 다음 RandomBit 작업을 사용합니다.
qsharp.eval("""
operation RandomBit() : Result {
use q = Qubit();
H(q);
return MResetZ(q);
}
""")
로컬 시뮬레이터에서 작업을 테스트합니다.
print(qsharp.run("RandomBit()", shots=10))
작업을 QIR로 컴파일하십시오.
from qdk.qsharp import compile
program = compile("RandomBit()")
Q# 작업 제출
작업 영역에서 호환되는 target 파일을 선택합니다.
target = workspace.get_targets("rigetti.sim.qvm")
컴파일된 프로그램을 제출합니다.
job = target.submit(program, "qsharp-job", shots=100)
print("Job ID:", job.id)
작업이 완료되고 결과를 검색할 때까지 기다립니다.
job.wait_until_completed()
print("Status:", job.details.status)
results = job.get_results()
print(results)
qdk.openqasm 모듈을 사용하여 OpenQASM 3 소스 코드를 QIR(으)로 컴파일한 다음, QIR를 Azure Quantumtarget에 제출합니다.
OpenQASM 프로그램을 정의하고 컴파일합니다
회로를 OpenQASM 문자열로 정의합니다 Python .
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;
"""
으로 프로그램을 컴파일합니다 QIR.
from qdk.openqasm import compile
program = compile(qasm_source)
OpenQASM 작업 제출
컴파일된 target 프로그램을 수락하는 프로그램을 선택합니다.
target = workspace.get_targets("ionq.simulator")
컴파일된 프로그램을 제출합니다.
job = target.submit(program, "openqasm-job", shots=100)
print("Job ID:", job.id)
작업이 완료되고 결과를 검색할 때까지 기다립니다.
job.wait_until_completed()
print("Status:", job.details.status)
results = job.get_results()
print(results)
매개 변수가 OpenQASM 있는 프로그램의 경우 작업을 제출하기 전에 입력 값을 바인딩합니다.
QDK에서 OpenQASM에 대한 자세한 내용은 QDK에서 OpenQASM 프로그램 개발을 참조하세요.
Qiskit 모듈의 qdk.azure를 사용하여 Azure Quantum 작업을 AzureQuantumProvider 공급자에게 제출합니다. 공급자 개체는 호환되는 Azure Quantumtargets 개체를 나열하고 작업 및 결과를 반환합니다 Qiskit .
Qiskit 회로 만들기
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 작업 제출
Azure Quantum 작업 영역에서 공급자 개체를 만듭니다.
from qdk.azure.qiskit import AzureQuantumProvider
provider = AzureQuantumProvider(workspace)
회로를 허용하는 Qiskit 백 엔드를 나열합니다.
for backend in provider.backends():
print(backend.name)
백 엔드를 선택하고 회로를 제출합니다.
backend = provider.get_backend("rigetti.sim.qvm")
job = backend.run(circuit, shots=100)
print("Job ID:", job.job_id())
print("Status:", job.status())
작업이 완료될 때까지 기다린 다음 Qiskit 결과를 가져옵니다.
result = job.result()
counts = result.get_counts(circuit)
print(counts)
Qiskit 어댑터는 입력 형식을 Azure Quantum 처리하고 공급자 응답을 Qiskit 결과로 변환합니다.
Qiskit 큐비트 손실이 있는 프로그램에 대한 작업 결과
일부 양자 하드웨어는 프로그램이 실행 중일 때 큐비트 손실을 경험할 수 있습니다.
Qiskit 프로그램의 샷 수행 중 어느 시점에서든 큐비트 손실이 발생하면 해당 샷은 Azure Quantum 작업 결과에서 제거됩니다. 예를 들어 200개의 샷 중 10개에서 큐비트 손실이 발생하는 경우 작업 결과에는 총 측정 횟수가 190개입니다.
큐비트 손실이 발생한 샷을 포함하여 모든 샷에 대한 원본 결과는 results 개체에서 여전히 사용할 수 있습니다. 다음 코드는 두 결과 집합을 모두 가져옵니다.
# 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)
큐비트 손실이 없는 작업의 targets 경우 기본 결과와 원시 결과는 동일합니다.
메모
memory 작업 결과의 Qiskit 속성은 각 샷의 측정 결과 목록입니다.
Cirq 모듈의 qdk.azure를 사용하여 Azure Quantum 작업을 AzureQuantumService 공급자에게 제출합니다. 서비스 개체는 호환되는 Azure Quantumtargets를 나열하고 Cirq 네이티브 또는 공급자 네이티브 결과를 반환합니다.
Cirq 회로 만들기
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 작업 제출
서비스 개체를 Azure Quantum 만듭니다.
from qdk.azure.cirq import AzureQuantumService
service = AzureQuantumService(workspace)
targets 회로를 수용하는 Cirq를 나열합니다.
for target in service.targets():
print(target.name)
비동기 작업을 만듭니다.
job = service.create_job(
program=circuit,
repetitions=100,
target="ionq.simulator",
)
print("Status:", job.status())
작업이 완료되고 결과를 검색할 때까지 기다립니다.
result = job.results()
print(result)
결과 형식은 공급자 및 target에 따라 달라집니다. 일부 공급자 결과 개체는 cirq.Result 개체로 변환될 수 있습니다.
PennyLane 양자 노드를 OpenQASM(으)로 변환하고, OpenQASM를 QIR(으)로 컴파일하고, QIR를 Azure Quantumtarget에 제출합니다.
PennyLane 회로 만들기
다음 회로는 매개 변수가 있는 회로입니다. 게이트의 RY 효과는 각도 theta에 따라 달라집니다.
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))
회로를 다음으로 변환 QIR
매개 변수가 있는 회로를 OpenQASM 특정 매개 변수 값으로 변환합니다.
theta = 0.3
qasm_source = qml.to_openqasm(circuit)(theta)
호환되는 QIR 프로필을 사용하여 target를 OpenQASM로 컴파일합니다.
from qdk import TargetProfile
from qdk.openqasm import compile
program = compile(qasm_source, TargetProfile.Base)
PennyLane 작업 제출
호환되는 target을 선택하고 QIR을 제출합니다.
target = workspace.get_targets("rigetti.sim.qvm")
job = target.submit(program, "pennylane-job", shots=100)
print("Job ID:", job.id)
작업이 완료되고 결과를 검색할 때까지 기다립니다.
job.wait_until_completed()
print("Status:", job.details.status)
results = job.get_results()
print(results)
결과 형식은 공급자 및 target에 따라 달라집니다.
Azure Quantum는 제출된 PennyLane에서 QIR 퀀텀 노드 결과를 반환하지 않습니다.
관련 콘텐츠