개발 전략

버전

키스킷 프로젝트는 각각 다른 기능을 수행하는 몇몇 요소들로 구성되어 있다. 각각은 독립적으로 유용하며 따로 사용될 수 있다. 그러나 우리는 편의를 위해 모든 요소들을 한번에 설치할 수 있도록 하나의 진입점으로서 이 코드 저장소와 메타 패키지들 제공한다. 이는 설치 과정을 간단화하고 최종 사용자들에게 통일된 인터페이스를 제공하기 위함이다. 하지만, 각각의 키스킷 요소들은 자신만의 배포 버전을 가지고 있기 때문에 다른 코드 저장소간의 버전을 다룰 때에는 주의가 필요하다. 이 문서는 키스킷 구성 요소들과 메타 패키지의 버전과 배포본을 다룰때 필요한 가이드라인을 설명한다.

이 안내서의 나머지 부분에서 표준 의미상의 버전 명명법은 ``주 버전.부 버전.패치버전``으로 표기된다. 예를 들어 버전 번호가 ``0.7.1``이라면 주 버전은 ``0``이고 부 버전 ``7``이고 패치 버전은 ``1``이다.

메타-패키지 버전

키스킷 메타-패키지 버전은 각각의 구성 요소들의 배포본에 따라 결정되는 독립적인 값이다. 매번 우리가 어떤 요소를 추가하거나 추적되는 요소를 발표하면 메타-패키지의 필요 항목이나 버전은 새로 업데이트 되야 하고 새 버전이 발표되게 된다. 메타-패키지 공개 버전이 각각의 구성 요소와 일치하도록 일정을 조정하여서 발표를 한다.

새 구성요소 추가하기

새로운 키스킷 구성 요소가 메타-패키지 필요항목에 추가되면, 우리는 **부 버전**의 숫자를 올려야 한다.

예를 들어, 메타-패키지가 키스킷-아르``키스킷-테라``를 가지고 있으며 버전이 ``0.7.4``라고 해보자. 그리고 만약 우리가 메타-패키지에 추가할 계획으로 새 구성요소 ``키스킷-이그니스``를 출시했다고 하자. 그러면 이 새 요소를 메타-패키지에 추가할 때 마지막 버전은 ``0.8.0``로 증가하게 된다.

패치 버전 증가

만약 어떤 키스킷 구성요소가 메타-패키지에 등록되어 있고 버그를 고치기 위해 패치 버전을 공개했다면, setup.py 파일에 있는 필요 항목을 고치고 메타-패키지의 패지 버전을 증가시켜야 한다.

예를 들어, 현재 0.9.6 버전을 가지고 있는 메타-패키지에 키스킷-테라 0.8.1 버전, 키스킷-아르 0.2.1 버전, ``키스킷-이그니스 0.1.4 버전``이 등록되어 있다고 하자. 이 때 키스킷-테라 패키지에 버그를 고치기 위한 패치 버전 ``0.8.2``가 공개되었다면, 메타-패키지도 이에 따라 패치 버전을 증가시켜 버전 ``0.9.7``이 되어야 한다.

추가적으로 때때로 메타-패키지 자체에 버그가 있어서 이를 고치고 새 버전을 내놓아야 할 때가 있다. 이러한 경우가 발생하면, 이전의 불완전한 버전과 구별하기 위해 패치 버전을 증가시켜야 한다. 어떤 상황에서도 pypi에서 예전 버전 혹은 불완전한 버전을 지우지 말라. 대신 단순히 패치 버전을 증가시키고 새로운 버전을 업로드하라.

부 버전 증가

새로운 요소를 메타-패키지에 추가하는 것 이외에, 등록된 구성 요소의 부 버전이 올라갈 때 메타-패키지의 부 버전도 함께 증가해야 한다.

예를 들어, 메타-패키지가 0.7.5 버전이고 2개의 구성 요소 ``키스킷-테라 0.7.0 버전``과 ``키스킷-아르 0.1.1 버전``이 등록되어 있다고 하자. 이 때 ``키스킷-아르``의 버전이 ``0.2.0``으로 업데이트되면, 이에 맞추어 메타-패키지의 버전도 ``0.8.0``으로 올려주어야 한다.

주 버전 증가

주 버전은 다른 버전 구성요소들과는 다르다. 각각의 등록된 요소들과 연동해서 업데이트되는 다른 버전 숫자들과는 달리 주 버전은 모든 등록 요소가 한계에 다다랐을 때 (적어도 1.0.0 전에) 에만 증가하게 된다. 현재는 모든 구성 요소의 주 버전이 ``0``이며, 메타-패키지에 등록된 각각의 요소들이 주 버전이 ``>=1``로 되어 안정적이라고 판단되는 한, 메타-패키지의 주 버전은 올라가지 않는다.

모든 구성 요소들의 버전이 1.0.0 이상이 될 경우 주 버전 번호가 어떻게 바뀌어야 할 지에 대해서는 아직 정해지지 않았다.

