주 콘텐츠로 건너뛰기

양자 회로 실행하기

Olivia Lanes의 양자 회로 및 기본 요소(primitives)에 관한 동영상을 시청하거나, YouTube에서 별도 창으로 열어 보세요.

레슨 개요

이 레슨에서는 유틸리티 규모의 양자 계산을 실행하는 기본 사항을 개괄적으로 살펴봅니다. 양자 회로를 설계할 때 사용하는 양자 하드웨어부터 고려해야 할 원칙까지 다룹니다. 이 레슨을 마치면 다음 사항을 이해하게 됩니다:

  1. IBM® 양자 컴퓨터가 실제로 어떤 것인지 알게 됩니다. 양자 회로를 최적으로 설계하고 실행하려면 하드웨어 특성의 기본 사항을 알아야 합니다.

  2. Qiskit이 무엇인지, 프리미티브(primitives)가 무엇인지, 그리고 이를 활용하여 양자 회로를 생성하고 실행하는 방법을 배웁니다.

  3. 대규모 실험을 실행할 때 따르는 일반적인 워크플로를 이해합니다. 여기에는 사용 사례에 가장 적합한 프리미티브 선택, 문제를 양자 회로로 매핑하기, 그리고 오류 완화 및 억제 기법 적용이 포함됩니다. 이러한 기법을 통해 양자 컴퓨터의 성능을 최대한 끌어낼 수 있습니다.

하드웨어 – IBM 양자 프로세서

대규모 양자 회로를 최적으로 설계하는 방법을 이해하려면, 이 회로를 실제로 실행할 하드웨어에 대해 조금 알아야 합니다. 따라서 물리적 Qubit과 IBM 양자 프로세서에 대해 간략히 살펴보겠습니다.

IBM 양자 프로세서는 초전도 트랜스몬(transmon) Qubit으로 구축되며, 이는 *조지프슨 접합(Josephson junction)*과 커패시터가 병렬로 연결된 전기 회로입니다. 조지프슨 접합은 절연 장벽을 사이에 두고 두 초전도 금속 층이 겹쳐진 구조의 비선형 인덕터입니다. 매우 낮은 온도에서 초전도체 내의 전자들은 쌍을 이루어 쿠퍼 쌍(Cooper pair)이라 불리는 상태를 형성합니다. 쿠퍼 쌍은 자발적으로 절연 장벽을 터널링하여 접합의 한쪽에서 다른 쪽으로 이동할 수 있습니다. 이 터널링 동작이 비선형 특성을 만들어내어 Qubit을 구현하는 기초가 됩니다.

칩에는 마이크로파 전송선이 제작되어 Qubit에 마이크로파 신호를 전달합니다. 특정 주파수, 진폭, 형태, 지속 시간을 갖는 정밀하게 교정된 마이크로파 펄스를 전송선에 가하면 Qubit이 특정 동작을 수행하도록 할 수 있습니다. 이것이 양자 Gate의 기본 원리입니다. 칩은 이웃한 Qubit들이 헤비-헥스(heavy-hex) 격자라는 특정 격자 구조로 연결되도록 설계됩니다. 이 연결성, 즉 프로세서의 *토폴로지(topology)*는 회로를 설계할 때 중요하게 고려해야 할 요소로, 이후 레슨에서 자세히 다룰 예정입니다.

마이크로파 펄스에 대한 명령은 여러분의 컴퓨터에서 클라우드를 거쳐 상온의 제어 전자 장치로 전달되며, 이 장치는 명령을 해석하고 실제로 펄스를 생성합니다. 상온 제어 장치에서 펄스가 생성된 후, 케이블을 통해 희석 냉각기로 들어가 최종적으로 양자 칩에 도달합니다. 신호는 공진기를 거쳐 와이어본드(wirebond)를 통과한 뒤 전송선을 따라 Qubit으로 흐릅니다.

IBM은 전 세계에 수십 대의 양자 컴퓨터를 보유하고 있으며, 최근 100 Qubit 이상의 프로세서만을 갖추도록 전체 시스템을 업그레이드했습니다. 일부는 뉴욕 북부의 IBM 양자 데이터 센터에 위치하여 클라우드를 통해 누구나 사용할 수 있으며, 일부는 IBM Quantum® 네트워크 파트너를 위한 전용 온프레미스 시스템입니다. quantum.cloud.ibm.com에 로그인하면 접근 가능한 프로세서를 확인할 수 있습니다.

