키스킷 0.7 릴리즈 노트
0.7
키스킷 0.7 에서 우리는 키스킷 에어를 도입하고 키스킷 테라와 결합했습니다.
테라 0.7
새 기능
이번 릴리스에는 몇 가지 새로운 기능과 많은 버그 수정이 포함되어 있습니다. 이번 릴리스에서는 회로도, 히스토그램, 블로흐 벡터 및 상태 시각화를 위한 인터페이스가 안정화되었습니다. 또한, 이번 릴리스에는 키스킷의 모든 측면에 걸쳐 정의되고 표준화된 비트 순서/엔디안이 포함되어 있습니다. 이 모든 인터페이스는 이번 릴리스에서 안정 인터페이스로 선언되어 향후 변경 사항에 대해 적절하고 긴 사용 중단 경고 기간이 없는 한 앞으로는 획기적인 변경이 이루어지지 않을 것입니다.
다음과 같은 새로운 기능도 도입되었습니다:
- 새로운 ASCII 아트 회로도 출력 모드
circuit.draw()또는print(circuit)호출을 통해 회로 도면을 렌더링할 수 있는QuantumCircuit객체의 새로운 회로 도면 인터페이스입니다- 회로의 DAG 표현을 그리기 위한 시각화 도구
- 로컬 matplotlib 기반 상태 플롯의 힌튼 다이어그램을 위한 새로운 양자 상태 플롯 유형
QuantumCircuit클래스from_qasm_str()및from_qasm_file()의 새로운 생성자 메서드 2개로 다음에서 회로 객체를 쉽게 생성할 수 있습니다 OpenQASM- 텐서드 상태 벡터 또는 밀도 행렬에서 블로흐 벡터를 플로팅하는 새로운 함수
plot_bloch_multivector() - 샷당 측정 결과는 시뮬레이터와 일부 기기에서 확인할 수 있습니다.
compile()또는execute()호출 시memorykwarg를True로 설정한 다음Result객체에서get_memory()메서드를 사용하여 액세스할 수 있습니다. - 양자 상태 작업을 위한 개선된 폴리 객체 및 메서드가 포함된
qiskit.quantum_info모듈 - 회로 분석 및 변환을 위한 새로운 트랜스파일 패스:
CommutationAnalysis,CommutationTransformation,CXCancellation,Decompose,Unroll,Optimize1QGates,CheckMap,CXDirection,BarrierBeforeFinalMeasurements - 트랜스파일러에 새로운 대체 스왑 매퍼 패스가 추가되었습니다:
BasicSwap,LookaheadSwap,StochasticSwap - 분석 패스, 변환 패스, 패스 관리자를 위한 글로벌
property_set, 반복-투-패스 제어를 지원하는 고급 트랜스파일러 인프라
호환성 고려사항
0.7 릴리스의 일부로 다음 항목은 더 이상 사용되지 않으며 향후 릴리스에서 제거되거나 이전 버전과 호환되지 않는 방식으로 변경될 예정입니다. 반드시 필요한 것은 아니지만, 다음 릴리스가 나오기 전에 급격한 변화를 피하기 위해 조정해야 할 사항입니다.
plot_circuit(),latex_circuit_drawer(),generate_latex_source(),matplotlib_circuit_drawer()는 qiskit.tools.visualization 에서 더 이상 사용되지 않습니다. 대신 같은 모듈의circuit_drawer()함수를 사용해야 하며, 더 이상 사용되지 않는 모든 함수의 기능을 미러링하는 kwarg 옵션이 있습니다.- 현재 기본 출력인
circuit_drawer()(라텍스 사용 및 파이썬 사용)은 더 이상 사용되지 않으며 향후 릴리스에서는text출력만 기본으로 사용하도록 변경될 예정입니다. qiskit.wrapper.load_qasm_string()및qiskit.wrapper.load_qasm_file()함수는 더 이상 사용되지 않으며 대신QuantumCircuit.from_qasm_str()및QuantumCircuit.from_qasm_file()생성자 메서드를 사용해야 합니다.stylekwarg 사전의plot_barriers및reverse_bits키는 더 이상 사용되지 않으며 대신qiskit.tools.visualization.circuit_drawer()kwargplot_barriers및reverse_bits를 사용해야 합니다.plot_state()및iplot_state()기능은 더 이상 사용되지 않습니다. 대신 필요한 시각화 방법에 대해plot_state_*()및iplot_state_*()함수를 호출해야 합니다.skip_transpiler인수는compile()및execute()에서 더 이상 사용되지 않습니다. 대신PassManager을 직접 사용할 수 있으며,pass_manager을 빈PassManager객체로 설정하고 다음을 사용하여PassManager()- 다른 출력 형식을 내보내기 위한
transpile_dag()함수formatkwarg는 더 이상 사용되지 않으며, 대신 기본 출력DAGCircuit객체를 원하는 형식으로 변환해야 합니다. - 언롤러는 더 이상 사용되지 않으며, 앞으로는 DAG에서 DAG로 언롤링하는 기능만 지원됩니다.
이번 릴리스에서는 이전 버전과 호환되지 않는 일부 변경 사항이 적용되었습니다. 다음 참고 사항에는 이러한 변경 사항에 적응하는 방법에 대한 정보가 포함되어 있습니다.
결과 객체 변경 사항
결과 객체를 보다 일관성 있고 안정적인 인터페이스로 재작성하는 작업의 일환으로 결과 객체에 저장된 데이터에 액세스하는 방법에 몇 가지 변경 사항이 적용되었습니다. 먼저 get_data() 메서드의 이름이 data() 으로 변경되었습니다. 이러한 변경과 함께 함수가 반환하는 데이터 형식도 변경됩니다. 이제 후처리를 하지 않고 백엔드에서 원시 데이터를 반환합니다. 예를 들어 이전 버전에서는 전화를 걸 수 있었습니다:
result = execute(circuit, backend).result()
unitary = result.get_data()['unitary']
print(unitary)와 같은 단일 행렬을 반환합니다:
[[1+0j, 0+0.5j], [0-0.5j][-1+0j]]하지만 이제 (이름이 바뀐 메서드를 사용하여) 호출하면 됩니다:
result.data()['unitary']를 입력하면 다음과 같이 반환됩니다:
[[[1, 0], [0, -0.5]], [[0, -0.5], [-1, 0]]]0.7 릴리스 이전과 동일한 형식으로 사후 처리된 결과를 얻으려면 결과 객체에서 각각 get_data()['counts'], get_data()['statevector'], get_data()['unitary'] 대신 get_counts(), get_statevector(), get_unitary() 메서드를 사용해야 합니다.
또한 len() 및 Result 객체에 대한 인덱싱에 대한 지원이 제거되었습니다. 대신 결과 객체에서 사후 처리된 메서드의 출력을 처리해야 합니다.
또한 Result 클래스의 get_snapshot() 및 get_snapshots() 메서드가 제거되었습니다. 대신 Result.data()['snapshots'] 을 사용하여 스냅샷에 액세스할 수 있습니다.
시각화 변경 사항
0.7 릴리스에서 시각화에 적용된 가장 큰 변경 사항은 프로젝트 요구 사항에서 Matplotlib 및 기타 시각화 종속성을 제거한 것입니다. 이는 키스킷 설치에 필요한 요구 사항과 구성을 간소화하기 위해 수행되었습니다. 회로 서랍에 대한 text, latex, latex_source 출력을 제외한 모든 시각화(모든 주피터 매직 포함)를 사용하려는 경우 시각화 종속성이 설치되어 있는지 수동으로 확인해야 합니다. 이를 위해 키스킷 테라 패키지의 선택적 요구 사항을 활용할 수 있습니다:
pip install qiskit-terra[visualization]이 외에도 안정화 작업의 일환으로 몇 가지 인터페이스가 변경되어 기존 코드에 영향을 미칠 수 있습니다. 첫 번째는 circuit_drawer() 함수의 basis kwarg가 더 이상 허용되지 않는다는 것입니다. 회로도를 그리는 데 사용되는 기준 게이트를 조정하기 위해 circuit_drawer() 에 의존하고 있었다면 circuit_drawer() 으로 전화하기 전에 이 작업을 먼저 수행해야 합니다. 예를 들어,
from qiskit.tools import visualization
visualization.circuit_drawer(circuit, basis_gates='x,U,CX')로 조정해야 합니다:
from qiskit import BasicAer
from qiskit import transpiler
from qiskit.tools import visualization
backend = BasicAer.backend('qasm_simulator')
draw_circ = transpiler.transpile(circuit, backend, basis_gates='x,U,CX')
visualization.circuit_drawer(draw_circ)앞으로 circuit_drawer() 함수는 시각화 모듈에서 회로 그리기를 위한 유일한 인터페이스가 될 것입니다. 0.7 릴리스 이전에는 다른 출력 백엔드를 사용하거나 회로 그리기를 위해 출력을 변경하는 몇 가지 다른 기능이 있었습니다. 그러나 다른 모든 기능은 더 이상 사용되지 않으며 해당 기능은 circuit_drawer() 에서 옵션으로 통합되었습니다.
다른 시각화 기능의 경우 plot_histogram() 및 plot_state() 업그레이드 시 확인해야 할 몇 가지 변경 사항도 있습니다. 첫째, 이전 릴리스에서는 이러한 함수의 출력이 대화형으로 출력 시각화를 보여줬던 것이 변경되었습니다. 그러나 대신 matplotlib.Figure 객체를 반환하도록 변경되었습니다. 이렇게 하면 비주얼리제이션을 저장하거나 표시하기 전에 훨씬 더 많은 유연성과 옵션으로 비주얼리제이션과 상호 작용할 수 있습니다. 이를 위해서는 이러한 기능을 사용하는 방식을 조정해야 합니다. 예를 들어, 이번 릴리스 이전에는 전화를 걸 때:
plot_histogram(counts)
plot_state(rho)를 클릭하면 (matplotlib 백엔드에 따라) 시각화를 표시하는 새 창이 열립니다. 그러나 0.7 부터는 이 동작을 미러링하려면 출력에서 show() 을 호출해야 합니다. 예를 들어,
plot_histogram(counts).show()
plot_state(rho).show()또는:
hist_fig = plot_histogram(counts)
state_fig = plot_state(rho)
hist_fig.show()
state_fig.show()이는 Jupyter 외부에서 실행할 때만 해당됩니다. Jupyter 노트북은 기본적으로 matplotlib.Figure 객체를 렌더링하는 방법을 이해하므로 Jupyter 환경 내부에서는 조정이 필요하지 않습니다.
그러나 그림 객체를 반환하면 출력을 처리하는 데 추가적인 유연성을 제공합니다. 예를 들어 이제 그림을 단순히 표시하는 대신 savefig() 메서드를 활용하여 직접 파일에 저장할 수 있습니다. 예를 들어,
hist_fig = plot_histogram(counts)
state_fig = plot_state(rho)
hist_fig.savefig('histogram.png')
state_fig.savefig('state_plot.png')이러한 기능으로 변경된 또 다른 주요 측면은 주피터에서 실행할 때입니다. 0.6 릴리스 plot_state() 및 plot_histogram() 에서는 시각화 렌더링을 위해 외부에서 호스팅되는 자바스크립트 라이브러리에 네트워크를 통해 연결할 수 있는 경우 대화형 자바스크립트 플롯을 사용하는 것이 기본 동작이었습니다. 그렇지 않은 경우 그냥 matplotlib 버전을 사용합니다. 그러나 0.7 릴리스에서는 더 이상 그렇지 않으며, 대신 대화형 플롯을 위한 별도의 기능인 iplot_state() 및 iplot_histogram() 을 사용하게 됩니다. plot_state() 와 plot_histogram() 는 항상 matplotlib 버전을 사용합니다.
또한 이번 릴리스부터 plot_state() 함수는 양자 상태를 표시하는 각 메서드에 대한 개별 메서드 호출을 위해 더 이상 사용되지 않습니다. plot_state() 기능은 0.9 릴리스까지 계속 작동하지만, 사용할 때마다 경고를 표시합니다. 다음
키스킷 테라 0.6 | 키스킷 테라 0.7 + |
|---|---|
| 플롯_상태(RHO) | 플롯_주_도시(RHO) |
| plot_state(rho, method='city') | 플롯_주_도시(RHO) |
| plot_state(rho, method='paulivec') | 플롯_스테이트_폴리벡(RHO) |
| plot_state(rho, method='qsphere') | 플롯_스테이트_큐스피어(RHO) |
| plot_state(rho, method='bloch') | 플롯_블로흐_멀티벡터(RHO) |
| plot_state(rho, method='hinton') | 플롯_상태_힌튼(RHO) |
대화형 JS에 해당하는 iplot_state() 도 마찬가지입니다. 함수 이름은 모두 동일하며, 각 함수에 앞에 i가 붙을 뿐입니다. 예를 들어 iplot_state(rho, method='paulivec') 는 iplot_state_paulivec(rho) 입니다.
백엔드 변경 사항
0.7 릴리스에서 개선된 사항으로 업그레이드할 때 백엔드와 관련하여 몇 가지 유의해야 할 사항이 있습니다. 가장 큰 변화는 루트 qiskit` 네임스페이스에 있는 공급자 인스턴스의 재구성입니다. Aer 공급자는 기본적으로 설치되지 않으며 qiskit-aer 패키지를 설치해야 합니다. 이 패키지에는 모든 기능을 갖춘 새로운 고성능 시뮬레이터가 포함되어 있습니다. pip install qiskit 을 통해 설치했다면 이미 설치되어 있을 것입니다. 이제 파이썬 시뮬레이터는 qiskit.BasicAer 에서, 이전 C++ 시뮬레이터는 qiskit.LegacySimulators 에서 사용할 수 있습니다. 이는 또한 C++ 시뮬레이터를 찾을 수 없을 때 파이썬 기반 시뮬레이터로의 암시적 폴백이 더 이상 존재하지 않는다는 것을 의미합니다. 로컬 C++ 기반 시뮬레이터 백엔드를 요청했는데 찾을 수 없는 경우 파이썬 시뮬레이터를 사용하는 대신 예외가 발생합니다.
또한 이전에 사용되지 않던 최상위 함수 register() 및 available_backends() 가 제거되었습니다. 또한 더 이상 사용되지 않는 backend.parameters() 및 backend.calibration() 메서드가 제거되고 backend.properties() 메서드가 사용되었습니다. 이러한 변경 사항에 대한 자세한 내용은 0.6 릴리스 노트 섹션 백엔드 작업하기를 참조하세요.
backend.jobs() 및 backend.retrieve_jobs() 호출은 더 이상 해당 작업의 결과를 반환하지 않습니다. 대신 반환된 작업 개체에서 result() 메서드를 호출해야 합니다.
컴파일러, 트랜스파일러 및 언롤러 변경 사항
컴파일러 인터페이스를 안정화하기 위한 노력의 일환으로 컴파일러 기능을 활용할 때 주의해야 할 몇 가지 변경 사항이 있습니다. 먼저 qiskit.transpiler.transpile() 함수는 이제 QuantumCircuit 객체(또는 그 목록)를 받아 QuantumCircuit 객체(또는 그 목록)를 반환한다는 점에 유의하세요. 이제 DAG 처리는 내부적으로 이루어집니다.
또한 이제 qiskit.converters 의 기능을 사용하여 회로, DAG 및 Qobj 간에 쉽게 전환할 수 있습니다.
에어 0.1
새 기능
Aer는 세 가지 시뮬레이터 백엔드를 제공합니다:
QasmSimulator실험 시뮬레이션 및 측정 결과 반환StatevectorSimulator: 모든 0 상태에 작용하는 양자 회로의 최종 상태 벡터를 반환합니다UnitarySimulator양자 회로의 행렬을 반환합니다
noise 모듈: 고급 노이즈 모델링 기능이 포함되어 있습니다 QasmSimulator
NoiseModel,QuantumError,ReadoutError에러가 있는 상태에서 키스킷 양자 회로를 시뮬레이션하기 위한 클래스입니다errors서브모듈에는 다음 유형의 양자 오류에 대한QuantumError객체를 생성하는 함수가 포함되어 있습니다: 크라우스, 혼합 유니타리, 코히어런트 유니타리, 파울리, 탈분극, 열 완화, 진폭 댐핑, 위상 댐핑, 결합 위상 및 진폭 댐핑device디바이스의BackendProperties을 기반으로 노이즈 모델을 자동으로 생성하는 서브모듈
utils 모듈:
qobj_utils는 키스킷 테라 API를 통해 아직 지원되지 않는 특수 시뮬레이터 명령어를 삽입하기 위해 Qobj를 직접 수정하는 기능을 제공합니다.
아쿠아 0.4
새 기능
-
알고리즘 및 컴포넌트를 위한 프로그래밍 방식 API - 이제 각 컴포넌트는 단일(비어 있지 않은) 생성자 호출을 통해 인스턴스화 및 초기화할 수 있습니다
-
QuantumInstance알고리즘/백엔드 디커플링을 위한 API -QuantumInstance백엔드 및 해당 설정을 캡슐화합니다 -
새로운 프로그래매틱 API를 설명하는 업데이트된 문서와 Jupyter 노트북
-
그래디언트 기반 옵티마이저를 위한 투명한 병렬화
-
다중 제어되지 않음(cnx) 작동
-
플러그형 알고리즘 구성 요소
RandomDistribution -
의 구체적인 구현
RandomDistribution:BernoulliDistribution,LogNormalDistribution,MultivariateDistribution,MultivariateNormalDistribution,MultivariateUniformDistribution,NormalDistribution,UniformDistribution, 그리고UnivariateDistribution -
의 구체적인 구현은
UncertaintyProblem:FixedIncomeExpectedValue,EuropeanCallExpectedValue, 그리고EuropeanCallDelta -
진폭 추정 알고리즘
-
키스킷 최적화: 최적화 문제를 위한 새로운 Ising 모델: 정확한 커버, 세트 패킹, 버텍스 커버, 클리크 및 그래프 파티션
-
키스킷 AI:
FeatureMap플러그형 인터페이스를 확장하는 새로운 기능 맵:PauliExpansion및PauliZExpansion- 학습 모델 직렬화/역직렬화 메커니즘
-
키스킷 금융:
- 베르누이 확률 변수에 대한 진폭 추정: 단일 큐비트 문제에 대한 진폭 추정 그림
- 여러 단변량 및 다변량 무작위 분포의 로드
- 유럽 콜 옵션: 기대값 및 델타(단변량 분포 사용)
- 채권 자산 가격 책정: 기대 가치(다변량 분포 사용)
-
Operator클래스의 폴리 문자열은 Terra 0.7 와 일치합니다. 이제 n-큐비트 폴리 문자열의 순서는q_{n-1}...q{0}따라서Operator클래스의 (de)serialier(save_to_dict및load_from_dict)도Pauli클래스의 변경 사항을 적용하도록 변경됩니다.
호환성 고려사항
HartreeFock플러그형 컴포넌트InitialState키스킷 케미스트리로 이동UCCSD플러그형 컴포넌트VariationalForm키스킷 케미스트리로 이동