키스킷 구성 요소

The Qiskit framework.

테라

테라, 〈대지〉 엘리먼트는 나머지 키스킷 하위 구조들이 놓어지는 기반을 형성한다. 테라는 펄스와 회로 단위에서 양자 프로그램을 구성하는 기반을 제공하여서 특정 장치의 제한 아래서 최적화를 할 수 있게 해주고 다른 원격 접속된 장치 상에서 여러 실험들이 일괄 처리되는 것을 관리할 수 있게 해 준다. 테라는 원하는 최종 사용자 경험 및 최적화 계층, 펄스 스케줄링과 후위 처리장치 간의 커뮤니케이션 등을 효율적으로 다룰 수 있게 해주는 인터페이스를 정의한다.

키스킷 테라는 여섯가지 중요한 모듈로 구성되어 있다.

  1. qiskit.circuit 양자 회로는 양자 컴퓨팅에 사용되는 모델로서 그 계산은 큐비트 레지스터에 양자 연산(주로 게이트)을 연속적으로 수행하는 것에 해당한다. 일반적으로 양자 회로는 큐비트들의 상태를 \(|0,…,0>\) 로 준비하면서 시작되고 게이트들이 고전 컴퓨터에서는 효율적으로 표현할 수 없는 상태로 변해간다. 상태에서 정보를 추출하기 위해서 양자 회로는 결과(양자 시스템의 본질적인 속성으로 말미암아 무작위성을 가짐)들을 효율적으로 표현될 있는 고전 레지스터에 사상하는 측정을 가져야만 한다.

  2. qiskit.pulse 펄스 스케줄은 채널(실험적인 입력 선)에 적용되는 양자 실험에 보내지는 펄스의 집합이다. 이는 회로 보다는 낮은 수준이며, 회로의 모든 게이트가 펄스의 집합으로 나타내도록 요구한다. 이 수준에서 실험은 (동적 분리, 오류 경감, 최적의 펄스 형태를 통해서) 오류를 줄이도록 디자인 될 수 있다.

  3. qiskit.transpiler 양자 컴퓨팅 연구에서 중요한 부분은 실제 장치에서 양자 회로를 실행하는 방법을 고안하는 것이다. 실제 장치에서 실험 오류와 결잃음은 계산 도중에 오류를 생성한다. 따라서 안정된 구현을 하기 위해서는 게이트의 수와 양자 회로의 전체적인 구동 시간을 줄이는 것이 필요하다. 트랜스파일러(transpiler)는 주어진 알고리즘에 대해서 사용자가 최적화를 탐구하고, 더 나은 양자 회로를 찾을 수 있도록 하는 패스 매니저(pass manager) 개념을 소개한다. 이 때 최종 결과는 여전히 회로이기 때문에 패스 매니저를 트랜스파일러라고 부른다.

  4. qiskit.providers 사용자가 후위 처리 장치에서 회로를 실행하게 되면 편리한 작업 방식을 사용할 수 있어야 한다. 이를 위해 테라에서는 다음과 같은 네 가지 부분을 사용한다:

    1. 공급자 는 추상적인 기본 클래스 :class:`~qiskit.providers.BaseProvider`를 구현하는 엔티티이며, 다양한 후위 처리 장치 그룹에 대한 접근권을 제공한다 (예를 들어, `IBM Quantum Experience <https://quantum-computing.ibm.com>`__ 를 통해 사용 가능한 후위 처리 장치). 이런 후위 처리 장치와 상호작용하여, 가령 사용 가능한 후위 처리 장치를 찾거나 특정 후위 처리 장치의 인스턴스를 찾는다.

    2. ``후위 처리 장치(Backend)``는 추상적인 기본 클래스 이들은 `qobj 에서 입력으로 사용하는 run 메소드를 가지고 있으며, BaseJob 오브젝트를 반환한다. 이 오브젝트는 작업이 완료될 때 후위 처리 장치에서 결과를 검색하기 위한 작업의 비동기 실행을 허용한다.

    3. 작업(Job) 인스턴스는 :class:`~qiskit.providers.BaseJob`라는 추상적 기본 클래스의 구현이며, 제출된 작업을 위한 《티켓》 정도로 여길 수 있다. 이들은 주어진 시점(예를 들어, 작업이 큐에 대기, 실행 중 또는 실패한 경우)에 있는 실행 상태를 찾고 작업에 대한 제어를 허용한다.

    4. Result 작업이 종료되면 테라는 result = job.result() 코드를 사용하여 원격의 후위 처리 장치에서 결과를 추출하도록 허용한다. 결과 객체는 양자 데이터를 가지고, 이 객체를 다루는 가장 흔한 방법은 ``result.get_counts(circuit)``을 사용하는 것이다. 이 메소드는 사용자가 양자 회로에서 실제 갯수를 얻도록 하고, 테라가 제공하는 양자 정보 도구(quantum information tools)와 함께 추가적인 분석에 쓰인다.

  5. qiskit.quantum_info 양자 컴퓨터에서 회로를 실행하는 데 필요한 고급 알고리즘과 분석을 수행하기 위해 간단한 양자 정보 작업을 구현하는 도구를 가지고 있어야 한다. 여기에는 메트릭을 추정하고 양자 상태, 연산 및 채널을 생성하는 메소드를 포함한다.

  6. qiskit.visualization 테라에서 양자 회로를 가시화하는 여러 도구가 있다. 이런 도구들은 사용자가 원하는 구현이 제대로 되었는지 양자 회로를 빠르게 확인하도록 돕는다. 문서, 파이썬, 레이텍스(latex) 버전이 있다. 회로를 실행하면, 결과를 확인하는 것이 중요하다. 상호작용하는 버전을 포함하여 양자 회로에서 결과를 그래프로 그리는 간단한 함수(plot_histogram())가 있다. 또한 양자 상태를 그릴 수 있는 plot_bloch_vector() 함수도 있다.

아르

아르는 〈공기’에 해당하고, 키스킷의 모든 구성 요소에 다양하게 사용된다. 양자 컴퓨터의 발전을 촉진하기 위해서는 더 나은 시뮬레이터, 에뮬레이터 그리고 디버거가 필요하다. 아르는 고전 프로세서들이 어느 정도까지 양자 컴퓨터를 흉내낼 수 있는지 보여 줌으로서 고전적인 방법의 한계를 알도록 해준다. 더욱이, 아르를 사용하여 현재 혹은 가까운 미래의 양자 컴퓨터의 기능들을 정확하게 확인할 수 있다. 이는 시뮬레이션의 한계를 확장하고 계산 과정에 있는 실제적인 노이즈를 시뮬레이션함으로써 가능하다.

아르는 키스킷 소프트웨어 스택을 이용하여 양자 회로를 위한 고성능 시뮬레이터 프레임워크를 제공한다. 테라에서 컴파일된 회로를 실행하는 최적화된 C++ 시뮬레이터가 있다. 아르는 또한 실제 장치에서 실행되는 동안 일어나는 오류에 대한 실제적인 잡음 시뮬레이션을 수행하는 사용자가 다양하게 수정할 수 있는 잡음 모델을 구성하는 도구를 제공한다.

키스킷 아르는 세 가지 고성능 시뮬레이터 후위 처리 장치를 포함한다:

  • QasmSimulator

    키스킷 회로를 이상적인 경우와 잡음이 있는 경우에서 다양하게 실행하고, 그 결과나 메모리 값을 돌려준다. 다양한 회로들을 효율적으로 시뮬레이션하는데 사용되는 여러가지 방법들은 다음과 같다:

    1. 상태벡터 - 밀집한 상태 벡터 시뮬레이션을 이용한다.

    2. 안정 장치 - 클리포스(Clifford) 회로와 잡음 모델에서만 사용할 수 있는 클리포드 안정 장치 상태 시뮬레이터를 사용한다.

    3. 확장된 안정장치 - 클리포드 게이트가 아닌 경우의 수에 따라 증가하는 안정 장치 항목으로 회로를 분해하는 근사값 시뮬레이터를 사용한다.

    4. 행렬 곱 상태 - 행렬 곱 상태 (Matrix Product State (MPS)) 시뮬레이터를 이용한다.

  • StatevectorSimulator

    키스킷 회로를 이상적인 상태의 일회적인 연산을 하고, 응용 프로그램 후에 시뮬레이터의 상태 벡터를 돌려주는 역할을 한다.

  • UnitarySimulator

    키스킷 회로를 이상적인 경우의 단일 실행을 하고, 회로의 마지막 단일 행렬값을 돌려준다. 이 후위 처리 장치를 위해서 회로는 측정 메소드나 초기화 연산이 불가능 하다는 점을 유의한다.

이그니스

이그니스는 〈불’을 나타내고, 잡음과 오류를 관리하고, 새로운 길을 모색하는데 특화된 패키지다. 여기에는 에러를 더욱 잘 특징 짓고, 게이트를 향상 시키며, 노이즈가 있을 때 계산을 하는 동작을 포함한다. 이그니스는 양자 오류 정정을 디자인 하려는 사람들이나 단층 촬영 같은 방법을 이용한 오류 특성 파악을 공부하고자 하는 사람들, 동적 비동기화나 최적화 조절 등을 이용하여서 게이트를 더욱 잘 이용하는 법을 찾으려는 사람들에게 유용하다.

이그니스는 사용자들이 최소한의 사용자 입력 매개변수를 가지고 특정 실험을 위한 회로를 쉽게 만들 수 있는 코드를 제공한다. 이그니스 코드는 세가지 핵심적인 구성 블록을 가진다.

회로들(Circuits)

회로 모듈은 최소한의 사용자 매개 변수를 기반으로 하는 특정 이그니스 실험을 위한 회로의 목록을 만들어내는 코드를 제공한다. 이들은 이후 테라나 아르에서 실행된다.

적합 기술자들(Fitters)

이그니스 실험의 결과는 적합 기술자 모듈로 전달되는데, 여기서는 결과가 분석되고, 실험을 기술하는 물리 모델에 따라 적합하게 맞춘다. 적합 기술자는 자료를 적합하게 맞춘 결과와 함께 그려주고 매개 변수의 목록을 출력한다.

필터들(Filters)

어떤 이그니스 실험에 대해서는 적합 기술자는 Filter(필터) 객체를 출력할 수도 있다. 필터들은 이그니스 실험의 교정 결과를 이용하여 다른 실험의 오류를 줄이는데 사용될 수도 있다.

키스킷 이그니스는 세 가지 유형의 실험으로 구분될 수 있다:

  • qiskit.ignis.characterization 특성화 실험은 시스템에서 잡음 매개변수(T1, T2-star, T2)와 게이트의 ZZ 교차율과 제어 오류와 같은 해밀토니안(Hamiltonian) 매개변수를 측정하도록 디자인됐다.

  • qiskit.ignis.verification 검증 실험은 게이트 및 작은 회로 성능을 검증하도록 설계된다. 검증은 상태 및 프로세스 단층 촬영, 양자 용적 및 랜덤화된 벤치마킹(RB)을 포함한다. 이들 실험은 게이트 충실도와 같은 성능 메트릭을 결정하기 위한 정보를 제공한다.

  • qiskit.ignis.mitigation 완화(mitigation) 실험은 동일한 후위 처리 장치에서 구동하는 임의의 결과 집합에 적용될 수 있는 완화 과정을 생성하기위해 분석되는 교정 회로(calibration circuits)를 구동한다. 이그니스 코드는 교정 측정을 구동하는 회로 목록을 생성할 것이다. 이런 측정의 결과는 적합 기술자(Fitter)에 의해 처리될 것이며, 완화 과정을 다른 결과에 적용하는데 사용될 수 있는 필터(Filter)를 출력할 것이다.

아쿠아

아쿠아는 〈물’을 나타내는 생명의 구성 요소이다. 양자 컴퓨팅이 기대되는 수준까지 상용화되려면, 실생활에 사용되는 응용 프로그램을 찾아야 한다. 아쿠아는 양자 컴퓨터를 위한 알고리즘이 만들어지는 곳이다. 이러한 알고리즘은 양자 컴퓨팅을 위한 응용 프로그램을 만드는데 사용된다. 화학, 최적화, 금융, AI 분야에 종사하는 전문가들이 아쿠아를 사용하게 되는데, 특정 연산 작업을 위한 가속화 장치로 양자 컴퓨터를 사용하는 사람들에게 유익할 것이다.

양자 컴퓨팅의 힘으로 해결하기 좋은 문제들은 화학, 인공 지능(AI), 최적화 및 금융 부분 등 여러 도메인에서 확인되었다. 하지만, 양자 컴퓨팅은 매우 특화된 기술들을 필요로 한다. 여러 다양한 레벨의 소프트웨어 스택에서 양자 컴퓨팅을 사용하거나 기여하고자 하는 많은 전문가 집단의 요구를 충족시키기 위해 키스킷 아쿠아(Aqua)를 제공한다.