Q# 프로그래밍 언어 및 Quantum 개발 키트란?

Q#은 양자 알고리즘을 개발하고 실행하기 위한 Microsoft의 오픈 소스 프로그래밍 언어입니다. 이는 일련의 도구를 제공하여 양자 소프트웨어 개발 프로세스를 지원하는 SDK인 QDK(Quantum Development Kit)의 일부입니다.

프로그래밍 언어인 Q#은 Python, C# 및 F#에서 친숙한 요소를 가져오고 반복, if/then 문 및 공통 데이터 형식을 사용하여 프로그램을 작성하는 기본 절차 모델을 지원합니다. 또한 repeat-until-success 및 적응형 단계 예측과 같은 새로운 양자별 데이터 구조 및 연산을 도입하여 양자 및 기존 계산을 통합할 수 있습니다. 예를 들어, 기존 프로그램의 흐름 제어는 양자 측정의 결과를 기반으로 할 수 있습니다.

Quantum 개발 키트를 사용하면 양자 하드웨어에서 실행되는 프로그램을 빌드하거나 다양한 양자 솔루션 및 기술을 갖춘 개방형 클라우드 에코시스템인 Azure Quantum양자 유도 최적화 솔버에서 실행되는 문제를 공식화할 수 있습니다. QDK는 양자 컴퓨팅을 위한 Q#, QiskitCirq에 대한 지원을 제공하므로 이미 다른 개발 언어로 작업 중인 경우에도 Azure Quantum에서 회로를 실행할 수 있습니다.

Q# 시작

바로 시작하려면 설치 없이 Azure Quantum 포털에서 Q#을 탐색할 수 있습니다. 자세한 내용은 Q# 및 Azure Quantum Notebook 시작를 참조하세요.

다른 개발 환경 옵션은 Quantum 개발 키트 설정을 참조하세요.

양자 프로그래밍 언어 Q#

Q#은 양자 알고리즘을 표현하기 위한 오픈 소스 고급 양자 프로그래밍 언어입니다. 하드웨어에 구애받지 않고 전체 범위의 양자 애플리케이션으로 크기 조정하고 실행을 최적화하도록 설계되었습니다. Q# 언어 개발 프로젝트에 대한 자세한 내용은 GitHub의 Q# 및 핵심 라이브러리 디자인 리포지토리를 참조하세요.

양자 및 클래식 계산과의 통합

Q#은 높은 수준의 추상화를 제공하는 독립 실행형 언어입니다. 양자 상태 또는 회로의 개념은 없습니다. 그 대신, Q#은 기존 프로그래밍 언어와 매우 비슷하게 명령문과 식을 사용하여 프로그램을 구현합니다. 함수 및 제어 흐름 구문 지원과 같은 고유의 양자 기능은 단계 예측, 양자 화학 알고리즘 등을 쉽게 표현합니다.

Q# 언어는 다양한 기능을 제공하는 클래식 컴퓨팅과 양자 컴퓨팅의 통합을 지원합니다. 따라서 임의 위상 추정 연산 등, 고정된 양자 게이트 시퀀스의 회로 모델에서 직접 표현하기 어려운 적응형 알고리즘을 깔끔하게 표현할 수 있습니다.

Q#은 알고리즘을 실행하는 동안 일반적인 클래식 흐름 제어를 지원합니다. 특히 클래식 흐름 제어는 양자 측정 결과를 기반으로 하므로 중간 측정값에 의존하는 항목을 훨씬 쉽게 작성할 수 있습니다. 예를 들어 Grover 검색과 같은 확률적 알고리즘에 필요한 루프는 결과가 오라클을 충족하는지 테스트하기 위해 클래식 드라이버로 돌아가고 그렇지 않으면 다시 실행할 필요 없이도 Q#에서 쉽게 표현할 수 있습니다.

불투명 참조로서의 큐비트

Q#에서 큐비트는 필요할 때 런타임에서 요청되고 더 이상 사용되지 않을 때 반환되는 리소스입니다. 이는 클래식 언어가 힙 메모리를 처리하는 방식과 비슷합니다.

