Q# 프로그램 시작 및 Visual Studio Code

이 문서에서는 VC 코드를 사용하여 VS Code를 사용하여 Q#, Jupyter Notebook 또는 Python 양자 컴퓨팅 작업을 만들고 Azure Quantum에 제출하는 단계를 찾습니다.

Azure Quantum에 Q# 작업 제출

VS Code를 사용하여 Q# 프로그램을 실행, 디버그 및 Azure Quantum에 제출하는 방법을 알아봅니다.

사전 요구 사항

설치 세부 정보는 VS Code에 최신 QDK 설치를 참조하세요.

Q# 샘플 프로그램 로드

  1. VS Code에서 파일 > 새 텍스트 파일을 선택하고 파일을 RandomNum.qs로 저장합니다.

  2. RandomNum.qs를 열고 를 입력sample한 다음, 옵션 목록에서 임의 비트 샘플을 선택하고 파일을 저장합니다.

    파일에서 샘플 단어를 작성할 때 코드 샘플 목록을 보여 주는 Visual Studio Code Q# 파일 스크린샷

참고

사용자 고유의 Q# 파일을 열 수도 있습니다. 이전 Q# 프로그램을 실행하고 오류가 발생하는 경우 최신 QDK로 프로그램 테스트 및 디버깅 또는 마이그레이션을 참조하세요.

Q# 프로그램 실행

  1. 기본 제공 시뮬레이터에서 로컬로 프로그램 실행을 테스트하려면 아래 @EntryPoint()명령 목록에서 실행을 클릭하거나 Ctrl+F5를 누릅니다. 출력이 디버그 콘솔에 표시됩니다.

  2. Azure Quantum에 제출하기 전에 프로그램을 디버그하려면 아래 @EntryPoint()명령 목록에서 디버그를 클릭하거나 F5 키를 누릅니다. 맨 위에 있는 디버깅 컨트롤을 사용하여 코드를 한 단계씩 실행, 전환 및 해제합니다. Q# 프로그램 디버깅에 대한 자세한 내용은 테스트 및 디버깅을 참조하세요.

    실행 및 디버그 명령으로 코드 렌즈를 찾을 수 있는 위치를 보여 주는 Visual Studio Code Q# 파일 스크린샷

빈도 히스토그램 그리기

빈도 히스토그램은 양자 프로그램을 여러 번 실행하여 얻은 결과 분포 또는 "샷"을 나타냅니다. 히스토그램의 각 막대는 가능한 결과에 해당하며, 그 높이는 결과가 관찰되는 횟수를 나타냅니다. 빈도 히스토그램은 이러한 결과의 확률 분포를 시각화하는 데 도움이 됩니다.

  1. 보기 -> 명령 팔레트를 선택하고 Q#: 실행 파일을 표시하고 히스토그램 옵션을 표시해야 하는 "히스토그램"을 입력합니다. 아래 @EntryPoint()명령 목록에서 히스토그램을 클릭할 수도 있습니다. Q# 히스토그램 창을 열려면 이 옵션을 선택합니다.

    히스토그램 명령을 사용하여 코드 렌즈를 찾을 수 있는 위치를 보여 주는 Visual Studio Code Q# 파일 스크린샷

  2. 프로그램을 실행할 수 있는 여러 샷 (예: 100발)을 입력하고 Enter 키를 누릅니 . 히스토그램은 Q# 히스토그램 창에 표시됩니다.

  3. 왼쪽 위 설정 아이콘 을 클릭하여 옵션을 표시합니다.

    설정을 표시하는 방법을 보여 주는 Visual Studio Code Q# 히스토그램 창 스크린샷

  4. 막대를 클릭하여 해당 결과의 백분율 을 표시합니다. 이 경우 0과 1의 두 가지 가능한 결과가 있으며 각 결과의 백분율은 50%에 가깝습니다.

    Visual Studio Code Q# 히스토그램 창을 스크린샷합니다.

마우스 스크롤 휠 또는 트랙 패드 제스처를 사용하여 히스토그램을 확대/축소할 수 있습니다. 확대하면 스크롤하는 동안 'Alt'를 눌러 차트를 이동하면 됩니다.

