키스킷 0.5 릴리즈 노트
0.5
테라 0.5
강조표시
이번 릴리스에서는 사용자 환경과 내부 기능 모두에서 키스킷에 여러 가지 개선 사항이 적용되었습니다. 변경 사항에 대한 자세한 설명은 전체 변경 로그를 참조하세요. 주요 내용은 다음과 같습니다:
- 새로운
statevectorsimulators및 기존 기능(특히 C++ 시뮬레이터)의 기능 및 성능 개선, 확장성과 유연성에 중점을 둔 백엔드 작업 방법 개편(별칭 및 백엔드 공급자 사용) - 비동기 기능을 재구성하여
Job인스턴스를 통해 비동기적으로 작업을 실행할 수 있는 더 친숙한 인터페이스를 제공합니다 - 사용자 편의성(익명 레지스터 허용 등)과 기능 향상(회로 플로팅 개선 등)을 위해 테라 전반에 걸쳐 수많은 개선 및 수정이 이루어졌습니다
호환성 고려사항
이번 릴리스에서는 지속적인 개발의 결과로 이전 버전과 호환되지 않는 몇 가지 변경 사항이 도입되었습니다. 이러한 기능 중 일부는 완전히 지원 중단되기 전 일정 기간 동안 계속 지원되지만, 새 버전에 대비하고 새로운 기능을 활용하기 위해서는 프로그램을 업데이트하는 것이 좋습니다.
QuantumProgram 변경사항
QuantumProgram 클래스의 여러 메서드가 사용 중단될 예정입니다:
-
메서드를 사용하여 백엔드 및 API와 상호 작용할 수 있습니다:
IBM Q API에 대한 연결을 열고 백엔드를 사용하는 데 권장되는 방법은
QuantumProgram메서드 대신 최상위 함수를 직접 사용하는 것입니다. 특히qiskit.register()메서드는 이전qiskit.QuantumProgram.set_api()호출과 동일한 기능을 제공합니다. 비슷한 맥락에서 사용 가능한 백엔드를 직접 쿼리할 수 있는 새로운qiskit.available_backends(),qiskit.get_backend()및 관련 기능이 있습니다. 예를 들어, 버전에 대한 다음 코드 조각은 0.4:from qiskit import QuantumProgram quantum_program = QuantumProgram() quantum_program.set_api(token, url) backends = quantum_program.available_backends() print(quantum_program.get_backend_status('ibmqx4')은 버전에 따라 다음 스니펫과 동일합니다 0.5:
from qiskit import register, available_backends, get_backend register(token, url) backends = available_backends() backend = get_backend('ibmqx4') print(backend.status) -
메서드를 사용하여 프로그램을 컴파일하고 실행할 수 있습니다:
이제 최상위 함수는
qiskit.QuantumProgram.compile()및qiskit.QuantumProgram.execute()메서드에 상응하는 함수도 제공합니다. 예를 들어, 다음 코드 조각은 버전 0.4:quantum_program.execute(circuit, args, ...)은 버전에 따라 다음 스니펫과 동일합니다 0.5:
from qiskit import execute execute(circuit, args, ...)
일반적으로 버전 0.5 부터는 QuantumProgram 에 의존하지 말고 개별 객체와 클래스를 직접 사용하는 것을 권장합니다. 예를 들어 QuantumCircuit 는 QuantumRegister, ClassicalRegister, 게이트를 직접 추가하여 인스턴스화 및 구성할 수 있습니다. 빠른 시작 섹션의 업데이트 예제 또는 메인 리포지토리의 using_qiskit_core_level_0.py 및 using_qiskit_core_level_1.py 예제를 확인하세요.
백엔드 명칭 변경
백엔드에 보다 확장 가능한 프레임워크를 제공하기 위해 그에 따라 일부 디자인이 변경되었습니다:
-
로컬 시뮬레이터 이름
로컬 시뮬레이터의 이름은 동일한 패턴을 따르기 위해 균질화되었습니다:
PROVIDERNAME_TYPE_simulator_LANGUAGEORPROJECT- 예를 들어, 이전에local_qiskit_simulator이었던 C++ 시뮬레이터는 이제local_qasm_simulator_cpp로 변경되었습니다. 현재 시뮬레이터에 대한 개요입니다:QASM시뮬레이터는 실험과 같아야 합니다. 몇 개의 큐비트에 회로를 적용하고 측정 결과를 관찰한 후 여러 번 반복하여result.get_counts()을 통해 개수 히스토그램을 얻습니다.Statevector시뮬레이터는 회로를 통해 제로 상태를 진화시킨 후 전체 상태 벡터( 진폭)를 구하는 것으로,result.get_statevector()을 통해 얻을 수 있습니다.Unitary시뮬레이터는result.get_unitary()를 통해 반환되는 회로의 일차 행렬 등가물을 구하는 것입니다.- 또한 회로의 여러 지점에
snapshot(slot)명령을 적용하여 시뮬레이터에서 중간 상태를 얻을 수 있습니다. 이렇게 하면 시뮬레이터의 현재 상태가 지정된 슬롯에 저장되며, 나중에result.get_snapshot(slot)을 통해 검색할 수 있습니다.
-
백엔드 별칭 :
이제 SDK는 시스템에서 특정 유형의 가장 성능이 좋은 시뮬레이터를 사용할 수 있는 경우 자동으로 사용할 수 있는 '별칭' 시스템을 제공합니다. 예를 들어 다음 스니펫이 있습니다:
from qiskit import get_backend backend = get_backend('local_statevector_simulator')를 입력하면 백엔드는 사용 가능한 경우 C++ 상태 벡터 시뮬레이터가 되고, 없는 경우 Python 상태 벡터 시뮬레이터로 돌아갑니다.
더 유연한 이름과 매개변수
SDK의 여러 기능이 더욱 유연하고 사용자 친화적으로 개선되었습니다:
-
자동 회로 및 레지스터 이름
qiskit.ClassicalRegister이제 이름을 명시적으로 지정하지 않고도qiskit.QuantumRegister및qiskit.QuantumCircuit을 인스턴스화할 수 있으며, 새로운 자동 이름 지정 기능으로 식별자가 자동으로 할당됩니다:q = QuantumRegister(2)또한 매개변수의 순서가 바뀐 것을 참고하세요
QuantumRegister(size, name). -
이름 또는 인스턴스를 받는 메서드
자동 이름 변경과 함께 이제
qiskit.Result.get_data()같은 여러 메서드에서 편의상 이름과 인스턴스를 모두 사용할 수 있습니다. 예를 들어 다음과 같이 단일 회로가 있는 작업의 결과를 검색할 때입니다:qc = QuantumCircuit(..., name='my_circuit') job = execute(qc, ...) result = job.result()다음 호출도 이에 해당합니다:
data = result.get_data('my_circuit') data = result.get_data(qc) data = result.get_data()