키스킷 구성 요소 필요조건 추적

메타-패키지와 키스킷의 버전이 엄격하게 연동되어 있지 않은 것과 별도로 메타-패키지의 필요 조건 항목들에 나타나는 구성 요소의 버전을 정확하게 추적하는 것은 중요하다. setup.py 파일에 나열된 각각의 구성 요소들은 단일 버전에 고정되어 있어야 한다. 이는 각각의 키스킷 버전은 등록된 구성 요소의 여러가지 버전 중 딱 한가지 버전만 설치해야 한다는 뜻이다. 예를 들어, 특정 버전의 경우 필요 조건 항목들은 다음과 같이 나타날 수 있다.

requirements = [
    "qiskit_terra==0.7.0",
    "qiskit-aer==0.1.1",
]

이것은 디버깅을 돕기도 하고, 또한 여러 구성 요소간에 버전을 추척하는 일을 좀 더 명확하게 해 준다.

또한 우리가 구성 요소들을 설치하는 순서가 매우 중요하다. ``pip``는 설치하는 순서가 중요한 의미를 지니는 진정한 의미의 의존도 해결 모듈을 가지고 있지 않다. 그렇기 때문에 구성 요소나 각각의 요소간에 의존도에 관한 필요 조건 버전이 중복되게 되면, 우리는 설치 순서가 의도했던 대로 맞추어 지는지 확인해 주어야 한다. 만약 설치시 호환성 문제로 설치 순서가 바뀌어야 한다면, 이를 명확하게 적어두어야 한다.

커뮤니티 확장 기능

키스킷은 모듈성을 염두해 두고 만들어 졌다. 많은 다른 방식으로 확장될 수 있는데, 다음 페이지에서 키스킷 커뮤니티가 키스킷과 어떻게 연관을 맺고 있으며 확장 기능과 패키지들을 개발하는지에 대해 강조하였다.

공급자

키스킷의 기본 제공자는 다른 후위 처리 장치(예를 들어 아이비엠 양자 시스템을 통해서 제공되는 후위 처리 장치들) 의 그룹에 접근할 수 있는 객체이다. 이는 여러 후위 처리 장치와 상호 작용하여 여러가지 일을 하는데, 어느 후위 처리 장치가 사용 가능한지, 특정 후위 처리 장치의 인스턴스를 회수해 오는 일, 후위 처리 장치의 특성과 설정을 가져오는 일, 여러 작업들을 실행하고 다루는 일들이 포함된다.

추가적인 후위 처리 장치

  • 의사결정 다이어그램에 기반한 양자 시뮬레이터

    - Organization: Johannes Kepler University, Linz, Austria (Alwin Zulehner and Robert Wille)
    - Description: A local provider which allows Qiskit to use decision diagram-based quantum simulation
    - Qiskit Version: 0.7
  • 양자 영감 (Quantum Inspire)

    - Organization: QuTech-Delft
    - Description: A provider for the Quantum Inspire backend
    - Qiskit Version: 0.7
    - More info: Medium Blog and GitHub.

트랜스파일러(transpiler)

회로 최적화는 양자 계산이 실제 하드웨어에서 가능하게 만들어주는 핵심 요소이다. 키스킷의 가장 중요한 요소는 (트랜스 파일러 패스들로 알려진) 특정 변환들에 따라 양자 회로를 조작하는 프레임 워크인 트랜스 파일러이다. 이는 사용자 들로 하여금 패스 매니저의 감독아래 각각의 패스에 의해 정해진 규칙을 따라 회로들을 변환하는 패스 명령어 세트를 만들수 있게 해준다. 또한 트랜스파일러 아키텍처는 확장성과 모듈성을 염두해 두고 만들어 졌기에 키스킷 사용자들이 자신의 고유 패스들을 만들고 패스 매니저를 통해 그것을 사용하고 또한 기존의 패스와 합쳐서 사용할 수 있게 해준다. 이러한 방식의 트랜스파일러 아키텍처는 연구자들이 양자 회로의 최적화에 공격적으로 참여할 수 있도록 해준다.

추가 통로들

  • t|ket〉 최적화 & 경로 통로

    - Organization: Cambridge Quantum Computing
    - Description: Transpiler pass for circuit optimization and mapping to backend using CQC’s t|ket〉compiler.
    - Qiskit Version: 0.7
    - More info: Tutorial Notebook and GitHub.

도구

키스킷을 새로운 도구와 기능으로 확장할 수 있는 것은 커뮤니티를 형성하기위한 매우 중요한 요소이다. 이러한 도구들로는 새로운 시각화 도구, 슬랙 (Slack) 연동, 주피터 (Jupyter) 확장툴 등등이 있다.

추가적인 도구들

  • 열린 통제 (OpenControls) 라이브러리

    - Organization: Q-CTRL
    - Description: Library of quantum control pulses derived from the open literature.
    - Qiskit Version: 0.7
    - More info: GitHub and Q-CTRL website