Azure Quantum에 연결하고 작업 제출

VS Code에서 직접 연결하고 작업을 제출할 수 있습니다. 이 예제에서는 Rigetti 시뮬레이터에 작업을 제출합니다.

  1. 보기 -> 명령 팔레트를 선택하고 Q#: Azure Quantum 작업 영역에 연결을 입력합니다. Enter 키를 누릅니다.

  2. Azure 계정을 선택하고 프롬프트에 따라 기본 디렉터리, 구독 및 작업 영역에 연결합니다.

    참고

    연결 문자열 있는 경우 연결 문자열을 선택하고 Azure Quantum 작업 영역에 해당하는 연결 문자열 붙여넣을 수 있습니다. 자세한 내용은 연결 문자열 사용하여 Quantum 작업 영역에 연결을 참조하세요.

  3. 연결되면 Explorer 창에서 Quantum 작업 영역을 확장합니다.

  4. 작업 영역을 확장하고 Rigetti 공급자를 확장합니다.

    참고

    Azure Quantum에 연결하는 데 문제가 있는 경우 작업 영역 이름 옆에 경고 아이콘이 표시됩니다. 작업 영역 이름을 마우스로 가리키면 오류 정보가 표시됩니다.

  5. 로 rigetti.sim.qvm을 target선택합니다.

    Rigetti 시뮬레이터를 로 target선택하는 방법을 보여 주는 Visual Studio Code 스크린샷

  6. 이름 오른쪽에 있는 재생 아이콘을 target 선택하여 현재 Q# 프로그램 제출을 시작합니다. 팝업이 표시되면 QIR target 프로필 변경을 선택하고 계속합니다.

    Rigetti 시뮬레이터target를 로 실행하는 방법을 보여 주는 Visual Studio Code 스크린샷

  7. 작업을 식별하는 이름을 추가합니다.

  8. 샷 수 또는 프로그램 실행 횟수를 추가합니다.

  9. Enter 키를 눌러 작업을 제출합니다. 작업 상태 화면 아래쪽에 표시됩니다.

  10. 작업을 확장하고 작업 위로 마우스를 가져가면 작업의 시간과 상태 표시됩니다.

  11. 결과를 보려면 작업 이름 옆에 있는 클라우드 아이콘을 선택하여 작업 영역 스토리지에서 결과를 다운로드하고 VS Code에 표시합니다.

    양자 작업의 결과를 다운로드하고 보는 방법을 보여 주는 Visual Studio Code 스크린샷

Azure Quantum에 Jupyter Notebooks 작업 제출

VS Code를 사용하여 Q# Jupyter Notebook 실행, 디버그 및 Azure Quantum에 제출하는 방법을 알아봅니다. 이 문서의 단계는 Azure Quantum 포털의 로컬 Jupyter 서버 또는 Notebook에 있는 Jupyter Notebook에도 적용됩니다.

사전 요구 사항

설치 세부 정보는 VS Code에 최신 QDK 설치를 참조하세요.

로컬 시뮬레이터에서 프로그램 실행 및 테스트

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

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

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

    import qsharp
    import azure.quantum
    
    • 모듈은 qsharp 셀에 %%qsharp 직접 Q# 코드를 입력할 수 있는 매직 명령을 활성화합니다.
    • 이 모듈은 azure-quantum Azure Quantum 작업 영역에 대한 연결을 제공합니다.

    참고

    Jupyter Python 커널 ipykernel 이 검색되지 않으면 VS Code에서 설치하라는 메시지를 표시합니다.

  4. 다른 셀을 추가하고 사용자가 지정한 임의 비트 수를 반환하는 이 Q# 코드를 입력합니다.

    %%qsharp
    
    operation Random() : Result {
        use q = Qubit();
        H(q);
        let result = M(q);
        Reset(q);
        return result
    }
    
    operation RandomNBits(N: Int): Result[] {
        mutable results = [];
        for i in 0 .. N - 1 {
            let r = Random();
            set results += [r];
        }
        return results
    }
    
  5. 작업을 테스트하려면 Notebook에 eval 이전에 정의된 Q# 작업을 호출할 수 있는 메서드를 사용할 수 있습니다.

    qsharp.eval("RandomNBits(4)")
    
    [Zero, One, One, Zero]
    
  6. 로컬 시뮬레이터로 프로그램을 실행하려면 메서드를 run 사용합니다. shots프로그램을 실행할 횟수 또는 를 지정하고 시뮬레이터는 결과를 Python 목록으로 반환합니다.

    qsharp.run("RandomNBits(4)", shots=10)
    
    [[One, One, One, One],
    [Zero, Zero, One, Zero],
    [One, Zero, Zero, One],
    [Zero, One, Zero, Zero],
    [One, Zero, One, One],
    [One, Zero, One, Zero],
    [One, One, One, Zero],
    [One, One, One, One],
    [Zero, Zero, Zero, One],
    [One, Zero, Zero, One]]
    