Q#에서 큐비트는 실제이든 논리적이든(오류 수정) 특정 2-상태 Quantum 시스템에 대한 참조를 나타내는 불투명 데이터 형식으로 모델링됩니다. 여기에서 양자 연산이 수행될 수 있습니다. 이는 큐비트의 연산 보기입니다. 큐비트는 큐비트에 대해 수행할 수 있는 연산으로 정의됩니다.

프로그램의 큐비트 변수에서 실제 논리 또는 물리적 큐비트로의 매핑은 런타임에 의해 결정되며, 해당 매핑은 토폴로지 및 대상 디바이스의 기타 세부 정보가 알려질 때까지 지연될 수 있습니다. 런타임은 실행 중에 필요한 큐비트 상태 전송 및 다시 매핑을 포함하여 알고리즘이 실행되도록 허용하는 매핑을 결정합니다.

Q#에 사용된 표현에는 모든 실제 양자 컴퓨팅이 부작용에 의해 수행된다는 흥미로운 의미가 있습니다. 컴퓨터의 양자 상태와 직접 상호 작용할 수 있는 방법은 없습니다. 소프트웨어 표현이 전혀 없습니다. 대신 양자 상태를 수정하는 부작용이 있는 큐비트 엔터티에 대한 연산을 수행합니다. 효과적으로, 컴퓨터의 양자 상태는 접근자 기본 형태(측정)의 작은 집합을 통하지 않고는 액세스할 수 없는 불투명한 전역 변수입니다. 그리고 이러한 접근자조차도 양자 상태에 부작용이 있으므로 진정한 접근자가 아니라 실제로 "결과가 있는 돌연변이"도 마찬가지입니다.

물리학의 법칙 존중

양자 프로그램은 물리학의 법칙을 존중해야 합니다. 예를 들어 Q#에서 큐비트의 상태를 복사하거나 큐비트 상태에 직접 액세스할 수 없습니다.

따라서 Q#은 큐비트 상태 또는 양자 역학의 다른 속성을 직접 조사할 수 있는 기능이 없으므로 Q# 프로그램이 모든 양자 컴퓨터에서 실제로 실행될 수 있음을 보장합니다. 대신 Q# 프로그램에는 DumpOperation operation처럼, 큐비트에서 클래식 정보를 추출하는 연산함수를 호출하는 기능이 있습니다. 이렇게 시뮬레이터를 통한 디버깅을 촉진하는 유효성 검사 및 상태 검사가 가능합니다. 자세한 정보는 테스크 및 디버깅을 참조하세요.

하드웨어 독립성

Q#은 하드웨어에 독립적입니다. 즉, 향후에 하드웨어가 어떻게 발전하는지에 관계없이 강력한 양자 컴퓨팅 개념을 표현하고 활용하는 수단을 제공합니다. 광범위한 애플리케이션에서 사용할 수 있도록 Q#을 사용하면 재사용 가능한 구성 요소와 추상화 계층을 빌드할 수 있습니다. 증가하는 양자 하드웨어 크기로 성능을 달성하기 위해 Q# 양자 프로그래밍 언어는 애플리케이션과 개발 활동 모두의 확장성을 보장합니다. 이러한 계산은 매우 복잡하기 때문에 추가 하드웨어 개발이 필요하지만, Azure Quantum의 다양한 양자 하드웨어 백엔드에서 실행되도록 Q# 프로그램의 목표를 잡을 수 있습니다.

효율적인 실행

Q# 언어는 호출되는 컨텍스트와 상관없이 양자 구성 요소의 실행을 최적화하기 위해 정보를 표현하는 데 중점을 둡니다. Q#을 사용하면 개발자가 계산에 대한 지식을 전달할 수 있으므로 컴파일러가 개발자가 사용할 수 없는 엔드투엔드 애플리케이션에 대한 정보를 활용하여 명령으로 변환하는 방법에 대해 합리적인 결정을 내릴 수 있습니다.

QDK 기능 및 Q# 프로그램에 적합한 일반적인 부분에 대해 자세히 알아보려면 양자Q# 프로그래밍 언어 사용자 가이드를 참조하세요.

Quantum Development Kit

