적응형 target 프로필을 사용하여 하이브리드 양자 컴퓨팅 작업 실행
하이브리드 컴퓨팅은 클래식 및 양자 컴퓨팅 프로세스를 결합하여 복잡한 문제를 해결합니다.
하이브리드 컴퓨팅에서 클래식 코드는 중간 회로 측정값에 따라 양자 연산의 실행을 제어하고 물리적 큐비트는 활성 상태로 유지됩니다. 단일 양자 프로그램에서 중첩된 조건부, 루프 및 함수 호출과 같은 일반적인 프로그래밍 기술을 사용하여 복잡한 문제를 실행하여 필요한 샷 수를 줄일 수 있습니다. 큐비트 재사용 기술을 사용하면 더 적은 수의 큐비트를 사용하여 컴퓨터에서 더 큰 프로그램을 실행할 수 있습니다.
이 문서에서는 프로필을 사용하여 QIR Adaptive RItarget Azure Quantum에 하이브리드 작업을 제출하는 방법을 설명합니다. 적응 RI target 프로필은 중간 회로 측정, 측정 기반 제어 흐름, 큐비트 재설정 및 클래식 정수 계산을 지원합니다.
필수 조건
- 활성 구독이 있는 Azure 계정. Azure 계정이 없는 경우 무료로 등록하고 종량제 구독에 등록합니다.
- Azure Quantum 작업 영역 자세한 내용은 Azure Quantum 작업 영역 만들기를 참조하세요.
- 독립 실행형 프로그램을 제출 Q# 하려면 다음 필수 구성 요소가 필요합니다.
- Azure Quantum Development Kit 확장이 설치된 Visual Studio Code.
- Azure Quantum Development Kit 확장의 최신 버전입니다.
- Python + Q# 프로그램을 제출하려면 다음 필수 구성 요소가 필요합니다.
Python 및 Pip가 설치된 Python 환경입니다.
Azure Quantum
azure-quantum
및qsharp
패키지.pip install --upgrade azure-quantum qsharp
targets 지원됨
하이브리드 양자 컴퓨팅 작업을 실행하려면 Adaptive RI target 프로필을 지원하는 양자 공급자를 선택해야 합니다.
현재 Azure Quantum의 적응형 target 프로필은 Quantinuumtargets에서 지원됩니다.
적응형 RI 작업 제출
하이브리드 양자 컴퓨팅 작업을 제출하려면 RI가 "qubit Reset와 Integer computations"를 의미하는 프로필로 QIR Adaptive RI구성 target 해야 합니다.
이 프로필은 QIR Adaptive RItarget 중간 회로 측정, 측정 기반 제어 흐름, 큐비트 재설정 및 클래식 정수 계산을 지원합니다.
하이브리드 양자 작업을 독립 실행형 프로그램 또는 Python + Q# 프로그램으로 Azure Quantum Q# 에 제출할 수 있습니다. 하이브리드 양자 작업에 대한 프로필을 구성 target 하려면 다음 섹션을 참조하세요.
Visual Studio Code에서 하이브리드 작업에 대한 프로필을 구성 target 하려면 다음 단계를 수행합니다.
- Q# Visual Studio Code에서 프로그램을 엽니다.
- 보기 -> 명령 팔레트를 선택하고 Q#를 입력합니다. Azure Quantum QIR target 프로필을 설정합니다. Enter 키를 누릅니다.
- QIR Adaptive RI를 선택합니다.
프로필로 target 설정 QIR Adaptive RI 하면 프로그램을 하이브리드 양자 작업으로 Quantinuum에 제출할 Q# 수 있습니다.
- 보기 - 명령 팔레트를 선택하고 다음을 입력Q#합니다. Azure Quantum 작업 영역에 연결합니다.> Enter 키를 누릅니다.
- Azure 계정을 선택하고 프롬프트에 따라 기본 디렉터리, 구독 및 작업 영역에 연결합니다.
- 연결되면 탐색기 창에서 Quantum 작업 영역을 확장합니다.
- 작업 영역을 확장하고 Quantinuum 공급자를 확장합니다.
- 사용 가능한 targetQuantinuum(예 : quantinuum.sim.h1-1e)을 선택합니다.
- 이름 오른쪽에 있는 재생 아이콘을 target 선택하여 현재 Q# 프로그램 제출을 시작합니다.
- 작업 및 샷 수를 식별하는 이름을 추가합니다.
- 작업을 제출하려면 Enter 키를 누릅니다. 작업 상태가 화면 아래쪽에 표시됩니다.
- 작업을 확장하고 작업을 마우스로 가리키면 작업 시간과 상태가 표시됩니다.
지원되는 기능
다음 표에서는 Azure Quantum에서 Quantinuum을 사용하여 하이브리드 양자 컴퓨팅에 지원되는 기능을 나열합니다.
지원되는 기능 | 주의 |
---|---|
Dynamics 값 | 값이 측정 결과에 따라 달라지는 부울 및 정수 |
반복 | 클래식으로 바인딩된 루프만 |
임의 제어 흐름 | if/else 분기 사용 |
중간 회로 측정 | 클래식 레지스터 리소스 활용 |
큐비트 재사용 | 지원 여부 |
실시간 클래식 컴퓨팅 | 부가된 64비트 정수 산술 연산 클래식 레지스터 리소스 활용 |
QDK는 선택한 target언어 기능이 지원되지 않는 경우 Q# 특정 피드백을 제공합니다target. Q# 하이브리드 양자 작업을 실행할 때 프로그램에 지원되지 않는 기능이 포함된 경우 디자인 타임에 오류 메시지가 표시됩니다. 자세한 내용은 QIR 위키 페이지를 참조 하세요.
참고 항목
지원하지 않는 기능을 target 사용할 Q# 때 적절한 피드백을 얻으려면 적절한 QIR Adaptive RItarget 프로필을 선택해야 합니다.
지원되는 기능의 작동을 확인하려면 다음 코드를 Q# 파일에 복사하고 후속 코드 조각을 추가합니다.
import Microsoft.Quantum.Measurement.*;
import Microsoft.Quantum.Math.*;
import Microsoft.Quantum.Convert.*;
operation Main() : Result {
use (q0, q1) = (Qubit(), Qubit());
H(q0);
let r0 = MResetZ(q0);
// Copy here the code snippets below to see the supported features
// in action.
// Supported features include dynamic values, classically-bounded loops,
// arbitrary control flow, and mid-circuit measurement.
r0
}
Quantinuum은 동적 부울 및 정수를 지원합니다. 이는 측정 결과에 의존하는 부울 및 정수를 의미합니다. r0
동적 부울 및 정수 값을 생성하는 데 사용할 수 있는 형식입니다Result
.
let dynamicBool = r0 != Zero;
let dynamicBool = ResultAsBool(r0);
let dynamicInt = dynamicBool ? 0 | 1;
Quantinuum은 동적 부울 및 정수를 지원합니다. 그러나 double과 같은 다른 데이터 형식에 대한 동적 값은 지원하지 않습니다. 다음 코드를 복사하여 동적 값의 제한 사항에 대한 피드백을 확인합니다.
let dynamicDouble = r0 == One ? 1. | 0.; // cannot use a dynamic double value
let dynamicInt = r0 == One ? 1 | 0;
let dynamicDouble = IntAsDouble(dynamicInt); // cannot use a dynamic double value
let dynamicRoot = Sqrt(dynamicDouble); // cannot use a dynamic double value
일부 데이터 형식에는 동적 값이 지원되지 않지만 이러한 데이터 형식은 여전히 정적 값과 함께 사용할 수 있습니다.
let staticRoot = Sqrt(4.0);
let staticBigInt = IntAsBigInt(2);
지원되는 형식화된 동적 값도 특정 상황에서 사용할 수 없습니다. 예를 들어 Quantinuum은 동적 배열, 즉 크기가 측정 결과에 따라 달라지는 배열을 지원하지 않습니다. Quantinuum은 동적으로 바인딩된 루프도 지원하지 않습니다. 다음 코드를 복사하여 동적 값의 제한 사항을 확인합니다.
let dynamicInt = r0 == Zero ? 2 | 4;
let dynamicallySizedArray = [0, size = dynamicInt]; // cannot use a dynamically-sized array
let staticallySizedArray = [0, size = 10];
// Loops with a dynamic condition are not supported by Quantinuum.
for _ in 0..dynamicInt {
Rx(PI(), q1);
}
// Loops with a static condition are supported.
let staticInt = 3;
for _ in 0..staticInt {
Rx(PI(), q1);
}
Quantinuum은 정적 조건과 동적 조건을 모두 사용하여 분기를 포함한 if/else
제어 흐름을 지원합니다. 동적 조건의 분기를 측정 결과에 따라 분기라고도 합니다.
let dynamicInt = r0 == Zero ? 0 | 1;
if dynamicInt > 0 {
X(q1);
}
let staticInt = 1;
if staticInt > 5 {
Y(q1);
} else {
Z(q1);
}
Quantinuum은 클래식 조건 및 식을 포함하는 if
루프를 지원합니다.
for idx in 0..3 {
if idx % 2 == 0 {
Rx(ArcSin(1.), q0);
Rz(IntAsDouble(idx) * PI(), q1)
} else {
Ry(ArcCos(-1.), q1);
Rz(IntAsDouble(idx) * PI(), q1)
}
}
Quantinuum은 중간 회로 측정, 즉 측정 결과에 따라 분기를 지원합니다.
if r0 == One {
X(q1);
}
let r1 = MResetZ(q1);
if r0 != r1 {
let angle = PI() + PI() + PI()* Sin(PI()/2.0);
Rxx(angle, q0, q1);
} else {
Rxx(PI() + PI() + 2.0 * PI() * Sin(PI()/2.0), q1, q0);
}
하이브리드 양자 컴퓨팅 작업의 비용 예측
먼저 에뮬레이터에서 실행하여 Quantinuum 하드웨어에서 하이브리드 양자 컴퓨팅 작업을 실행하는 비용을 예측할 수 있습니다.
에뮬레이터에서 성공적으로 실행한 후:
- Azure Quantum 작업 영역에서 작업 관리를 선택합니다.
- 제출한 작업을 선택합니다.
- 작업 세부 정보 팝업에서 비용 추정을 선택하여 사용된 eHQC(Quantinuum 에뮬레이터 크레딧)를 확인합니다. 이 숫자는 Quantinuum 하드웨어에서 작업을 실행하는 데 필요한 HQC(Quantinuum 양자 크레딧)의 수로 직접 변환됩니다.
참고 항목
Quantinuum은 조건부로 실행되었는지 여부에 관계없이 전체 회로의 등록을 취소하고 모든 코드 경로에 대한 비용을 계산합니다.
하이브리드 양자 컴퓨팅 샘플
다음 샘플은 코드 샘플 리포지토리에서 Q# 찾을 수 있습니다. 하이브리드 양자 컴퓨팅을 위한 현재 기능 집합을 보여 줍니다.
3큐비트 반복 코드
이 샘플에서는 비트 대칭 이동 오류를 감지하고 수정하는 데 사용할 수 있는 3큐비트 반복 코드를 만드는 방법을 보여 줍니다.
통합 하이브리드 컴퓨팅 기능을 활용하여 논리 큐비트 레지스터의 상태가 일관된 동안 오류 수정이 수행된 횟수를 계산합니다.
코드 샘플 은 여기에서 찾을 수 있습니다.
반복 단계 추정
이 샘플 프로그램은 Q#. 반복 단계 추정을 사용하여 큐비트와 ancilla 큐비트에 인코딩된 target 두 개의 2차원 벡터 사이의 내부 곱을 계산합니다. 측정에 사용되는 유일한 큐비트인 추가 컨트롤 큐비트도 초기화됩니다.
회로는 큐비트와 ancilla 큐비트에서 target 벡터 쌍을 인코딩하여 시작합니다. 그런 다음, Oracle 연산자를 $\ket +$ 상태로 설정된 컨트롤 큐비트에서 제어되는 전체 레지스터에 적용합니다. 제어된 Oracle 연산자는 컨트롤 큐비트의 $\ket 1$ 상태에 대한 단계를 생성합니다. 그런 다음, 측정 시 단계를 관찰할 수 있도록 H 게이트를 컨트롤 큐비트에 적용하여 읽을 수 있습니다.
코드 샘플 은 여기에서 찾을 수 있습니다.
참고 항목
이 샘플 코드는 오스트레일리아의 KPMG Quantum 팀 멤버가 작성했으며 MIT 라이선스에 속합니다. 제한된 루프, 런타임 시 클래식 함수 호출, 중첩된 조건부 if 문, 중간 회로 측정 및 큐비트 재사용의 확장된 기능을 QIR Adaptive RItargets 보여 줍니다.