기본 프로필을 사용하여 작업 컴파일

로컬 양자 시뮬레이터에서 프로그램을 실행하는 경우 모든 유형의 Q# 프로그램을 제출할 수 있습니다. 그러나 Azure Quantum 하드웨어 targets 는 아직 모든 Q# 프로그램을 실행하는 데 필요한 전체 기능을 지원하지 않습니다. Q# 프로그램을 컴파일하고 Azure Quantum에 제출하려면 프로필을 설정 target 하여 하드웨어에서 지원하는 기능을 target Q#에 알려야 합니다. 현재 기본 프로필입니다. 자세한 내용은 Azure Quantum의 프로필 형식을 참조하세요.

Q# 인터프리터를 다시 초기화하고 기본 프로필로 프로그램을 컴파일하려면 다음을 수행합니다.

  1. 메서드를 init 사용하여 프로필을 설정합니다.

    qsharp.init(target_profile=qsharp.TargetProfile.Base)
    
  2. 인터프리터를 다시 초기화했기 때문에 새 프로필을 사용하여 코드를 다시 실행해야 합니다.

    %%qsharp
    
    operation Random() : Result {
        use q = Qubit();
        H(q);
        let result = M(q);
        Reset(q);
        return result
    }
    
    operation RandomNBits(N: Int): Result[] {
        mutable results = [];
        for i in 0 .. N - 1 {
            let r = Random();
            set results += [r];
        }
        return results
    }
    
  3. 다음으로 메서드를 compile 사용하여 프로그램의 진입점인 작업 또는 함수를 지정합니다. 이렇게 하면 코드를 QIR 형식으로 컴파일한 다음, 양자 하드웨어에 제출할 수 있습니다.

    MyProgram = qsharp.compile("RandomNBits(4)")
    

Azure Quantum에 연결하고 작업 제출

이제 프로그램을 올바른 형식으로 컴파일했으므로 Azure Quantum에 연결할 개체를 만듭니 azure.quantum.Workspace 다. 연결하려면 Azure Quantum 작업 영역의 리소스 ID를 사용합니다. 리소스 ID 및 위치는 Azure Portal 작업 영역 개요 페이지에서 복사할 수 있습니다.

  1. 새 셀에서 Azure Quantum 작업 영역에서 리소스 ID 및 위치를 입력합니다.

    MyWorkspace = azure.quantum.Workspace(
        resource_id = "MyResourceID",
        location = "MyLocation"
    )
    
  2. 메서드를 get_targets 사용하여 작업 영역에서 사용 가능한 하드웨어 targets 를 확인합니다.

    MyTargets = MyWorkspace.get_targets()
    print("This workspace's targets:")
    MyTargets
    
  3. 를 선택합니다.rigetti.sim.qvmtarget

    MyTarget = MyWorkspace.get_targets("rigetti.sim.qvm")
    
  4. 마지막으로 메서드를 submit 사용하여 매개 변수를 사용하여 프로그램을 제출하고 결과를 표시합니다.

    job = MyTarget.submit(MyProgram, "MyQuantumJob", shots=100)
    job.get_results()
    
    {'Histogram': ['[0, 0, 0, 0]',
      0.3,
      '[1, 0, 0, 0]',
      0.1,
      '[1, 1, 1, 1]',
      0.3,
      '[0, 1, 1, 1]',
      0.3]}
    
  5. 작업의 모든 속성은 에서 job.details액세스할 수 있습니다. 예를 들면 다음과 같습니다.

    print(job.details)
    print("\nJob name:", job.details.name)
    print("Job status:", job.details.status)
    print("Job ID:", job.details.id)
    
    {'additional_properties': {'isCancelling': False}, 'id': '0150202e-9638-11ee-be2f-b16153380354', 'name': 'MyQuantumJob', 'provider_id': 'rigetti'...}
    Job name: MyQuantumJob
    Job status: Succeeded
    Job ID: 0150202e-9638-11ee-be2f-b16153380354
    

