Azure Quantum에 양자 작업 제출
이 문서에서는 Azure Portal, Python, Jupyter Notebook 또는 Azure CLI를 사용하여 Azure Quantum에 양자 컴퓨팅 작업을 제출하는 단계를 알아봅니다.
사전 요구 사항
- Azure 구독의 Azure Quantum 작업 영역. 작업 영역을 만들려면 Azure Quantum 작업 영역 만들기를 참조하세요.
작업 영역에 새 Notebook 만들기
- Azure Portal에 로그인하고 작업 영역을 선택합니다.
- 왼쪽 블레이드에서 Notebooks를 선택합니다.
- 내 Notebooks를 클릭하고 새로 추가를 클릭합니다.
- 커널 형식에서 IQ#을 선택합니다.
- 파일 이름(예: submit-quantum-job.ipynb)을 입력하고 파일 만들기를 클릭합니다.
참고
Azure Quantum 작업 영역에 Notebook을 업로드할 수도 있습니다. 자세한 내용은 Notebook 업로드를 참조하세요.
새 Notebook이 열리면 구독 및 작업 영역 정보를 기반으로 한 연결 명령인 첫 번째 셀에 대한 코드가 자동으로 만들어집니다.
참고
달리 명시되지 않는 한 컴파일 문제를 방지하기 위해 셀을 만들 때 각 셀을 순서대로 실행해야 합니다.
셀 왼쪽의 삼각형 "재생" 아이콘을 클릭하여 코드를 실행합니다. 프로그램은 Azure 계정에 인증하고 작업 영역에서 사용 가능한 을 targets 표시합니다.
Q# 연산 작성
+ 코드를 선택하여 새 셀을 추가하고 Q# 코드를 입력 및 실행합니다. 이 예제에서는 GenerateRandomBit
연산을 사용합니다.
operation GenerateRandomBit() : Result {
use q = Qubit();
H(q);
let r = M(q);
Reset(q);
return r;
}
양자에 연결 target
새 셀을 추가하고 매직 명령을 사용하여 %azure.target
활성 target를 설정합니다. targets 이전에 나열된 모든 를 사용할 수 있지만 일부 경우에는 비용이 발생할 수 있습니다. 작업 비용에 대한 자세한 정보는 Azure Quantum 작업 비용을 참조하세요.
이 예제에서는 무료 ionq.simulator
를 사용합니다.
%azure.target ionq.simulator
작업 제출
작업을 제출하려면 앞에서 정의한 Q# 작업을 사용하여 %azure.execute 매직 명령을 실행합니다.
%azure.execute GenerateRandomBit
작업을 제출한 후 %azure.status
<job ID> 명령을 사용하여 상태를 확인하거나 %azure.output
명령을 사용하여 결과를 볼 수 있습니다. %azure.jobs
명령을 사용하여 모든 작업의 목록을 볼 수 있습니다.
다음은 Q# Jupyter Notebook을 사용할 때의 유용한 팁입니다.
%lsmagic
명령을 사용하여 Azure Quantum용 매직 명령을 비롯하여 사용 가능한 모든 매직 명령을 확인합니다.매직 명령에 대한 자세한 사용 정보는
?
를 추가하여 표시할 수 있습니다(예:%azure.connect?
).매직 명령에 대한 설명서는 %azure.connect, %azure., %azure.submittarget, %azure.execute, %azure.상태, %azure.output, %azure.jobs
사전 요구 사항
- Azure 구독의 Azure Quantum 작업 영역. 작업 영역을 만들려면 Azure Quantum 작업 영역 만들기를 참조하세요.
- 최신 버전의 Python용 Quantum 개발 키트. 이렇게 하면 Q# Jupyter Notebook 및 Python 환경을 지원하는
qsharp
Python 패키지와 IQ# 커널이 설치됩니다.
참고
Python을 설치할 때 conda를 사용하여 설치 하는 옵션을 사용하는 것이 좋습니다. 이 문서의 단계에서는 conda 설치를 가정합니다.
Q# 및 Python을 사용한 양자 컴퓨팅
이전에 만든 conda 환경의 Python 환경에는 이미
qsharp
Python 패키지가 포함되어 있습니다. 이 conda 환경이 활성화된 터미널에서 Python 스크립트를 실행하고 있는지 확인합니다.*.qs
파일에서 Q# 연산을 작성합니다. Python에서import qsharp
를 실행할 때 IQ# 커널은 동일한 폴더에 있는 .qs 파일을 자동으로 검색하여 컴파일하고 오류를 보고합니다. 컴파일에 성공하면 컴파일된 Q# 연산을 Python 내에서 직접 사용할 수 있게 됩니다.예를 들어 .qs 파일의 내용은 다음과 같습니다.
namespace Test { open Microsoft.Quantum.Intrinsic; open Microsoft.Quantum.Measurement; open Microsoft.Quantum.Canon; operation GenerateRandomBits(n : Int) : Result[] { use qubits = Qubit[n]; ApplyToEach(H, qubits); return MultiM(qubits); } }
*.qs
파일과 동일한 폴더에 Python 스크립트를 만듭니다. Azure Quantum 기능은import qsharp.azure
를 실행하고 Python 명령을 호출하여 Azure Quantum과 상호 작용하면 사용할 수 있습니다. 레퍼런스를 보려면qsharp.azure
Python 명령 전체 목록을 참조하세요. 연결하려면 Azure Quantum 작업 영역의 리소스 ID가 필요합니다. 리소스 ID는 Azure Portal의 작업 영역 페이지에서 찾을 수 있습니다.“미국 서부” 이외의 Azure 지역에서 작업 영역을 만든 경우 이 지역을
qsharp.azure.connect()
에 대한location
매개 변수로도 지정해야 합니다.예를 들어 Python 스크립트는 다음과 같을 수 있습니다.
import qsharp import qsharp.azure from Test import GenerateRandomBits qsharp.azure.connect( resourceId="/subscriptions/.../Microsoft.Quantum/Workspaces/WORKSPACE_NAME", location="West US") qsharp.azure.target("ionq.simulator") result = qsharp.azure.execute(GenerateRandomBits, n=3, shots=1000, jobName="Generate three random bits") print(result)
여기에서
GenerateRandomBits
는*.qs
파일에 정의된 네임스페이스Test
의 Q# 연산이고,n=3
은 해당 연산에 전달될 매개 변수이며,shots=1000
(선택 사항)은 수행할 반복의 수를 지정하고,jobName="Generate three random bits"
(선택 사항)는 Azure Quantum 작업 영역의 작업을 식별하는 사용자 지정 작업 이름입니다.python test.py
명령을 실행하여 Python 스크립트를 실행합니다. 여기에서test.py
는 Python 파일의 이름입니다. 성공하면 터미널에 작업 결과가 표시됩니다. 예:{'[0,0,0]': 0.125, '[1,0,0]': 0.125, '[0,1,0]': 0.125, '[1,1,0]': 0.125, '[0,0,1]': 0.125, '[1,0,1]': 0.125, '[0,1,1]': 0.125, '[1,1,1]': 0.125}
Azure Quantum 작업 영역에 있는 모든 작업의 세부 정보를 보려면
qsharp.azure.jobs()
명령을 실행합니다.>>> qsharp.azure.jobs() [{'id': 'f4781db6-c41b-4402-8d7c-5cfce7f3cde4', 'name': 'GenerateRandomNumber 3 qubits', 'status': 'Succeeded', 'provider': 'ionq', 'target': 'ionq.simulator', 'creation_time': '2020-07-17T21:45:43.4405253Z', 'begin_execution_time': '2020-07-17T21:45:54.09Z', 'end_execution_time': '2020-07-17T21:45:54.101Z'}, {'id': '1b03cc74-b5d5-4ffa-81db-465f08ae6cd0', 'name': 'GenerateRandomBit', 'status': 'Succeeded', 'provider': 'ionq', 'target': 'ionq.simulator', 'creation_time': '2020-07-21T19:44:17.1065156Z', 'begin_execution_time': '2020-07-21T19:44:25.85Z', 'end_execution_time': '2020-07-21T19:44:25.858Z'}]
특정 작업의 자세한 상태를 보려면 작업 ID를
qsharp.azure.status()
또는qsharp.azure.output()
으로 전달합니다. 예를 들면 다음과 같습니다.>>> qsharp.azure.status('1b03cc74-b5d5-4ffa-81db-465f08ae6cd0') {'id': '1b03cc74-b5d5-4ffa-81db-465f08ae6cd0', 'name': 'GenerateRandomBit', 'status': 'Succeeded', 'provider': 'ionq', 'target': 'ionq.simulator', 'creation_time': '2020-07-21T19:44:17.1065156Z', 'begin_execution_time': '2020-07-21T19:44:25.85Z', 'end_execution_time': '2020-07-21T19:44:25.858Z'} >>> qsharp.azure.output('1b03cc74-b5d5-4ffa-81db-465f08ae6cd0') {'0': 0.5, '1': 0.5}
사전 요구 사항
- Azure 구독의 Azure Quantum 작업 영역. 작업 영역을 만들려면 Azure Quantum 작업 영역 만들기를 참조하세요.
- Jupyter Notebook용 Quantum 개발 키트의 최신 버전입니다. 이렇게 하면 Q# Jupyter Notebook 및 Python 환경을 지원하는 Jupyter Notebook과 IQ# 커널이 설치됩니다.
Q# Jupyter Notebook을 사용하는 양자 컴퓨팅
Conda 환경이 활성화된 터미널에서
jupyter notebook
을 실행합니다. 그러면 Notebook 서버가 시작되고 브라우저에서 Jupyter가 열립니다.새로 만들기 → Q# 을 통해 Q# Notebook을 만들고 Q# 프로그램을 작성합니다.
Notebook에서 직접 Q# 작업을 작성합니다. 셀을 실행하면 Q# 코드가 컴파일되고 오류가 있는지 보고합니다.
예를 들어 다음과 같은 Q# 작업을 작성할 수 있습니다.
operation GenerateRandomBit() : Result { use q = Qubit(); H(q); let r = M(q); Reset(q); return r; }
Q# 작업을 정의한 후,
%azure.*
매직 명령을 사용하여 작업을 연결하고 Azure Quantum에 제출합니다. Azure Quantum 작업 영역의 리소스 ID를 사용하여 연결합니다. 리소스 ID는 Azure Portal의 작업 영역 페이지에서 찾을 수 있습니다.“미국 서부” 이외의 Azure 지역에서 작업 영역을 만든 경우 이 항목을
%azure.connect
에 대한location
매개 변수로도 지정해야 합니다.예를 들어 다음 명령은 Azure Quantum 작업 영역에 연결하고 에서
ionq.simulator
target작업을 실행합니다.%azure.connect "/subscriptions/.../Microsoft.Quantum/Workspaces/WORKSPACE_NAME" location="West US" %azure.target ionq.simulator %azure.execute GenerateRandomBit
여기서
GenerateRandomBit
는 Notebook에서 이미 정의한 Q# 작업입니다.
작업을 제출한 후
%azure.status
명령을 사용하여 상태를 확인하거나%azure.output
명령을 사용하여 결과를 볼 수 있습니다.%azure.jobs
명령을 사용하여 모든 작업의 목록을 볼 수 있습니다.
다음은 Q# Jupyter Notebook을 사용할 때의 유용한 팁입니다.
%lsmagic
명령을 사용하여 Azure Quantum용 매직 명령을 비롯하여 사용 가능한 모든 매직 명령을 확인합니다.매직 명령에 대한 자세한 사용 정보는
?
를 추가하여 표시할 수 있습니다(예:%azure.connect?
).매직 명령에 대한 설명서는 %azure.connect, %azure., %azure.submittarget, %azure.execute, %azure.상태, %azure.output, %azure.jobs
사전 요구 사항
다음 항목이 컴퓨터에 설치되어 있는지 확인합니다.
- Azure 구독의 Azure Quantum 작업 영역. 작업 영역을 만들려면 Azure Quantum 작업 영역 만들기를 참조하세요.
- 최신 버전의 Quantum 개발 키트
- Azure CLI 및 양자 CLI 확장.
Azure CLI를 사용하여 Azure Quantum에 작업 제출
다음 단계에서는 Azure CLI를 사용하여 양자 애플리케이션을 실행하고 Azure Quantum 작업 영역의 다른 공급자에서 을 선택하는 target 방법을 보여 줍니다.
팁
Visual Studio Code 대한 Azure Quantum 확장이 설치되어 있으면 VS Code 내의 터미널 창에서 전체 Azure CLI 기능이 제공됩니다.
또한 az quantum
확장을 통해 사용할 수 있는 모든 명령 및 기능에 대한 전체 참조는 Azure CLI 설명서의 해당 섹션에서 확인할 수 있습니다.
참고
공급자는 양자 하드웨어, 시뮬레이터 또는 최적화 서비스로 구성된 파트너 양자 서비스입니다.
로그인 정보를 사용하여 Azure에 로그인합니다. 계정과 연결된 구독 목록을 가져옵니다.
az login
Azure 계정과 연결된 구독에서 사용하려는 구독을 지정합니다. Azure Portal의 작업 영역 개요에서 구독 ID를 찾을 수도 있습니다.
az account set -s <Your subscription ID>
다음 명령을 사용하여 구독의 모든 Azure Quantum 작업 영역을 볼 수 있습니다.
az quantum workspace list
quantum workspace set
를 사용하여 작업을 나열하고 제출하는 데 사용할 기본 작업 영역을 선택할 수 있습니다. 리소스 그룹 및 위치도 지정해야 합니다.az quantum workspace set -g MyResourceGroup -w MyWorkspace -l MyLocation -o table
Location Name ResourceGroup ----------- --------------------------------- -------------------------------- MyLocation ws-yyyyyy rg-yyyyyyyyy
팁
az quantum workspace show -o table
명령을 사용하여 현재 작업 영역을 확인할 수 있습니다.
Azure Quantum 작업 영역에는 targets 작업 영역을 만들 때 추가한 공급자와 다른 사용 가능한 항목이 있습니다. 명령을
az quantum target list -o table
사용하여 사용할 수 있는 모든 목록을 표시할 수 있습니다targets.az quantum target list -o table
Provider Target-id Current Availability Average Queue Time (seconds) ------------ --------------------------------------------------- ---------------------- ------------------------------ ionq ionq.qpu Available 510467 ionq ionq.qpu.aria-1 Available 176345 ionq ionq.simulator Available 2 microsoft-qc microsoft.estimator Available 0 quantinuum quantinuum.hqs-lt-s1 Degraded 0 quantinuum quantinuum.hqs-lt-s1-apival Available 5 quantinuum quantinuum.hqs-lt-s2 Unavailable 0 quantinuum quantinuum.hqs-lt-s2-apival Available 3 quantinuum quantinuum.hqs-lt-s1-sim Available 431 quantinuum quantinuum.hqs-lt-s2-sim Available 74 quantinuum quantinuum.hqs-lt Degraded 0 quantinuum quantinuum.qpu.h1-1 Degraded 0 quantinuum quantinuum.sim.h1-1sc Available 5 quantinuum quantinuum.qpu.h1-2 Unavailable 0 quantinuum quantinuum.sim.h1-2sc Available 3 quantinuum quantinuum.sim.h1-1e Available 431 quantinuum quantinuum.sim.h1-2e Available 74 quantinuum quantinuum.qpu.h1 Unavailable 0 rigetti rigetti.sim.qvm Available 5 rigetti rigetti.qpu.aspen-11 Unavailable 0 rigetti rigetti.qpu.aspen-m-2 Available 5 rigetti rigetti.qpu.aspen-m-3 Available 5 Microsoft microsoft.paralleltempering-parameterfree.cpu Available 0 Microsoft microsoft.paralleltempering.cpu Available 0 Microsoft microsoft.simulatedannealing-parameterfree.cpu Available 0 Microsoft microsoft.simulatedannealing.cpu Available 0 Microsoft microsoft.tabu-parameterfree.cpu Available 0 Microsoft microsoft.tabu.cpu Available 0 Microsoft microsoft.qmc.cpu Available 0 Microsoft microsoft.populationannealing.cpu Available 0 Microsoft microsoft.populationannealing-parameterfree.cpu Available 0 Microsoft microsoft.substochasticmontecarlo.cpu Available 0 Microsoft microsoft.substochasticmontecarlo-parameterfree.cpu Available 0
새 작업을 제출하려면 명령줄을 사용하여 프로젝트가 포함된 디렉터리로 이동하고 작업을 제출합니다.
az quantum job submit
명령을 사용합니다. 예를 들어 작업을 실행할 위치를 지정 target 해야 합니다.az quantum job submit --target-id MyProvider.MyTarget
Id State Target Submission time ------------------------------------ ------- ------------------- --------------------------------- yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy Waiting MyProvider.MyTarget 2020-06-12T14:20:18.6109317+00:00
콘솔에서 작업 ID를 비롯한 작업 정보를 출력합니다.
작업 ID를 사용하여 상태를 추적할 수 있습니다.
az quantum job show --job-id yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy -o table
Id State Target Submission time ------------------------------------ --------- ------------------- --------------------------------- yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy Succeeded MyProvider.MyTarget 2020-06-12T14:20:19.819981+00:00
팁
작업 영역의 모든 작업을 보려면 az quantum job list -o table
명령을 사용합니다.
작업이 완료되면
az quantum job output
명령을 사용하여 작업 결과를 표시합니다.az quantum job output --job-id yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy -o table
Result Frequency -------- ----------- ------------------------- [0,0] 0.00000000 | [1,0] 0.50000000 ▐███████████ | [0,1] 0.25000000 ▐█████ | [1,1] 0.25000000 ▐█████ |
팁
작업이 완료되고 결과가 표시될 때까지 기다리는 등 작업을 동기적으로 제출하려면 az quantum execute --target-id MyProvider.MyTarget
명령을 사용합니다.
예제
양자 애플리케이션 작성
먼저 Azure Quantum에서 실행하려는 Q# 애플리케이션이 필요합니다.
팁
Q# 양자 애플리케이션을 처음 만드는 경우 Learn 모듈을 참조하세요.
여기서는 간단한 양자 임의 비트 생성기를 사용합니다. Q# 프로젝트를 만들고 Program.qs
의 내용을 다음 코드로 바꿉니다.
namespace RandomBit {
open Microsoft.Quantum.Canon;
open Microsoft.Quantum.Intrinsic;
open Microsoft.Quantum.Measurement;
@EntryPoint()
operation GenerateRandomBit() : Result {
use q = Qubit();
H(q);
return MResetZ(q);
}
}
@EntryPoint
특성은 프로그램이 시작될 때 실행할 연산을 Q#에 알려줍니다.
작업 제출
이 예제에서는 IonQ를 공급자 ionq.simulator
로 사용하고 를 로 target사용합니다. 현재 선택한 기본 작업 영역에 작업을 제출하려면 az quantum job submit
명령을 사용합니다.
중요
*.csproj
파일의 Quantum SDK 버전이 0.11.2006.403
이상인지 확인합니다. 그렇지 않으면 컴파일 오류가 발생할 수 있습니다.
az quantum job submit --target-id ionq.simulator --job-name ExampleJob -o table
Name Id Status Target Submission time
----- ------------------------------------ -------- -------------- ---------------------------------
ExampleJob yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy Waiting ionq.simulator 2020-06-17T17:07:07.3484901+00:00
작업이 완료되면(즉, 성공 상태인 경우) az quantum job output
명령을 사용하여 결과를 확인합니다.
az quantum job output --job-id yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy -o table
Result Frequency
-------- ----------- -------------------------
[0,0] 0.50000000 ▐███████████ |
[0,1] 0.50000000 ▐███████████ |
출력에 특정 결과가 측정된 빈도와 함께 히스토그램이 표시됩니다.
위의 예제에서 결과 [0,1]
이 전체의 50%만큼 관찰되었습니다.
원하는 경우 실행 결과를 제출 및 반환하기 위한 바로 가기 키로 az quantum execute
명령을 사용할 수 있습니다.
az quantum execute --target-id ionq.simulator --job-name ExampleJob2 -o table
Result Frequency
-------- ----------- -------------------------
[0,0] 0.50000000 ▐███████████ |
[0,1] 0.50000000 ▐███████████ |
IonQ 시뮬레이터는 알고리즘을 무한히 실행하는 경우 각 출력을 얻을 확률을 제공합니다. 여기서는 각 상태의 측정 확률이 50%입니다.
팁
Azure Portal에서 작업의 상태를 확인할 수도 있습니다.