Quantum Development Kit는 일반 도구 및 언어와 함께 사용하여 Quantum 하드웨어나 클라우드 기반 또는 로컬 Quantum 시뮬레이터에서 실행되는 Quantum 애플리케이션을 개발할 수 있도록 완전한 기능을 갖춘 Q#용 개발 키트입니다. Q# 프로그램은 독립 실행형 애플리케이션으로 컴파일하거나 Jupyter Notebook에서 실행하거나 Python 또는 .NET 언어로 작성된 호스트 프로그램에서 호출할 수 있습니다.

프로그램을 컴파일하고 실행하면 퀀텀 시뮬레이터의 인스턴스가 만들어지고 Q# 코드가 전달됩니다. 시뮬레이터는 Q# 코드를 사용하여 큐비트를 만들고(퀀텀 입자 시뮬레이션), 변환을 적용하여 해당 상태를 수정합니다. 그런 다음, 시뮬레이터의 양자 연산 결과가 프로그램에 반환됩니다. 시뮬레이터에서 Q# 코드를 격리하면 알고리즘이 양자 물리학 법칙을 따르고 양자 컴퓨터에서 올바르게 실행될 수 있습니다.

Q# 컴파일러, Q# 라이브러리 및 양자 시뮬레이터를 포함하여 Q# 프로그램을 작성하고 실행하는 데 필요한 모든 항목은 Azure Portal의 호스트되는 Jupyter Notebook에 미리 배포됩니다. QDK는 로컬 컴퓨터에서 설치 및 실행할 수도 있으므로 기본 설정 IDE 및 언어를 로컬에서 사용하고 Azure Quantum의 양자 하드웨어 또는 클라우드 기반 시뮬레이터에 작업을 제출하거나 로컬 시뮬레이터로 작업할 수 있습니다. 자세한 내용은 양자 개발 환경 구성을 참조하세요.

QDK를 사용한 Quantum 개발 워크플로

다음 다이어그램에서는 Azure Quantum에서 아이디어 수준의 양자 프로그램이 완벽하게 구현되는 단계와 각 단계를 위해 QDK에서 제공하는 도구를 보여 줍니다.

양자 프로그래밍 개발 워크플로를 보여 주는 다이어그램

참고

워크플로의 모든 단계에 동일한 Q# 코드를 사용합니다. 단기적으로는 현재 하드웨어 제한 사항을 고려하여 일부 코드 조정이 필요할 수 있습니다. 그러나 장기적으로는 코드 수정 없이도 다양한 시뮬레이터와 하드웨어 공급자 간을 전환할 수 있습니다.

양자 코드 작성

추가 소프트웨어를 설치하지 않고 Q# 프로그램 연습을 시작하고 작성하기 위해, Azure Portal Azure Quantum 작업 영역에서 제공하는 호스트된 Jupyter Notebook을 사용할 수 있습니다. 샘플 갤러리에는 주석이 달린 Notebook 샘플 컬렉션이 포함되어 있습니다. 클라우드 기반 시뮬레이터 또는 실제 양자 컴퓨터에서 탐색하고 실행하려는 샘플을 선택합니다.

로컬 개발 환경을 선호하는 경우 IQ# 커널에서 Jupyter Notebook이나, Visual Studio Code 및 Visual Studio 2022용 QDK 확장을 사용하여 Q# 프로그램을 만든 다음, 양자 하드웨어 또는 클라우드 기반이나 로컬 시뮬레이터에 대해 실행할 수 있습니다.

어느 환경을 선택하던 Q# 자습서를 따라 양자 프로그램 작성을 시작하여 중첩, 얽힘, Grover의 양자 알고리즘 및 기타 양자 현상 등, 양자 개념을 탐색할 수 있습니다.

Azure 계정이 없고 QDK를 로컬로 설치하지 않고 Q#을 사용하려는 경우 Binder를 사용하여 Jupyter Notebook 온라인에서 Q#샘플을 실행할 수 있습니다.

도메인별 라이브러리 탐색

Q# 라이브러리를 사용하면 코드를 높은 수준으로 유지하여 낮은 수준의 연산 시퀀스를 설계하지 않고도 복잡한 양자 연산을 실행할 수 있습니다. 새 Q# 프로젝트에는 Q#에서 양자 프로그램을 작성할 때 사용할 수 있는 필수적이고 매우 유용한 함수 및 연산 세트를 제공하는 Q#표준 라이브러리가 자동으로 포함됩니다.