각 프로세서에는 세 가지 성능 지표가 표시됩니다. 이전 레슨에서 다루었지만 간략히 복습하면 다음과 같습니다: Qubit 수, EPLG, CLOPS.

  • Qubit 수. 이름 그대로, 단일 양자 프로세서에서 사용 가능한 총 Qubit의 수입니다. 비교적 규모가 큰 유틸리티 규모의 문제를 다루려면 충분한 수의 Qubit을 가진 프로세서를 사용해야 합니다. 하지만 Qubit 수만이 전부는 아닙니다.

  • EPLG, 즉 "레이어 게이트당 오류(errors per layered gate)"는 Qubit과 양자 Gate의 품질을 측정하는 지표입니다. 100개의 Qubit으로 이루어진 체인에서 이웃한 Qubit들을 얽힘 상태로 만드는 회로에서 각 Gate가 도입하는 평균 오류를 측정합니다. 이 값은 최대한 작을수록 좋습니다.

  • CLOPS, 즉 "초당 회로 레이어 연산(circuit layer operations per second)"은 프로세서의 속도를 수치화하는 지표입니다. 양자 처리 장치(QPU)가 단위 시간당 양자 볼륨 회로라는 특정 벤치마킹 회로의 레이어를 몇 개나 실행할 수 있는지를 측정합니다. 값이 높을수록 연산이 빠릅니다.

이러한 각 지표의 중요도는 특정 응용 프로그램에 따라 달라집니다. 향후 레슨에서는 실제 사례를 통해 이러한 요소들이 계산 결과에 어떤 영향을 미치는지 살펴볼 것입니다.

소프트웨어: Qiskit과 Qiskit Runtime

양자 문제를 양자 컴퓨터에 대한 명령으로 변환하려면 Qiskit을 사용합니다. Qiskit은 IBM이 개발한 양자 컴퓨터 작업을 위한 오픈 소스 소프트웨어 개발 키트(SDK)입니다. 또한 Qiskit 에코시스템(Qiskit Ecosystem)이 있는데, 이는 Qiskit의 핵심 기능을 바탕으로 구축하거나 확장하는 소프트웨어 튜토리얼 및 함수의 모음입니다. 그리고 Qiskit Runtime은 사용자가 양자 워크로드를 설계하고 최적화하며 Qiskit Runtime 프리미티브를 사용하여 효율적으로 실행할 수 있게 해주는 양자 컴퓨팅 서비스이자 프로그래밍 모델입니다.

프리미티브는 더 큰 회로나 작업을 설계하는 데 사용할 수 있는 작은 빌딩 블록입니다. 가장 중요한 두 가지 프리미티브는 Sampler와 Estimator로, 이에 대해서는 곧 더 자세히 다루겠습니다.

최근 Qiskit v1.0이 출시되면서 Qiskit은 그 어느 때보다 성능이 향상되고 안정적이 되었습니다. 이제 막 시작하시는 분들께는 최적의 시기에 입문하신 것입니다! 이미 Qiskit에 익숙하신 분들은 최신 버전을 다운로드하고 재설치해야 합니다. 전체 설치 안내는 Qiskit 설치 가이드를 참조하세요.

양자 회로

이제 양자 프로그램의 기초인 양자 Circuit에 대해 이야기할 준비가 되었습니다. 이 섹션은 간략한 복습 수준으로만 다룹니다. 양자 Circuit에 익숙하지 않으시다면, 계속하기 전에 "양자 정보의 기초" 강좌의 양자 Circuit 레슨을 먼저 학습하는 것을 권장합니다.

양자 Circuit은 아래 그림과 같이 Qubit을 나타내는 선(wire)으로 연결된 양자 Gate와 측정의 네트워크입니다. 양자 Circuit은 악보처럼 왼쪽에서 오른쪽으로, 시간 0에서부터 읽어나갑니다. 아직 프로세서의 물리적 Qubit에 할당되지 않은 가상 Qubit들은 위에서 아래로 번호 순서대로 나열됩니다.

