Azure Quantum에 양자 작업 제출

이 문서에서는 Azure Portal, Python, Jupyter Notebook 또는 Azure CLI를 사용하여 Azure Quantum에 양자 컴퓨팅 작업을 제출하는 단계를 알아봅니다.

참고

이 항목의 예제에서는 Microsoft Quantum Development Kit(클래식 QDK)를 사용하며 아직 Azure Quantum Development Kit Preview(최신 QDK)와 호환되지 않습니다. 최신 QDK에 대한 자세한 내용은 QSharp GitHub Wiki 참조하세요.

사전 요구 사항

작업 영역에 새 Notebook 만들기

  1. Azure Portal에 로그인하고 작업 영역을 선택합니다.
  2. 왼쪽 블레이드에서 Notebooks를 선택합니다.
  3. 내 Notebooks를 클릭하고 새로 추가를 클릭합니다.
  4. 커널 형식에서 IQ#을 선택합니다.
  5. 파일 이름(예: 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을 사용할 때의 유용한 팁입니다.

사전 요구 사항

참고

Python을 설치할 때 conda를 사용하여 설치 하는 옵션을 사용하는 것이 좋습니다. 이 문서의 단계에서는 conda 설치를 가정합니다.

Q# 및 Python을 사용한 양자 컴퓨팅

  1. 이전에 만든 conda 환경의 Python 환경에는 이미 qsharp Python 패키지가 포함되어 있습니다. 이 conda 환경이 활성화된 터미널에서 Python 스크립트를 실행하고 있는지 확인합니다.

  2. *.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);
          }
      }
      
  3. *.qs 파일과 동일한 폴더에 Python 스크립트를 만듭니다. Azure Quantum 기능은 import qsharp.azure를 실행하고 Python 명령을 호출하여 Azure Quantum과 상호 작용하면 사용할 수 있습니다. 레퍼런스를 보려면 qsharp.azurePython 명령 전체 목록을 참조하세요. 연결하려면 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 작업 영역의 작업을 식별하는 사용자 지정 작업 이름입니다.

  4. 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}
    
  5. 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'}]
    
  6. 특정 작업의 자세한 상태를 보려면 작업 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}
    

사전 요구 사항

Q# Jupyter Notebook을 사용하는 양자 컴퓨팅

  1. Conda 환경이 활성화된 터미널에서 jupyter notebook을 실행합니다. 그러면 Notebook 서버가 시작되고 브라우저에서 Jupyter가 열립니다.

  2. 새로 만들기Q# 을 통해 Q# Notebook을 만들고 Q# 프로그램을 작성합니다.

  3. Notebook에서 직접 Q# 작업을 작성합니다. 셀을 실행하면 Q# 코드가 컴파일되고 오류가 있는지 보고합니다.

    • 예를 들어 다음과 같은 Q# 작업을 작성할 수 있습니다.

      operation GenerateRandomBit() : Result {
          use q = Qubit();
          H(q);
          let r = M(q);
          Reset(q);
          return r;
      }
      
  4. Q# 작업을 정의한 후, %azure.* 매직 명령을 사용하여 작업을 연결하고 Azure Quantum에 제출합니다. Azure Quantum 작업 영역의 리소스 ID를 사용하여 연결합니다. 리소스 ID는 Azure Portal의 작업 영역 페이지에서 찾을 수 있습니다.

    “미국 서부” 이외의 Azure 지역에서 작업 영역을 만든 경우 이 항목을 %azure.connect에 대한 location 매개 변수로도 지정해야 합니다.

    • 예를 들어 다음 명령은 Azure Quantum 작업 영역에 연결하고 에서 ionq.simulatortarget작업을 실행합니다.

      %azure.connect "/subscriptions/.../Microsoft.Quantum/Workspaces/WORKSPACE_NAME" location="West US"
      
      %azure.target ionq.simulator
      
      %azure.execute GenerateRandomBit
      

      여기서 GenerateRandomBit는 Notebook에서 이미 정의한 Q# 작업입니다.

  5. 작업을 제출한 후 %azure.status 명령을 사용하여 상태를 확인하거나 %azure.output 명령을 사용하여 결과를 볼 수 있습니다. %azure.jobs 명령을 사용하여 모든 작업의 목록을 볼 수 있습니다.

다음은 Q# Jupyter Notebook을 사용할 때의 유용한 팁입니다.

사전 요구 사항

다음 항목이 컴퓨터에 설치되어 있는지 확인합니다.

Azure CLI를 사용하여 Azure Quantum에 작업 제출

다음 단계에서는 Azure CLI를 사용하여 양자 애플리케이션을 실행하고 Azure Quantum 작업 영역의 다른 공급자에서 을 선택하는 target 방법을 보여 줍니다.

Visual Studio Code 대한 Azure Quantum 확장이 설치되어 있으면 VS Code 내의 터미널 창에서 전체 Azure CLI 기능이 제공됩니다.

또한 az quantum 확장을 통해 사용할 수 있는 모든 명령 및 기능에 대한 전체 참조는 Azure CLI 설명서의 해당 섹션에서 확인할 수 있습니다.

참고

공급자는 양자 하드웨어, 시뮬레이터 또는 최적화 서비스로 구성된 파트너 양자 서비스입니다.

  1. 로그인 정보를 사용하여 Azure에 로그인합니다. 계정과 연결된 구독 목록을 가져옵니다.

    az login
    
  2. Azure 계정과 연결된 구독에서 사용하려는 구독을 지정합니다. Azure Portal의 작업 영역 개요에서 구독 ID를 찾을 수도 있습니다.

    az account set -s <Your subscription ID>
    
  3. 다음 명령을 사용하여 구독의 모든 Azure Quantum 작업 영역을 볼 수 있습니다.

    az quantum workspace list
    
  4. 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 명령을 사용하여 현재 작업 영역을 확인할 수 있습니다.

  1. 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
     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
    
  2. 새 작업을 제출하려면 명령줄을 사용하여 프로젝트가 포함된 디렉터리로 이동하고 작업을 제출합니다. 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를 비롯한 작업 정보를 출력합니다.

  3. 작업 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 명령을 사용합니다.

  1. 작업이 완료되면 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에서 작업의 상태를 확인할 수도 있습니다.

다음 단계