대화형 양자 컴퓨팅: 세션

이 문서에서는 세션이라고도 하는 대화형 양자 컴퓨팅의 아키텍처와 새 세션을 만드는 방법을 설명합니다.

이 하이브리드 양자 컴퓨팅 모델에서 클라이언트 컴퓨팅 리소스를 클라우드로 이동하면 대기 시간이 짧아지고 다른 매개 변수를 사용하여 양자 회로의 실행을 반복할 수 있습니다. 작업은 논리적으로 하나의 세션으로 그룹화할 수 있으며 해당 세션의 작업은 비 세션 작업보다 우선 순위를 지정할 수 있습니다. 큐비트 상태는 작업 간에 유지되지 않지만 세션은 작업에 대한 큐 시간을 단축하고 더 오래 실행되는 문제를 허용합니다.

대화형 양자 컴퓨팅

사전 요구 사항

세션을 만들려면 다음 필수 구성 요소가 필요합니다.

  • 활성 구독이 있는 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 .

지원되는 하드웨어

세션은 현재 IonQ, QuantinuumRigetti의 모든 양자 컴퓨팅 하드웨어 공급자에서 지원됩니다. 경우에 따라 세션 내에서 제출된 작업은 해당 의 큐에서 우선 순위가 target지정됩니다. 자세한 내용은 대상 동작을 참조하세요.

세션 시작

세션은 Python으로 관리되며 , Qiskit 및 Cirq 프로그램을 비롯한 Q#모든 QIR 양자 프로그램에 대해 만들 수 있습니다.

이 예제에서는 Visual Studio Code Jupyter Notebook 사용하여 인라인 코드로 세션을 Q# 만드는 방법을 보여줍니다. 인접 Q# 프로그램을 호출하는 Python 프로그램을 사용하여 세션을 만들 수도 있습니다.

참고

세션은 인라인 코드를 실행하는 Q# 경우에도 Python으로 관리됩니다.

  1. VS Code에서 명령 팔레트 보기를 > 선택하고 만들기: 새 Jupyter Notebook 선택합니다.

  2. 오른쪽 위에서 VS Code는 Python 버전과 Notebook에 대해 선택된 가상 Python 환경을 검색하고 표시합니다. 여러 Python 환경이 있는 경우 오른쪽 위에 있는 커널 선택기를 사용하여 커널을 선택해야 할 수 있습니다. 환경이 검색되지 않은 경우 VS Code의 Jupyter Notebooks에서 설정 정보를 참조하세요.

  3. Notebook의 첫 번째 셀에서 를 실행합니다.

    import azure.quantum
    
    workspace = azure.quantum.Workspace(
        resource_id = "", # add your resource ID
        location = "", # add your location, for example "westus"
    )
    
  4. + 코드를 클릭하여 Notebook에 새 셀을 추가하고 Python SDK를 가져옵니다qsharp.

    import qsharp
    
  5. 선택한 양자 target 를 선택합니다. 이 예제에서는 IonQ 시뮬레이터를 로target사용하고 있습니다.

    target = workspace.get_targets("ionq.simulator")
    
  6. 또는 프로필의 target 구성을 BaseUnrestricted선택합니다.

    qsharp.init(target_profile=qsharp.TargetProfile.Base) # or qsharp.TargetProfile.Unrestricted
    
  7. 프로그램을 작성합니다 Q# . 예를 들어 다음 Q# 프로그램은 임의 비트를 생성합니다. 입력 인수의 사용을 설명하기 위해 이 프로그램은 정수, n및 각도 배열을 angle입력으로 사용합니다.

    %%qsharp
    open Microsoft.Quantum.Measurement;
    open Microsoft.Quantum.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;
    }
    
  8. 다음으로 세션을 만듭니다. 작업을 세 번 실행 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]
    

    중요

    인수를 작업에 매개 변수로 전달할 때 를 호출qsharp.compile할 때 식에 형식이 Q# 지정됩니다. 즉, 인수의 서식을 개체로 Q# 지정하는 데 주의해야 합니다. 이 예제에서는 Python의 배열이 이미 [item0, item1, ...]로 인쇄되어 있으므로 입력 인수가 서식과 Q# 일치합니다. 다른 Python 데이터 구조의 경우 호환되는 방식으로 에 삽입된 Q# 문자열 값을 가져오기 위해 더 많은 처리가 필요할 수 있습니다.

  9. 세션을 만든 후에는 를 사용하여 workspace.list_session_jobs 세션의 모든 작업 목록을 검색할 수 있습니다. 자세한 내용은 세션 관리 방법을 참조하세요.

모니터링 세션

Quantum 작업 영역의 작업 관리 블레이드를 사용하여 세션 및 세션과 연결되지 않은 개별 작업을 포함하여 제출된 모든 최상위 항목을 볼 수 있습니다.

  1. Quantum 작업 영역에서 작업 관리 블레이드를 선택합니다.
  2. 세션 유형의 작업을 식별 합니다. 이 보기 에서는 열 ID 에서 세션의 고유 ID를 보고 상태를 모니터링할 수 있습니다. 세션의 상태는 다음과 같습니다.
    • 대기 중: 세션 내의 작업이 실행되고 있습니다.
    • 성공: 세션이 성공적으로 종료되었습니다.
    • TimeOut: 세션 내에서 10분 동안 새 작업이 제출되지 않으면 해당 세션의 시간이 초과됩니다. 자세한 내용은 세션 시간 제한을 참조하세요.
    • 실패: 세션 내의 작업이 실패하면 해당 세션이 종료되고 실패의 상태 보고합니다. 자세한 내용은 세션 내의 작업 실패 정책을 참조하세요.
  3. 자세한 내용을 보려면 세션 이름을 클릭합니다.
  4. 세션 내의 모든 작업 목록을 보고 해당 상태 모니터링할 수 있습니다.

대상 동작

각 양자 하드웨어 공급자는 세션 내에서 작업의 우선 순위를 가장 잘 관리하기 위해 자체 추론을 정의합니다.

Quantinuum

세션 내의 작업을 Quantinuum target에 제출하도록 선택하는 경우 세션은 서로 1분 이내에 작업을 큐에 대기하는 한 하드웨어에 대한 단독 액세스 권한을 갖습니다. 그런 다음 표준 큐 및 우선 순위 지정 논리를 사용하여 작업을 수락하고 처리합니다.