Gate는 관련 Qubit의 선 위에 서로 다른 기호로 표시됩니다. 단일 Qubit Gate(예: 아래에 묘사된 하다마드(Hadamard) Gate, H가 적힌 상자)는 해당 Qubit의 선에만 영향을 미칩니다. 다중 Qubit Gate(예: 아래의 CNOT Gate, q0에 선으로 연결된 원 안의 플러스 기호)는 두 개 이상의 Qubit에 영향을 줍니다. 묘사된 CNOT Gate에서 q1의 상태는 q0의 상태에 따라 변경됩니다. 모든 Gate 연산이 완료되면 Qubit을 측정할 수 있으며, 이는 측정 기호가 있는 검은색 Gate로 표시됩니다. 측정 결과는 아래의 이중 선으로 표시된 "meas" 버스인 고전 레지스터에 기록됩니다.

간단한 양자 Circuit 예시

Circuit의 중요한 특성 중 하나는 깊이(depth)입니다. 양자 Circuit의 깊이는 회로를 완료하기 위해 병렬로 실행되는 양자 Gate의 "레이어" 수의 최솟값입니다. 공통 Qubit이 없는 양자 Gate들은 병렬로(동시에) 실행될 수 있습니다. 하지만 두 개 이상의 Gate가 같은 Qubit에 작용하는 경우에는 병렬로 실행할 수 없으며, 순서대로 두 개의 별도 레이어로 나누어 실행해야 합니다.

Circuit의 깊이를 결정하는 덜 직관적이지만 유용한 방법이 있습니다. 일종의 게임처럼 생각해보세요. 규칙은 간단합니다: 왼쪽의 임의의 Qubit 선에서 시작하여 오른쪽으로 이동하면서 경로에서 만나는 Gate의 수를 세어야 합니다. 다중 Qubit Gate로 현재 선과 연결된 경우에만 이웃 선으로 이동할 수 있습니다. 목표는 경로에서 만나는 Gate의 수를 최대화하는 것입니다. 이 최댓값이 바로 Circuit의 깊이입니다.

9레이어 Circuit 예시

양자 Gate를 구현하는 데 시간이 걸리기 때문에, Circuit의 깊이는 대략 양자 컴퓨터가 해당 Circuit을 실행하는 데 필요한 시간에 비례합니다. 프로세서의 Qubit 결어긋남(decoherence) 시간에 따라 일부 머신은 깊은 Circuit에 더 적합합니다. 따라서 특정 장치에서 Circuit을 실행할 수 있는지 판단하려면 Circuit의 깊이를 알아야 합니다.

양자 회로 설계: Qiskit 패턴

그렇다면 양자 회로를 어떻게 설계하고 실행할까요? 일반적인 양자 컴퓨팅 워크플로를 이해하는 가장 쉬운 방법은 Qiskit 패턴을 통해서입니다. Qiskit 패턴은 모듈식 도구를 사용해 특정 단계를 구현함으로써 양자 워크로드를 실행할 수 있도록 하는 개념적 프레임워크입니다. 이를 통해 양자 컴퓨팅 작업을 강력한 이종(CPU/GPU/QPU) 컴퓨팅 인프라에서 수행할 수 있습니다. 각 단계는 서비스 형태로 제공될 수 있으며, 리소스 관리를 통합하여 새로운 기능이 개발됨에 따라 이를 원활하게 조합할 수 있습니다.

다음은 주요 단계들이며, 숙련된 Qiskit 사용자라면 익숙하게 느낄 것입니다.

  1. 맵(Map). 이 단계에서는 우리가 관심을 갖는 일반적인 문제를 양자 회로 형태로 양자 컴퓨터에 어떻게 매핑할지 공식화합니다.

  2. 최적화(Optimize). 이 단계에서는 Qiskit의 Transpiler를 사용하여 회로를 실제 물리적 Qubit 하드웨어에 배치하고 라우팅합니다. 이 과정에는 개별 양자 Gate를 하드웨어에서 수행되는 연산 시퀀스로 변환하는 작업과 Gate 레이아웃 최적화가 포함됩니다.

  3. 실행(Execute). Qiskit Runtime 프리미티브는 트랜스파일된 Circuit을 실행할 수 있도록 IBM Quantum 하드웨어에 대한 인터페이스를 제공합니다. 이 단계에는 오류 억제 및 완화 기법도 포함되며, 이는 사용자로부터 대부분 추상화되어 있습니다.

  4. 후처리(Post-process). 이 단계에서는 양자 프로세서 자체에서 나온 데이터를 처리하여 사용자에게 원래 문제에 대한 유용한 결과를 제공합니다. 기본적으로 이 단계는 획득한 데이터에 대한 추가 분석 전체를 포함합니다.

맵(Map)