Q# 작업을 사용하여 Python을 Azure Quantum에 제출

VS Code를 사용하여 Q# 작업을 호출하는 Python 프로그램을 작성하고, Python 명령 또는 Azure CLI를 사용하여 Azure에 연결하고, 작업을 제출하는 방법을 알아봅니다.

사전 요구 사항

설치 세부 정보는 VS Code에 최신 QDK 설치를 참조하세요.

Q# 작업 만들기 및 가져오기

qsharp 패키지를 사용하면 함수와 작업을 Q# 파일에 저장하고 Python 코드에서 함수 및 작업을 호출할 수 있는 Q# 프로젝트를 만들 수 있습니다. 이는 입력 매개 변수를 사용하는 프로그램을 시작해야 하는 경우에 특히 유용합니다.

  1. 단계에 따라 Q# 프로젝트를 만듭니다.

  2. 새 텍스트 파일을 열고 사용자가 지정한 난수의 비트를 반환하는 다음 Q# 코드를 추가하고 파일을 프로젝트에 로 source.qs저장합니다.

    참고

    이 Q# 코드에는 @EntryPoint Q# 프로그램과 같은 함수가 없지만(Azure Quantum에 Q# 작업 제출 참조) Jupyter Notebook 달리 네임스페이스가 필요합니다(Azure Quantum에 Jupyter Notebook 작업 제출 참조).

    namespace Sample {
    
      operation Random() : Result {
            use q = Qubit();
            H(q);
            let result = M(q);
            Reset(q);
            return result
      }
    
      operation RandomNBits(N: Int): Result[] {
            mutable results = [];
            for i in 0 .. N - 1 {
               let r = Random();
               set results += [r];
            }
            return results
      }
    }
    
  3. 동일한 폴더에서 다른 파일을 열고 로 randomNum.py저장합니다.

  4. 다음 코드를 추가하여 및 azure.quantum 모듈을 qsharp 가져옵니다.

    import qsharp
    import azure.quantum
    
  5. 다음으로, 코드를 추가하여 Q# 프로젝트 루트 폴더를 정의하고 로컬 시뮬레이터에서 target 작업을 테스트합니다. 작업은 네임스페이스에 의해< 호출됩니다>.<operation_name( )>이고, 이 경우 반환할 임의 비트 수를 전달합니다.

    qsharp.init(project_root = '/MyProjectRootFolder')
    print(qsharp.eval("Sample.RandomNBits(4)"))
    
    [Zero, One, One, Zero]
    
  6. 추가 shots 매개 변수를 전달하고 Python 목록에서 결과를 반환하는 메서드를 사용하여 작업을 run 테스트할 수도 있습니다. 에서 randomNum.py이전 print 문을 다음으로 바꿉니다.

    result = qsharp.run("Sample.RandomNBits(4)", shots=10)
    for x in result:
        print(x)
    
    [[One, One, One, One],
    [Zero, Zero, One, Zero],
    [One, Zero, Zero, One],
    [Zero, One, Zero, Zero],
    [One, Zero, One, One],
    [One, Zero, One, Zero],
    [One, One, One, Zero],
    [One, One, One, One],
    [Zero, Zero, Zero, One],
    [One, Zero, Zero, One]]
    