표준 라이브러리 외에도 QDK에는 양자 컴퓨터에서 양자 역학 및 전자 구조 문제를 시뮬레이션하기 위한 양자 화학 라이브러리, 하이브리드 양자/클래식 기계 학습 실험을 실행하기 위해 양자 컴퓨팅을 활용하는 순차 분류자의 구현을 제공하는 양자 기계 학습 라이브러리 및 광범위한 숫자 기능을 지원하는 양자 숫자 라이브러리가 포함되어 있습니다.

시뮬레이터에서 프로그램 실행

프로그램을 작성한 후 QDK는 양자 시스템의 작동을 시뮬레이션하는 전통적 프로그램인 양자 시뮬레이터 세트를 제공하며, 실제 하드웨어 액세스 없이도 프로그램의 소규모 인스턴스를 실행하고 어떻게 작동하는지 확인할 수 있습니다. 전체 상태 양자 시뮬레이터, 제한된 범위의 Toffoli 시뮬레이터, 대규모 큐비트가 있는 시스템용 스파스 시뮬레이터에서 양자 프로그램을 실행하거나, 노이즈 시뮬레이터를 사용하여 노이즈의 영향을 받는 환경에서 Q# 프로그램의 동작을 시뮬레이션할 수도 있습니다.

양자 시뮬레이터의 전체 목록을 참조하세요.

리소스 예측

양자 하드웨어에서 실행하기 전에 먼저 기존 하드웨어에서 프로그램을 실행할 수 있는지와 얼마나 많은 리소스를 소비하는지를 파악해야 합니다. 추적 시뮬레이터를 사용하여 필요한 큐비트 및 양자 게이트 수를 예측하고 양자 프로그램의 일부인 클래식 코드를 디버그할 수 있습니다.

Azure Portal Azure Quantum Resource Estimator 대상에 양자 프로그램을 제출할 수도 있습니다. Azure Quantum Resource Estimator는 큐비트 매개 변수, 양자 오류 수정 코드 및 오류 예산에 대한 가정을 고려하여 사후 레이아웃 물리적 리소스 예측을 계산합니다. 무료이며 Azure 계정이 필요합니다.

Azure Quantum 서비스에 작업 제출

Azure Quantum은 다양한 양자 솔루션 및 기술을 갖춘 Azure의 클라우드 양자 컴퓨팅 서비스입니다. Azure Quantum은 양자 하드웨어에서 프로그램을 실행할 수 있는 양자 컴퓨팅에 대한 개방적이고 유연하며 미래 지향적인 경로를 보장합니다. 여러 양자 시스템에서 Qiskit, Cirq 및 Q# 프로그램을 실행할 수 있습니다. 지원되는 하드웨어 공급자의 현재 목록은 Quantum 컴퓨팅 공급자를 참조하세요.

처음 사용자는 참여하는 각 양자 하드웨어 공급자와 함께 사용할 수 있는 무료 $500(USD)Azure Quantum 크레딧 을 자동으로 받습니다. 크레딧을 모두 사용했는데 더 필요한 경우 Azure Quantum Credits 프로그램에 신청할 수 있습니다.

Azure Quantum 작업 영역을 만든 후에는 로컬 및 온라인 모두에서 선호하는 개발 환경을 통해 Q# 프로그램(작업이라고도 함)을 Azure Quantum에 제출할 수 있습니다. 자세한 정보는 Q# 작업 제출 방법을 참조하세요. Qiskit 또는 Cirq로 작성된 양자 회로를 실행하고 제출할 수도 있습니다.

다음 다이어그램은 작업을 제출한 후의 기본 워크플로를 보여줍니다.

Azure Quantum에 작업을 제출한 후의 작업을 보여 주는 다이어그램

Azure Quantum은 업계 선두 업체로부터 오늘날 가장 강력하고 다양한 양자 리소스를 제공합니다. Azure Quantum과 QDK를 통해 양자 컴퓨팅양자 유도 최적화 프로그램을 작성하고 Azure Quantum에 제출하여 양자 하드웨어최적화 솔버에서 실행할 수 있습니다.

다음 단계

자세히 알아보려면 Quantum Katas에서 일반적인 양자 연산 및 큐비트 조작 방법과 같은 양자 컴퓨팅 개념을 이해하기 쉽게 소개합니다.