맵 단계는 본질적으로 다음 질문을 던집니다: "내 문제를 양자 하드웨어에서 합리적으로 실행할 수 있는 양자 Circuit으로 어떻게 변환할까?" 의심할 여지 없이, 매핑은 어려운 문제이자 활발한 연구 분야입니다. 성공을 보장하는 완벽한 방법은 없지만, 권장 지침과 이미 매핑 방법을 알고 있는 문제들의 예시가 있습니다.

첫 번째 지침은 클래식 컴퓨터가 더 잘 할 수 있는 작업은 클래식 컴퓨터에 맡기는 것입니다. 클래식 컴퓨터에 쉬운 작업은 양자 컴퓨터의 이점을 받기 어렵습니다. 양자 컴퓨터는 클래식적으로 풀기 어려운 문제를 위한 것입니다. 물론, Qiskit이나 양자 컴퓨터를 처음 사용하는 경우라면 계산적으로 복잡한 문제를 찾을 필요는 없습니다. 실용 규모 프로젝트에 바로 도전하기 전에 학습할 수 있는 더 작고 소화하기 쉬운 문제들로 나누어 접근해 보세요.

다음으로, 측정하거나 이해하고자 하는 문제의 결과를 기댓값 또는 비용 함수로 변환합니다. 비용 함수는 문제의 목표를 최소화하거나 최대화해야 할 대상으로 정의하는 문제별 함수입니다. 목표에 대해 시험 상태 또는 해결책이 얼마나 잘 수행되고 있는지 확인하는 데 사용할 수 있습니다. 이 개념은 화학, 머신러닝, 금융, 최적화 등 다양한 응용 분야에 적용될 수 있으며, 어떤 분야에서 문제에 접근하든 상관없습니다.

또한 사용하게 될 하드웨어가 하드웨어 섹션에서 논의한 것처럼 특정 토폴로지를 가지고 있다는 점을 염두에 두세요. 일부 Qubit은 연결되어 있고, 일부는 그렇지 않습니다. IBM 양자 프로세서의 헤비-헥스(heavy-hex) 토폴로지를 준수하는 Circuit으로 문제를 매핑해야 합니다.

지금 당장 가장 중요하게 기억할 것은, 이 단계에는 연습이 필요하다는 것입니다. 문제 자체에 대한 깊은 이해뿐만 아니라 하드웨어 성능에 대해서도 잘 알아야 합니다. 향후 수업에서 이 모든 고려 사항을 어떻게 균형 잡는지 구체적인 예시와 사용 사례를 통해 살펴볼 것입니다.

최적화(Optimize)

다음으로, 우리의 양자 Circuit을 실행할 수 있을 만큼 충분한 수의 고품질 Qubit을 갖춘 양자 프로세서를 선택해야 합니다. 하드웨어 섹션에서 논의한 세 가지 지표인 Qubit 수, EPLG, CLOPS를 기준으로 이 결정을 내리세요.

그런 다음 선택한 하드웨어에 맞게 Circuit을 최적화합니다. 먼저 Circuit을 효율적으로 배치하고 라우팅해야 합니다. 레이아웃(Layout)은 Circuit의 가상 Qubit을 프로세서의 물리적 Qubit에 매핑하는 것을 의미합니다. 라우팅(Routing)은 Circuit의 가상 Qubit 간 연결이 프로세서의 물리적 Qubit 연결과 일치하도록 Circuit을 조정하는 것을 말합니다. 레이아웃 및 라우팅 단계에서 염두에 두어야 할 몇 가지 사항이 있습니다.

  1. 모든 Qubit이 연결되어 있지는 않습니다. 칩 위에서 서로 매우 멀리 떨어져 있는 Qubit들도 있으며, 가능하면 장거리 상호작용을 줄이거나 없애야 합니다. 이웃한 Qubit 사이에 SWAP Gate 시퀀스를 적용하여 Qubit 정보를 이동시킬 수 있지만, SWAP Gate는 비용이 많이 들고 오류가 발생하기 쉬우므로 더 나은 방법이 있을 수 있습니다. 비용이 많이 드는 SWAP Gate를 너무 많이 사용하지 않도록 하세요.

  2. 레이아웃과 라우팅은 반복적인 과정입니다. 수동으로 할 수도 있지만, 대략적인 오류율을 기반으로 물리적 Qubit 레이아웃을 추천해 주는 mapomatic이라는 Qiskit 도구도 있습니다. Transpiler(곧 설명할 예정)도 정보에 기반한 제안을 할 수 있습니다.

