Qiskit을 사용하여 회로를 Azure Quantum에 제출하는 방법
패키지를 사용하여 Qiskit 양자 회로를 제출하는 방법을 알아봅니다 azure-quantum
Python . 기본 제공 패키지가 있는 Azure Quantum Notebook을 사용하거나 로컬 컴퓨터에서 Qiskit 회로를 Azure Quantum에 azure-quantum
Python 제출할 수 있습니다. 로컬 스파스 시뮬레이터를 사용하여 회로를 테스트할 수도 있습니다.
자세한 내용은 Quantum 회로를 참조 하세요.
필수 조건
설치 세부 정보는 QDK 확장설정을 참조하세요.
Azure 구독의 Azure Quantum 작업 영역입니다. 작업 영역을 만들려면 Azure Quantum 작업 영역 만들기를 참조하세요.
[qiskit] 태그가 있는 Azure Quantum
azure-quantum
Python 패키지입니다.python -m pip install --upgrade azure-quantum[qiskit] qsharp ipykernel
Important
최신 버전의 Qiskit이 있는지 확인합니다. 자세한 내용은 azure-quantum Python 패키지 업데이트를 참조하세요.
참고 항목
Jupyter Python 커널
ipykernel
이 검색되지 않으면 VS Code에서 설치하라는 메시지를 표시합니다.
새 Jupyter Notebook 만들기
- VS Code에서 명령 팔레트 보기를 > 선택하고 만들기: 새 Jupyter Notebook을 선택합니다.
- 오른쪽 위에서 VS Code는 Notebook에 대해 선택된 가상 환경 및 Python 버전을 검색하고 Python 표시합니다. 여러 Python 환경이 있는 경우 오른쪽 위에 있는 커널 선택기를 사용하여 커널을 선택해야 할 수 있습니다. 환경이 검색되지 않은 경우 VS Code의 Jupyter Notebook에서 설정 정보를 참조하세요.
필요한 가져오기 로드
Notebook의 첫 번째 셀에서 다음 코드를 실행하여 필요한 가져오기를 로드합니다.
import azure.quantum
from azure.quantum import Workspace
from qiskit import QuantumCircuit
from qiskit.visualization import plot_histogram
from azure.quantum.qiskit import AzureQuantumProvider
Azure Quantum 서비스에 연결
Azure Quantum 서비스에 연결하려면 리소스 ID와 Azure Quantum 작업 영역의 위치가 필요합니다.
Azure 계정에 로그인합니다 https://portal.azure.com.
Azure Quantum 작업 영역을 선택하고 개요로 이동합니다.
필드에 매개 변수를 복사합니다.
Notebook에 새 셀을 추가하고 계정 정보를 사용하여 만들고 Workspace
AzureQuantumProvider
개체를 사용하여 Azure Quantum 작업 영역에 연결합니다.
workspace = Workspace(
resource_id = "", # Add the resourceID of your workspace
location = "" # Add the location of your workspace (for example "westus")
)
provider = AzureQuantumProvider(workspace)
모든 백 엔드 나열
이제 작업 영역에서 사용할 수 있는 모든 양자 컴퓨팅 백 엔드를 인쇄할 수 있습니다.
print("This workspace's targets:")
for backend in provider.backends():
print("- " + backend.name())
This workspace's targets:
- ionq.qpu
- ionq.qpu.aria-1
- ionq.simulator
- microsoft.estimator
- quantinuum.hqs-lt-s1
- quantinuum.hqs-lt-s1-apival
- quantinuum.hqs-lt-s2
- quantinuum.hqs-lt-s2-apival
- quantinuum.hqs-lt-s1-sim
- quantinuum.hqs-lt-s2-sim
- quantinuum.qpu.h1-1
- quantinuum.sim.h1-1sc
- quantinuum.sim.h1-1e
- rigetti.sim.qvm
- rigetti.qpu.ankaa-9q-3
- rigetti.qpu.ankaa-3
간단한 회로 실행
먼저, 실행할 간단한 Qiskit 회로를 만듭니다.
# 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
target 프로그램을 실행할 선택
IonQ 시뮬레이터에서 실행
실제 하드웨어에서 실행하기 전에 시뮬레이터에서 회로를 테스트해 보겠습니다. IonQ 시뮬레이터 백 엔드에 연결하는 개체를 만드는 get_backend
데 사용합니다Backend
.
simulator_backend = provider.get_backend("ionq.simulator")
IonQ 백 엔드는 하드웨어에서 최적으로 실행되도록 컴파일되는 정의된 게이트 집합의 게이트를 지원합니다. 회로에 이 목록에 없는 게이트가 포함된 경우 Qiskit에서 제공하는 함수를 사용하여 gateset
지원되는 transpile
게이트로 전환해야 합니다.
from qiskit import transpile
circuit = transpile(circuit, simulator_backend)
transpile 함수는 지정된 백 엔드에서 지원되는 게이트로 게이트가 분해되는 새 회로 개체를 반환합니다.
이제 Azure Quantum 서비스를 통해 프로그램을 실행하고 결과를 가져올 수 있습니다. 다음 셀은 100샷으로 회로를 실행하는 작업을 제출합니다.
job = simulator_backend.run(circuit, shots=8)
job_id = job.id()
print("Job id", job_id)
Job id 00000000-0000-0000-0000-000000000000
작업이 완료될 때까지 기다린 후 결과를 반환하려면 다음을 실행합니다.
result = job.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=8, success=True, meas_level=2, data=ExperimentResultData(counts={'000': 4, '111': 4}, memory=['000', '000', '000', '000', '111', '111', '111', '111'], probabilities={'000': 0.5, '111': 0.5}), header=QobjExperimentHeader(name='Qiskit Sample - 3-qubit GHZ circuit', num_qubits=3, metadata={}), status=JobStatus.DONE, name='Qiskit Sample - 3-qubit GHZ circuit')], date=None, status=None, header=None, error_data=None)
결과는 Qiskit 패키지의 네이티브 개체이므로 Qiskit의 result.get_counts
및 plot_histogram
을 사용하여 결과를 시각화할 수 있습니다. 가능한 모든 비트 문자열 레이블이 표현되도록 하려면 해당 레이블을 추가합니다 counts
.
counts = {format(n, "03b"): 0 for n in range(8)}
counts.update(result.get_counts(circuit))
print(counts)
plot_histogram(counts)
{'000': 4, '001': 0, '010': 0, '011': 0, '100': 0, '101': 0, '110': 0, '111': 4}
함수를 get_memory()
사용하여 작업의 개별 샷 데이터를 표시할 수도 있습니다.
result.get_memory(circuit)
['000', '000', '000', '000', '111', '111', '111', '111']
참고 항목
IonQ targets에서 홀수의 샷이 있는 작업을 제출하면 결과가 다음 짝수로 반올림됩니다. 예를 들어 9개의 샷을 지정하면 결과에 8개의 샷에 대한 데이터가 표시됩니다.
작업 비용 예측
QPU에서 작업을 실행하기 전에 실행하는 데 드는 비용을 예측해야 합니다.
최신 가격 책정 세부 정보는 IonQ 가격 책정을 참조하거나 aka.ms/aq/myworkspaces에서 작업 영역을 찾은 다음, 작업 영역의 "공급자" 탭에서 가격 책정 옵션을 확인합니다.
IonQ QPU에서 실행
실제 하드웨어(QPU( Quantum Processor Unit ))에 연결하려면 메서드에 target"ionq.qpu.aria-1"
이름을 입력하기 get_backend
만 하면 됩니다.
qpu_backend = provider.get_backend("ionq.qpu.aria-1")
회로를 제출하여 Azure Quantum에서 실행하고, 결과를 가져오고, 실행 plot_histogram
하여 결과를 표시합니다.
참고 항목
QPU에서 회로를 실행하는 데 필요한 시간은 현재 큐 시간에 따라 다를 수 있습니다.
# Submit the circuit to run on Azure Quantum
job = qpu_backend.run(circuit, shots=100)
job_id = job.id()
print("Job id", job_id)
# Get the job results (this method 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='ionq.qpu.aria-1', 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}
Important
단일 작업에서 여러 회로 제출은 현재 지원되지 않습니다. 해결 방법으로, 메서드를 backend.run
호출하여 각 회로를 비동기적으로 제출한 다음, 각 작업의 결과를 가져올 수 있습니다. 예시:
jobs = []
for circuit in circuits:
jobs.append(backend.run(circuit, shots=N))
results = []
for job in jobs:
results.append(job.result())
필수 조건
- 활성 구독이 있는 Azure 계정. Azure 계정이 없는 경우 무료로 등록하고 종량제 구독에 등록합니다.
- Azure Quantum 작업 영역 자세한 내용은 Azure Quantum 작업 영역 만들기를 참조하세요.
작업 영역에서 새 Notebook 만들기
- Azure Portal에 로그인하고 이전 단계에서 만든 작업 영역을 선택합니다.
- 왼쪽 블레이드에서 Notebooks를 선택합니다.
- 내 Notebooks를 클릭하고 새로 추가를 클릭합니다.
- 파일 이름(예: Qiskit.ipynb)을 입력하고 파일 만들기를 클릭합니다.
새 Notebook이 열리면 구독 및 작업 영역 정보에 따라 첫 번째 셀에 대한 코드가 자동으로 만들어집니다.
from azure.quantum import Workspace
workspace = Workspace (
resource_id = "", # Add your resource_id
location = "" # Add your workspace location (for example, "westus")
)
참고 항목
달리 명시되지 않는 한 컴파일 문제를 방지하기 위해 셀을 만들 때 각 셀을 순서대로 실행해야 합니다.
셀 왼쪽의 삼각형 "재생" 아이콘을 클릭하여 코드를 실행합니다.
필요한 가져오기 로드
먼저 몇 가지 추가 모듈을 가져와야 합니다.
+ 코드를 클릭하여 새 셀을 추가하고, 다음 코드를 추가하여 실행합니다.
from qiskit import QuantumCircuit
from qiskit.visualization import plot_histogram
from azure.quantum.qiskit import AzureQuantumProvider
Azure Quantum 서비스에 연결
다음으로, 이전 셀의 개체를 AzureQuantumProvider
사용하여 개체를 만들어 Workspace
Azure Quantum 작업 영역에 연결합니다. 다음 코드를 사용하여 새 셀을 추가합니다.
provider = AzureQuantumProvider(workspace)
간단한 회로 정의
새 셀에서 circuit
개체를 만듭니다. 이 예제는 간단한 양자 임의 비트 생성기입니다. 다음 코드를 추가하여 회로를 정의하고 표시합니다.
# 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
모두 나열 targets
이제 작업 영역에서 사용할 수 있는 모든 양자 컴퓨팅 targets또는 백 엔드를 표시할 수 있습니다. 새 셀을 추가하고 다음 행을 실행합니다.
print("This workspace's targets:")
for backend in provider.backends():
print("- " + backend.name())
This workspace's targets:
- ionq.simulator
- ionq.qpu.aria-1
- microsoft.estimator
- quantinuum.qpu.h1-1
- quantinuum.sim.h1-1sc
- quantinuum.sim.h1-1e
- rigetti.sim.qvm
- rigetti.qpu.ankaa-9q-3
- rigetti.qpu.ankaa-3
target 프로그램을 실행할 선택
실제 양자 하드웨어에서 실행하기 전에 코드를 확인하려면 IonQ 양자 시뮬레이터 ionq.simulator
를 사용할 수 있습니다.
새 셀을 추가하고 IonQ 양자 시뮬레이터를 나타내는 개체를 만듭니다 target.
# Get IonQ quantum simulator target:
simulator_backend = provider.get_backend("ionq.simulator")
IonQ 시뮬레이터에서 실행
시뮬레이터에서 회로를 실행하려면 다음 코드를 추가합니다. 이 예제에서는 run
작업을 제출하는 메서드를 target 사용한 다음 작업 상태를 모니터링합니다.
# Submit the circuit to run on Azure Quantum
job = simulator_backend.run(circuit, shots=8)
job_id = job.id()
print("Job id", job_id)
작업이 성공적으로 실행되면 작업 결과를 가져와서 표시합니다.
# Get the job results:
result = job.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=8, success=True, meas_level=2, data=ExperimentResultData(counts={'000': 4, '111': 4}, memory=['000', '000', '000', '000', '111', '111', '111', '111'], probabilities={'000': 0.5, '111': 0.5}), header=QobjExperimentHeader(name='Qiskit Sample - 3-qubit GHZ circuit', num_qubits=3, metadata={}), status=JobStatus.DONE, name='Qiskit Sample - 3-qubit GHZ circuit')], date=None, status=None, header=None, error_data=None)
이 result
형식은 Qiskit 패키지의 네이티브 개체이므로 Qiskit의 result.get_counts
및 plot_histogram
을 사용하여 결과를 시각화할 수 있습니다. 가능한 모든 비트 문자열 레이블이 표현되도록 하려면 해당 레이블을 추가합니다 counts
.
counts = {format(n, "03b"): 0 for n in range(8)}
counts.update(result.get_counts(circuit))
print(counts)
plot_histogram(counts)
{'000': 4, '001': 0, '010': 0, '011': 0, '100': 0, '101': 0, '110': 0, '111': 4}
함수를 get_memory()
사용하여 작업의 개별 샷 데이터를 표시할 수도 있습니다.
result.get_memory(circuit)
['000', '000', '000', '000', '111', '111', '111', '111']
참고 항목
IonQ targets에서 홀수의 샷이 있는 작업을 제출하면 결과가 다음 짝수로 반올림됩니다. 예를 들어 9개의 샷을 지정하면 결과에 8개의 샷에 대한 데이터가 표시됩니다.
작업 비용 예측
실제 양자 하드웨어 또는 QPU(양자 처리 장치 )에서 작업을 실행하기 전에 실행하는 데 드는 비용을 예측해야 합니다.
최신 가격 책정 세부 정보는 IonQ 가격 책정을 참조하거나 작업 영역을 찾아 공급자 블레이드의 가격 책정 옵션을 확인합니다.
IonQ QPU에서 실행
IonQ 시뮬레이터에서 작업을 성공적으로 실행하고 QPU 비용을 예측한 후에는 하드웨어에서 회로를 실행해야 합니다.
참고 항목
QPU에서 회로를 실행하는 데 필요한 시간은 현재 큐 시간에 따라 다릅니다. 작업 영역의 공급자 블레이드를 target 선택하여 평균 큐 시간을 볼 수 있습니다.
이전에 API 유효성 검사기에서 사용한 것과 동일한 run
메서드 및 연산을 사용하여 작업을 제출 및 모니터링합니다.
# Submit the circuit to run on Azure Quantum
job = qpu_backend.run(circuit, shots=100)
job_id = job.id()
print("Job id", job_id)
작업이 완료되면 이전과 같이 작업 결과를 가져와서 차트에 표시합니다.
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 910b5ac8-98cd-11ec-b3ba-00155d5528cf
Job Status: job has successfully run
Result(backend_name='ionq.simulator', backend_version='1', qobj_id='Qiskit Sample - 3-qubit GHZ circuit', job_id='Job id 54e8c740-98d9-11ec-b382-00155d957f5d', 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}
Important
단일 작업에서 여러 회로 제출은 현재 지원되지 않습니다. 해결 방법으로, 메서드를 backend.run
호출하여 각 회로를 비동기적으로 제출한 다음, 각 작업의 결과를 가져올 수 있습니다. 예시:
jobs = []
for circuit in circuits:
jobs.append(backend.run(circuit, shots=N))
results = []
for job in jobs:
results.append(job.result())
필수 조건
설치 세부 정보는 QDK 확장설정을 참조하세요.
태그 및
qsharp
태그가 Python 있는 Azure Quantumqiskit
widget
패키지입니다.python pip install "qsharp[qiskit,widgets]>=1.9"
Important
최신 버전의 Qiskit이 있는지 확인합니다. 자세한 내용은 azure-quantum Python 패키지 업데이트를 참조하세요.
기본 회로 실행
VS Code에서 새 Python 파일을 열어 Qsharp 패키지의 기본 제공 스파스 시뮬레이터를 사용하여 기본 회로를 정의하고 실행합니다.
# load the required imports
from qiskit.circuit.random import random_circuit
from qsharp.interop.qiskit import QSharpBackend
# define and display the circuit
circuit = random_circuit(2, 2, measure=True)
print(circuit)
# run the circuit using the built-in sparse simulator
backend = QSharpBackend()
job = backend.run(circuit)
counts = job.result().get_counts()
print(counts)
프로그램을 실행하려면 오른쪽 위에 있는 실행 아이콘을 선택하고 파일 실행을 Python 선택합니다. 출력이 새 터미널 창에 표시됩니다.
┌─────────────────────────┐┌─┐
q_0: ─■───────────┤0 ├┤M├───
│P(0.79983) │ (XX-YY)(1.9337,1.7385) │└╥┘┌─┐
q_1: ─■───────────┤1 ├─╫─┤M├
└─────────────────────────┘ ║ └╥┘
c: 2/═════════════════════════════════════════╩══╩═
0 1
{'11': 680, '00': 344}
회로에 대한 QIR 생성
동일한 회로를 사용하여 양자 하드웨어에서 실행하는 데 사용되는 QIR을 생성할 수 있습니다.
참고 항목
QIR을 생성할 때 모든 레지스터를 측정해야 합니다. 사용되지 않는 레지스터가 있는 경우 오류가 발생합니다. 또한 프로필이 Unrestricted
설정되면 QIR을 생성하려고 하면 오류가 발생합니다.
Unrestricted
프로필은 시뮬레이션에만 유효합니다. TargetProfile.Base 또는 TargetProfile.Adaptive_RI
사용해야 합니다.
target_profile
호출에서 backend.qir(...)
을 재정의하여 프로필을 전환할 수 있습니다.
QSharpError
및TargetProfile
가져오기from qsharp import QSharpError, TargetProfile
출력을 수정하여 QIR 생성
print(backend.qir(circuit, target_profile=TargetProfile.Adaptive_RI))
이제 코드는 다음과 같이 표시됩니다.
# load the required imports
from qiskit.circuit.random import random_circuit
from qsharp.interop.qiskit import QSharpBackend
from qsharp import QSharpError, TargetProfile
# define and display the circuit
circuit = random_circuit(2, 2, measure=True)
print(circuit)
# generate QIR for the circuit
print(backend.qir(circuit, target_profile=TargetProfile.Adaptive_RI))
출력을 사용하여 다음을 수행합니다.
┌────────────┐ ┌─┐
q_0: ┤ Rx(2.7195) ├─■───────────┤M├───
└──┬─────┬───┘ │U1(5.5924) └╥┘┌─┐
q_1: ───┤ Tdg ├─────■────────────╫─┤M├
└─────┘ ║ └╥┘
c: 2/════════════════════════════╩══╩═
0 1
%Result = type opaque
%Qubit = type opaque
define void @ENTRYPOINT__main() #0 {
block_0:
call void @__quantum__qis__rx__body(double 2.7194945105768586, %Qubit* inttoptr (i64 0 to %Qubit*))
call void @__quantum__qis__rz__body(double 2.796204066686262, %Qubit* inttoptr (i64 0 to %Qubit*))
call void @__quantum__qis__t__adj(%Qubit* inttoptr (i64 1 to %Qubit*))
call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*))
call void @__quantum__qis__rz__body(double -2.796204066686262, %Qubit* inttoptr (i64 1 to %Qubit*))
call void @__quantum__qis__cx__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Qubit* inttoptr (i64 1 to %Qubit*))
call void @__quantum__qis__rz__body(double 2.796204066686262, %Qubit* inttoptr (i64 1 to %Qubit*))
call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 0 to %Qubit*), %Result* inttoptr (i64 0 to %Result*))
call void @__quantum__qis__m__body(%Qubit* inttoptr (i64 1 to %Qubit*), %Result* inttoptr (i64 1 to %Result*))
call void @__quantum__rt__array_record_output(i64 2, i8* null)
call void @__quantum__rt__result_record_output(%Result* inttoptr (i64 1 to %Result*), i8* null)
call void @__quantum__rt__result_record_output(%Result* inttoptr (i64 0 to %Result*), i8* null)
ret void
}
declare void @__quantum__qis__rx__body(double, %Qubit*)
declare void @__quantum__qis__rz__body(double, %Qubit*)
declare void @__quantum__qis__t__adj(%Qubit*)
declare void @__quantum__qis__cx__body(%Qubit*, %Qubit*)
declare void @__quantum__qis__m__body(%Qubit*, %Result*) #1
declare void @__quantum__rt__array_record_output(i64, i8*)
declare void @__quantum__rt__result_record_output(%Result*, i8*)
attributes #0 = { "entry_point" "output_labeling_schema" "qir_profiles"="adaptive_profile" "required_num_qubits"="2" "required_num_results"="2" }
attributes #1 = { "irreversible" }
; module flags
!llvm.module.flags = !{!0, !1, !2, !3, !4, !5, !6, !7, !8, !9, !10}
!0 = !{i32 1, !"qir_major_version", i32 1}
!1 = !{i32 7, !"qir_minor_version", i32 0}
!2 = !{i32 1, !"dynamic_qubit_management", i1 false}
!3 = !{i32 1, !"dynamic_result_management", i1 false}
!4 = !{i32 1, !"classical_ints", i1 true}
!5 = !{i32 1, !"qubit_resetting", i1 true}
!6 = !{i32 1, !"classical_floats", i1 false}
!7 = !{i32 1, !"backwards_branching", i1 false}
!8 = !{i32 1, !"classical_fixed_points", i1 false}
!9 = !{i32 1, !"user_functions", i1 false}
!10 = !{i32 1, !"multiple_target_branching", i1 false}
모든 프로그램이 모든 하드웨어에서 실행할 수 있는 것은 아닙니다. 여기서 target 프로필을 Base
해 볼 수 있지만, 프로그램의 지원되지 않는 부분에 대해서는 자세한 오류가 있을 것입니다.
try:
backend.qir(qc, target_profile=TargetProfile.Base)
except QSharpError as e:
print(e)
다음 단계
- 빠른 시작: Cirq를 사용하여 회로를 Azure Quantum에 제출합니다.
- 빠른 시작: 공급자별 형식의 회로를 Azure Quantum에 제출합니다.