기본 프로필을 사용하여 작업 컴파일

로컬 양자 시뮬레이터에서 프로그램을 실행하는 경우 모든 유형의 Q# 프로그램을 제출할 수 있습니다. 그러나 Azure Quantum 하드웨어 targets 는 아직 모든 Q# 프로그램을 실행하는 데 필요한 전체 기능을 지원하지 않습니다. Q# 프로그램을 컴파일하고 Azure Quantum에 제출하려면 프로필을 설정 target 하여 하드웨어에서 target 지원하는 기능을 Q#에 알려야 합니다. 현재 기본 프로필입니다. 자세한 내용은 Azure Quantum의 프로필 형식을 참조하세요.

참고

VS Code의 Q# 전용 프로그램의 경우 VS Code는 기본 프로필을 자동으로 설정합니다.

  1. 메서드를 init 사용하여 프로필을 설정합니다.

    qsharp.init(target_profile=qsharp.TargetProfile.Base)
    
  2. 그런 다음 메서드를 compile 사용하여 프로그램의 진입점인 작업 또는 함수를 지정합니다. 그런 다음 컴파일된 프로그램을 양자 하드웨어에 제출할 수 있습니다.

    MyProgram = qsharp.compile("Sample.RandomNBits(4)")
    

Azure Quantum에 연결하고 작업 제출

Azure Quantum에 연결하고 Python에서 만든 Workspace 개체를 사용하여 작업을 제출하거나 Azure CLI를 사용하여 작업을 연결하고 제출할 수 있습니다. Azure CLI를 사용하려면 컴파일된 프로그램을 텍스트 파일로 저장하고 CLI 명령을 사용하여 해당 파일을 제출해야 합니다.

이제 프로그램을 올바른 형식으로 컴파일했으므로 Azure Quantum에 연결할 개체를 만듭니 azure.quantum.Workspace 다. 연결하려면 Azure Quantum 작업 영역의 리소스 ID를 사용합니다. 리소스 ID 및 위치는 Azure Portal 작업 영역 개요 페이지에서 복사할 수 있습니다.

  1. Azure Quantum 작업 영역에서 리소스 ID 및 위치를 채우는 에 다음 코드를 randomNum.py추가합니다.

    workspace = azure.quantum.Workspace(
        resource_id = "MyResourceID",
        location = "MyLocation"
    )
    
  2. 메서드를 get_targets 사용하여 작업 영역에서 사용 가능한 하드웨어 targets 를 표시합니다.

    MyTargets = workspace.get_targets()
    print("This workspace's targets:")
    for x in MyTargets:
        print(x)
    
  3. 를 선택합니다.rigetti.sim.qvmtarget

    MyTarget = workspace.get_targets("rigetti.sim.qvm")
    
  4. 마지막으로 메서드를 submit 사용하여 매개 변수를 사용하여 프로그램을 제출합니다. 작업 결과는 Python 사전으로 반환됩니다.

    job = MyTarget.submit(MyProgram, "MyPythonJob", shots=100)
    results = job.get_results()
    print("\nResults: ", results)
    
  5. 값만 추출하고 표시하려면 다음을 수행합니다.

    resultList = results.get("Histogram")
    for x in resultList:
        print(x)
    
    [0, 0, 0, 0]
    0.3
    [1, 0, 0, 0]
    0.1
    [1, 1, 1, 1]
    0.3
    [0, 1, 1, 1]
    0.3
    
  6. 작업의 모든 속성은 에서 job.details액세스할 수 있습니다. 예를 들면 다음과 같습니다.

    print(job.details)
    print("\nJob name:", job.details.name)
    print("Job status:", job.details.status)
    print("Job ID:", job.details.id)
    
    {'additional_properties': {'isCancelling': False}, 'id': '0fc396d2-97dd-11ee-9958-6ca1004ff31f', 'name': 'MyPythonJob', 'provider_id': 'rigetti'...}
    Job name: MyPythonJob
    Job status: Succeeded
    Job ID: fc396d2-97dd-11ee-9958-6ca1004ff31f
    

다음 단계