다음으로, 동일한 Qubit에 작용하는 단일 Qubit Gate 시퀀스를 단일 Gate로 합성할 수 있으며, 때로는 불필요한 Gate나 Gate 조합을 제거할 수도 있습니다. 예를 들어, 일부 Gate 조합은 더 단순한 조합으로 줄일 수 있고, 실제로 Gate 조합이 항등 연산과 동일한 경우 이를 단순히 제거할 수 있습니다. 이 작업은 Qiskit Transpiler를 사용하여 자동으로 수행하거나, 더 세밀한 제어를 원한다면 Gate별로 수동으로 수행할 수도 있습니다.

Circuit 레이아웃, 라우팅 및 Gate 수를 개선한 후에는(수동으로 하든 Transpiler를 사용하든) 모든 Gate의 타이밍이 올바른지 확인하기 위해 Circuit을 시각화하는 것이 좋습니다. Transpiler에서 Circuit의 타임라인을 시각화하고 모든 것이 예상대로 정렬되었는지 확인할 수 있는 인수(argument)를 설정할 수 있습니다.

Qiskit Transpiler

앞서 언급했듯이, Qiskit Transpiler는 패턴 워크플로의 초기 단계에서 활용할 수 있습니다. 이제 그 기능을 더 자세히 살펴보겠습니다. Transpiler는 주어진 입력 Circuit을 특정 양자 디바이스의 토폴로지에 맞게 재작성하고, 실행과 노이즈 내성을 위해 Circuit을 최적화할 수 있습니다. 또한 사용하도록 선택한 특정 양자 프로세서의 기저 Gate로 주어진 Circuit을 재작성합니다.

Qiskit에는 서로 다른 최적화 수준에 해당하는 네 가지 내장 트랜스파일 파이프라인이 있으며, 양자 Circuit 최적화에 이미 익숙하지 않은 경우라면 그 중 하나를 사용하는 것을 권장합니다. 기본적으로 트랜스파일 프로세스는 다음 여섯 단계를 포함합니다:

  1. 초기화(Initialization). 이 단계에서는 Circuit을 Backend에 배치하기 전에 필요한 초기 패스(pass)를 실행합니다. 일반적으로 사용자 정의 명령어를 풀어내고 Circuit을 단일 및 이중 Qubit Gate만으로 변환하는 작업이 포함됩니다.

  2. 레이아웃(Layout). 이 단계에서는 Circuit의 가상 Qubit을 Backend의 물리적 Qubit에 매핑합니다. 자세한 내용은 Layout Stage를 참고하세요.

  3. 라우팅(Routing). 이 단계는 레이아웃이 적용된 후 실행되며, Backend의 연결성과 호환되도록 원래 Circuit에 Gate(예: SWAP Gate)를 삽입합니다. 자세한 내용은 Routing Stage를 참고하세요.

  4. 변환(Translation). 이 단계에서는 Circuit의 Gate를 대상 Backend의 기저 집합으로 변환합니다. 자세한 내용은 Translation Stage를 참고하세요.

  5. 최적화(Optimization). 이 단계에서는 특정 조건(예: 특정 목표 깊이에 도달하는 것)이 충족될 때까지 주요 최적화 루프를 반복적으로 실행합니다. 아래에 설명된 네 가지 최적화 수준 중에서 선택할 수 있습니다.

  6. 스케줄링(Scheduling). 이 단계는 하드웨어 인식 스케줄링 패스를 위한 단계입니다. 높은 수준에서 스케줄링은 명령어 실행 사이에 Qubit이 유휴 상태인 시간을 보정하기 위해 Circuit에 지연(delay)을 삽입하는 것으로 이해할 수 있습니다.

최적화 수준은 0에서 3까지 네 가지가 있으며, 최적화 수준이 높을수록 더 많은 시간과 계산 노력이 필요하지만 더 나은 Circuit을 얻을 수 있습니다. 최적화 수준 0은 디바이스 특성화 실험을 위한 것으로, 어떤 최적화도 수행하지 않고 입력 Circuit을 대상 Backend의 제약에만 매핑합니다. 최적화 수준 3은 Circuit 최적화에 가장 많은 노력을 기울입니다. 그러나 Transpiler의 많은 최적화 기법이 휴리스틱에 기반하기 때문에, 계산 노력을 더 기울인다고 해서 항상 출력 Circuit의 품질이 향상되는 것은 아닙니다. 더 자세한 내용이 궁금하다면, Qiskit 문서의 Transpiler 문서를 참고하세요.

