세션 시작
세션은 여러 양자 컴퓨팅 작업을 함께 그룹화할 수 있는 하이브리드 양자 컴퓨팅의 주요 기능입니다.
이 문서에서는 하이브리드 양자 컴퓨팅의 세션 아키텍처와 새 세션을 만드는 방법을 설명합니다.
필수 조건
세션을 만들려면 다음 필수 구성 요소가 필요합니다.
활성 구독이 있는 Azure 계정. Azure 계정이 없는 경우 무료로 등록하고 종량제 구독에 등록합니다.
Azure Quantum 작업 영역 자세한 내용은 Azure Quantum 작업 영역 만들기를 참조하세요.
Python 및 Pip가 설치된 Python 환경입니다.
Azure Quantum
azure-quantum
패키지입니다. Qiskit 또는 Cirq를 사용하려면 [qiskit] 또는 [cirq] 태그를 사용하여 패키지를 설치azure-quantum
해야 합니다.pip install --upgrade azure-quantum[qiskit]
세션이란?
세션은 단일 target에 제출된 하나 이상의 작업의 논리적 그룹화입니다. 각 세션에는 해당 세션의 각 작업에 연결된 고유 ID가 있습니다.
세션에서 클라이언트 컴퓨팅 리소스를 클라우드로 이동하면 대기 시간이 짧아지고 다른 매개 변수를 사용하여 양자 회로의 실행을 반복할 수 있습니다. 작업은 논리적으로 하나의 세션으로 그룹화할 수 있으며 해당 세션의 작업은 비 세션 작업보다 우선 순위를 지정할 수 있습니다. 큐비트 상태는 작업 간에 유지되지 않지만 세션은 작업에 대한 큐 시간을 단축하고 더 오래 실행되는 문제를 허용합니다.
세션을 사용하면 양자 작업 간에 클래식 코드를 실행할 수 있는 기능을 사용하여 여러 양자 컴퓨팅 작업을 구성할 수 있습니다. 복잡한 알고리즘을 실행하여 개별 양자 컴퓨팅 작업을 더 잘 구성하고 추적할 수 있습니다.
세션에서 작업을 결합하려는 주요 사용자 시나리오는 하나의 양자 컴퓨팅 작업의 출력이 다음 양자 컴퓨팅 작업의 매개 변수를 알리는 매개 변수가 있는 양자 알고리즘입니다. 이러한 알고리즘 유형의 가장 일반적인 예는 (VQE) 및 Quantum Approximate Optimization Algorithms (QAOA)입니다 Variational Quantum Eigensolvers .
지원되는 하드웨어
세션은 모든 양자 컴퓨팅 하드웨어 공급자에서 지원됩니다. 경우에 따라 세션 내에서 제출된 작업이 해당 큐에 우선 순위가 target지정됩니다. 자세한 내용은 동작을 참조 Target 하세요.
세션을 만드는 방법
세션을 만들려면 다음 단계를 수행합니다.
이 예제에서는 Visual Studio Code에서 Jupyter Notebook을 사용하여 인라인 코드로 세션을 Q# 만드는 방법을 보여줍니다. 인접 Q# 프로그램을 호출하는 Python 프로그램을 사용하여 세션을 만들 수도 있습니다.
참고 항목
세션은 인라인 코드를 실행하는 Q# 경우에도 Python으로 관리됩니다.
VS Code에서 명령 팔레트 보기를 > 선택하고 만들기: 새 Jupyter Notebook을 선택합니다.
오른쪽 위에서 VS Code는 Notebook에 대해 선택된 Python 및 가상 Python 환경의 버전을 검색하고 표시합니다. 여러 Python 환경이 있는 경우 오른쪽 위에 있는 커널 선택기를 사용하여 커널을 선택해야 할 수 있습니다. 환경이 검색되지 않은 경우 VS Code의 Jupyter Notebook에서 설정 정보를 참조하세요.
Notebook의 첫 번째 셀에서
import azure.quantum workspace = azure.quantum.Workspace( resource_id = "", # add your resource ID location = "", # add your location, for example "westus" )
+ 코드를 클릭하여 Notebook에 새 셀을 추가하고 Python SDK를 가져옵니다
qsharp
.import qsharp
원하는 양자 target 를 선택합니다. 이 예제에서는 IonQ 시뮬레이터를 .로 target사용하고 있습니다.
target = workspace.get_targets("ionq.simulator")
또는 프로필
Base
Adaptive_RI
Unrestricted
의 target 구성을 선택합니다.qsharp.init(target_profile=qsharp.TargetProfile.Base) # or qsharp.TargetProfile.Adaptive_RI, qsharp.TargetProfile.Unrestricted
참고 항목
Adaptive_RI
target 프로필 작업은 현재 Quantinuum targets에서 지원됩니다. 자세한 내용은 통합 하이브리드 양자 컴퓨팅을 참조 하세요.프로그램을 작성합니다 Q# . 예를 들어 다음 Q# 프로그램은 임의 비트를 생성합니다. 입력 인수의 사용을 설명하기 위해 이 프로그램은 정
n
수 및 각도 배열을angle
입력으로 사용합니다.%%qsharp import Std.Measurement.*; import Std.Arrays.*; operation GenerateRandomBits(n: Int, angle: Double[]) : Result[] { use qubits = Qubit[n]; // n parameter as the size of the qubit array for q in qubits { H(q); } R(PauliZ, angle[0], qubits[0]); // arrays as entry-points parameters R(PauliZ, angle[1], qubits[1]); let results = MeasureEachZ(qubits); ResetAll(qubits); return results; }
다음으로 세션을 만듭니다. 작업을 세 번 실행
GenerateRandomBit
하여 데이터를 사용하여target.submit
작업을target
제출 Q# 하고 코드를 세 번 반복한다고 가정해 보겠습니다. 실제 시나리오에서는 동일한 코드 대신 다른 프로그램을 제출할 수 있습니다.angle = [0.0, 0.0] with target.open_session(name="Q# session of three jobs") as session: target.submit(input_data=qsharp.compile(f"GenerateRandomBits(2, {angle})"), name="Job 1", shots=100) # First job submission angle[0] += 1 target.submit(input_data=qsharp.compile(f"GenerateRandomBits(2, {angle})"), name="Job 2", shots=100) # Second job submission angle[1] += 1 target.submit(input_data=qsharp.compile(f"GenerateRandomBits(2, {angle})"), name="Job 3", shots=100) # Third job submission session_jobs = session.list_jobs() [session_job.details.name for session_job in session_jobs]
Important
인수를 작업에 매개 변수로 전달하는 경우 호출
qsharp.compile
할 때 식에 형식이 Q# 지정됩니다. 즉, 인수의 형식을 개체로 Q# 지정하는 데 주의해야 합니다. 이 예제에서는 Python의 배열이 이미 [item0, item1, ...]로 인쇄되어 있으므로 입력 인수가 서식과 Q# 일치합니다. 다른 Python 데이터 구조의 경우 호환되는 방식으로 삽입된 문자열 값을 가져오기 위해 더 많은 처리가 Q# 필요할 수 있습니다.세션을 만든 후에는 세션의 모든 작업 목록을 검색하는 데 사용할
workspace.list_session_jobs
수 있습니다. 자세한 내용은 세션을 관리하는 방법을 참조 하세요.
Target 동작
각 양자 하드웨어 공급자는 세션 내에서 작업의 우선 순위를 가장 잘 관리하기 위해 자체 추론을 정의합니다.
Quantinuum
세션 내의 작업을 Quantinuumtarget에 제출하도록 선택하는 경우 서로 1분 이내에 작업을 큐에 대기하는 한 세션은 하드웨어에 단독으로 액세스할 수 있습니다. 그 후에는 표준 큐 및 우선 순위 지정 논리를 사용하여 작업을 수락하고 처리합니다.