QISKit 가이드

조금 IBM Q를 만져 보았으므로 QISKit에 대해 정리해 둡니다.

2017년 11월 시점의 기사이며 최신 내용이 아닙니다.

소개



  • IBM Q 정보
  • 양자 게이트 식 양자 컴퓨터
  • IBM quantumexperience 계정을 작성하여 무료로 사용 가능
  • 공식 사이트

  • IBM 누마타 씨의 해설 기사에서와 같이 GUI로 양자 회로를 설계하여 Simulator or 실제 기계로 계산 가능
  • 2017년 11월 현재, 주로 이용할 수 있는 것은 5 qubit의 ibmqx4, Qiita에도 해설 기사는 몇개인가 있다

  • 양자 컴퓨터로 1+1 계산 : 시뮬레이터에서 00,01끼리 더한 기사

  • 양자 컴퓨터(실기)로 양자 푸리에 변환 : ibmqx2를 이용한 양자 푸리에 변환을 한 기사

  • 양자 게이트에 대해서는 제대로 행렬 표기가 있다 영어 위키가 현재 개인적으로 알기 쉽다


  • QISKit
  • IBM Research와 연구원이 제공 한 IBM Q에 작업 던지기위한 키트

  • Github 튜토리얼 용 Jupyter, Python SDK, Swift SDK, JavaScript SDK, Python API, 사용자 가이드, openqasm 가이드 등이 있습니다

  • 공식은 영어와 일본어를 지원하며 Python SDK에서 매뉴얼
  • 또한 공식 개발 속도가 상당한 속도이므로 공식 해설이 가장 의지가됩니다
  • 일본어 대응은 종료되고있는 모양입니다 (2019 년 추가)


  • 양자 컴퓨터에서 1+1 계산 [실장편] : Python SDK 구현 예제 기사


  • QISKit에 나온 OpenQASM이란 무엇인가, API와 SDK의 차이는 무엇인가에 대해서는 이하에서는 기술합니다.

    OpenQASM


  • OpenQASM : 양자 어셈블리 언어 (QASM)
  • OpenQASM은 양자 회로를 설명하는 언어입니다
  • IBM Q의 Composer 화면에서 OpenQASM을 사용하여 회로 설계가 가능합니다.
  • 단계:
    "Switch to Qasm Editor"를 클릭하면,

    QASM으로 회로를 설계할 수 있습니다.


  • QISKit의 SDK, API는 내부에서 OpenQASM을 설명합니다
  • Cross et al. (2017)

    SDK



    예를 들어 1+1 시뮬레이터 계산은 다음과 같이 계산할 수 있지만,
    from qiskit import QuantumProgram
    import json
    
    def read_api():
        f_api = open("../api_token.json", "r")
        api_dic = json.load(f_api)
        QX_TOKEN = api_dic["api"]
        QX_URL = "https://quantumexperience.ng.bluemix.net/api"
        return(QX_TOKEN, QX_URL)
    
    class Q_Circuit():
        _Name = "summation"
        _Num_qr = 4
        _Num_cr = 4
    
    def summation():
        qp = QuantumProgram()
        token, url = read_api()
        qp.set_api(token, url)
    
        #Qbitの設定
        qr = qp.create_quantum_register("qr", Q_Circuit._Num_qr)
        cr = qp.create_classical_register("cr", Q_Circuit._Num_cr)
        qc = qp.create_circuit(Q_Circuit._Name, [qr], [cr])
    
        #回路部分       
        qc.h(qr[0])
        qc.h(qr[1])
        qc.ccx(qr[0], qr[1], qr[2])
        qc.cx(qr[0], qr[3])
        qc.cx(qr[1], qr[3])
    
        qc.measure(qr, cr)
        print(qp.get_qasm(Q_Circuit._Name))     #QASMコードの取得
        result = qp.execute([Q_Circuit._Name], shots=1024)      #計算の実行
        print(result.get_data(Q_Circuit._Name))
    
    if __name__ == '__main__':
        summation()
    
    print(qp.get_qasm(Q_Circuit._Name)) 에서 얻을 수 있도록(듯이), 또 qiskit의 내용( Open Quantum Assembly Language , _ 쿠안츠 m시 r 쿠 t. py )을 보면 알 수 있듯이, 내부에서는 OPENQASM이 사용되고 있습니다.
    (execute는 기본값이 backend="local_qasm_simulator")

    API



    API는 더 직접적으로 OpenQASM 자체를 설명하고 IBM Q로 보냅니다 (_쿠안츠 m레기s r. py).
    1+1의 경우, 이전 OPENQASM을 이용하여 시뮬레이터에서,
    from IBMQuantumExperience import IBMQuantumExperience
    import json
    
    def read_api():
        f_api = open("../api_token.json", "r")
        api_dic = json.load(f_api)
        QX_TOKEN = api_dic["api"]
        QX_URL = "https://quantumexperience.ng.bluemix.net/api"
        return(QX_TOKEN, QX_URL)
    
    def Qasm_Code():
        qasm = """//OPENQASM 2.0
    OPENQASM 2.0;
    include "qelib1.inc";
    qreg q[4];
    creg c[4];
    h q[0];
    h q[1];
    ccx q[0],q[1],q[2];
    cx q[0],q[3];
    cx q[1],q[3];
    measure q[3] -> c[0];
    measure q[2] -> c[1];
    measure q[1] -> c[2];
    measure q[0] -> c[3];
    """
        return(qasm)
    
    def main():
        token, url = read_api()
        IBMQ = IBMQuantumExperience(token)
        qasm = Qasm_Code()
        result = IBMQ.run_experiment(qasm, shots= 1024,name='api_test', timeout=60)
        print(result.values() )
    
    if __name__ == '__main__':
        main()
    

    로 계산을 실행할 수 있습니다. (run_experiment의 기본값은 backend='simulator',
    참고 코드)
    ibmqx4에 계산을 던지려면 run_experiment를 backend="ibmqx4"로 지정합니다.
    (위의 회로 설계에서는 ibmqx4에서는 계산이 실행되지 않으므로 적절히 qasm을 변경해야합니다)

    API를 통해 던진 계산은 IBM Q의 Composer 페이지의 Quantum Scores에 결과가 쌓여 버리는 것이 주의점입니다.
  • 좋은 웹페이지 즐겨찾기