오류 억제(Error suppression)

Circuit에서 오류를 줄이는 첫 번째 단계는 레이아웃, 라우팅을 최적화하고 Gate 수를 최소화하는 것으로, 이미 Transpiler를 사용하거나 직접 수행했습니다. 이제 더 정교한 오류 억제 방법에 대해 이야기해 보겠습니다.

오류 억제는 오류를 최소화하기 위해 컴파일 중에 Circuit을 변환하는 기법의 한 종류입니다. 이는 아래의 "Execute" 섹션에서 논의할 오류 완화(error mitigation)와는 다릅니다. 우리가 사용하는 가장 일반적인 두 가지 오류 억제 형태는 동적 디커플링(dynamical decoupling)과 파울리 트월링(Pauli twirling)입니다:

  1. 동적 디커플링은 Qubit이 유휴 상태일 때 도입되는 환경 노이즈 일부를 효과적으로 상쇄하는 데 사용됩니다. 특정 시간에 일련의 Gate를 적용함으로써, 유휴 시간의 한 부분에서 누적되는 노이즈가 다른 부분의 노이즈를 대략적으로 상쇄하도록 만들 수 있습니다.
  2. 파울리 트월링은 동적 디커플링처럼 노이즈를 상쇄하기 위해서가 아니라, 노이즈를 단순화하기 위해 무작위 Gate를 삽입하는 방법입니다. 무작위 Gate를 삽입함으로써 서로 다른 오류의 효과가 빠르게 누적되는 것을 방지하고, 노이즈가 이제 확률적 특성을 갖게 되어 더 쉽게 특성화하고 설명할 수 있게 됩니다. 이 방법은 아래에서 논의할 강력한 오류 완화 기법의 기반이 되기도 합니다.

Execute

이제 양자 프로그램을 실행할 준비가 되었습니다. Qiskit Runtime Primitives는 IBM Quantum 하드웨어에 대한 인터페이스를 제공하며, 오류 억제 및 경감을 사용자로부터 추상화합니다. 선택할 수 있는 Primitive는 두 가지입니다: Sampler와 Estimator입니다.

Qiskit Runtime의 Sampler는 양자 장치에서 Circuit을 여러 번 실행하고 각 실행마다 측정을 수행한 뒤, 복원된 비트 문자열로부터 확률 분포를 재구성합니다. 더 많은 실행(또는 샷)을 수행할수록 결과가 더 정확해지지만, 그만큼 시간과 양자 자원이 더 필요합니다. 구체적으로는, Circuit이 준비한 상태를 측정하여 가능한 각 표준 기저 상태를 얻을 확률을 계산합니다.

Qiskit Runtime의 Estimator는 복잡한 대수적 과정을 사용하여, 관측량을 고유 기저가 알려진 다른 관측량들의 조합으로 분해함으로써 실제 양자 장치에서 기댓값을 추정합니다.

Execute 단계에서는 오류 경감(error mitigation) 전략도 선택할 수 있습니다. 오류 경감이란 실행 당시 장치에 존재했던 노이즈를 모델링하여 Circuit 오류를 줄이는 기법을 말합니다. 일반적으로, 이는 모델 학습과 관련된 양자 전처리 오버헤드와, 생성된 모델을 사용해 원시 결과의 오류를 경감하기 위한 고전적 후처리 오버헤드를 수반합니다. 이러한 오버헤드를 감수하는 대신 훨씬 더 정확한 결과를 얻을 수 있습니다.

오류 경감을 위해 구현할 수 있는 기법은 여러 가지입니다. 오류에 대한 복원력이 높아지는 순서로 세 가지를 소개하겠습니다. 다만 그에 따라 연산 비용도 함께 증가합니다. 그러나 이 분야는 활발히 연구 중이므로, 앞으로도 새로운 기법이 개발되고 기존 기법이 개선될 것입니다.

복원력 수준 0에서는 Transpiler가 Circuit에 아무런 처리도 하지 않습니다.

수준 1에서는 Twirled Readout Error eXtinction(T-REX)이라는 기법이 도입됩니다. T-REX는 오류 억제 섹션에서 논의한 Pauli 트월링을 사용합니다. 앞서 언급했듯이, Circuit에 무작위 Gate를 삽입하면 매우 복잡하고 모델링하기 어려운 노이즈도 확률적(stochastic)으로 보이게 만들 수 있어, 후처리에서 상쇄하거나 제거하기가 훨씬 쉬워집니다.

복원력 수준 2에서는 Zero Noise Extrapolation(ZNE)이 추가됩니다. 이는 최근 많은 성과를 거두고 있는 널리 쓰이는 기법입니다. ZNE의 아이디어는 다소 놀라울 수 있습니다 — 실제로 이미 존재하는 노이즈 위에 노이즈를 추가하는 것입니다! 하지만 이를 통해 반대 방향으로 외삽하여, 노이즈가 점점 줄어들 경우 결과가 어떻게 될지를 예측할 수 있습니다.

노이즈를 추가하는 방법은 여러 가지가 있습니다. 예를 들어, Gate를 늘려 더 길게 만들어 오류에 더 취약하게 하거나, 궁극적으로 항등 연산이 되는 Gate를 더 실행하는 방법이 있습니다. 이 경우 Circuit의 기능은 변하지 않지만 의도적으로 더 많은 노이즈를 샘플링하게 됩니다. 다만 추적하고자 하는 모든 Circuit과 모든 기댓값에 대해 이 작업을 수행해야 하므로, 연산 비용이 상당히 높아질 수 있습니다.

ZNE의 한 특수한 형태로 Probabilistic Error Amplification(PEA)이 있습니다. Gate에 대한 노이즈 모델을 학습한 후, PEA는 해당 노이즈 모델에서 오류를 샘플링하여 Circuit에 의도적으로 주입하는 방식으로 작동합니다. 아직 Qiskit에서는 제공되지 않지만, 올해 중으로 추가될 예정입니다.

마지막으로 소개할 오류 경감 기법은 Probabilistic Error Cancellation(PEC)입니다. PEC는 3번째 복원력 수준에 해당하는 것이 아니라, 다른 오류 경감 기법에 비해 필요한 연산 자원이 잘 확장되지 않기 때문에 Qiskit에서 수동으로 활성화해야 하는 특수 기능입니다. 먼저 Circuit에 영향을 미치는 노이즈를 파악하는 것부터 시작합니다 — Circuit의 각 고유한 2-Qubit Gate 레이어에 대해 노이즈 학습 또는 노이즈 특성화 Circuit을 실행합니다. 이 결과를 통해 노이즈를 Pauli 연산자의 형태로 기술할 수 있습니다. 이 노이즈 항들을 파악한 후에는, 해당 노이즈 채널을 상쇄할 수 있도록 반대 Pauli Gate가 내장된 형태로 Circuit을 변형합니다. 어떤 면에서 이 과정은 노이즈 캔슬링 헤드폰이 작동하는 방식과 유사합니다. 그러나 이 방식으로 노이즈를 되돌리는 것은 비용이 매우 높으며, 실행 시간이 Gate 수에 따라 빠르게 지수적으로 증가하므로 매우 큰 Circuit에는 최선의 선택이 아닐 수 있습니다.

Post-process

Post-process 단계는 양자 Circuit의 출력을 시각화하고 분석하는 단계입니다. 시각화 모듈 및 quantum-info 모듈과 같은 다양한 Qiskit 도구를 활용할 수 있습니다. 여기서는 이를 자세히 다루지 않겠지만, 이후 레슨에서 응용 사례를 살펴볼 때 이 모듈들이 실제로 활용되는 모습을 확인할 수 있습니다.

Conclusion

이번 레슨이 유틸리티 규모의 양자 계산을 실행할 때 고려해야 할 주요 사항과 워크플로에 대한 빠른 개요를 제공했기를 바랍니다. 많은 내용이 담겨 있었으며, 이 이론적 개념들이 실제로 적용되는 구체적인 예시를 보기 전까지는 완전히 이해하기 어려울 수 있습니다. 그래서 나머지 과정은 바로 그 예시들로 채워질 것입니다. 결국 이 과정의 이름이 '실전 양자 컴퓨팅(Quantum Computing in Practice)'인 데는 다 이유가 있으니까요!

다음 시간에는 Qiskit 패턴 워크플로를 사용하여 그래프 이론의 고전적인 문제인 MaxCut을 풀기 위한 양자 Circuit을 설계하고 실행하는 구체적인 예시를 살펴보겠습니다.