키스킷 0.42 릴리즈 노트
0.42.1
테라 0.23.3
Prelude
키스킷 테라 0.23.3 는 사소한 버그 수정 릴리스입니다.
버그 수정
-
변환 패스의 버그를 수정했습니다
Optimize1qGatesDecomposition변환 패스에서 게이트 오류가 0일 때 치환 점수가 잘못 계산되던 버그를 수정했습니다. -
메서드
ECRGate.inverse()메서드는 이제 사용자 정의 게이트가 아닌 다른ECRGate인스턴스를 반환합니다. 자체 반전이기 때문입니다. -
QuantumState.probabilities()및QuantumState.probabilities_dict()메서드의 확률을[0, 1]간격으로 자릅니다. 이는 예를 들어 확률이 1보다 커서 샘플러의 샷 에뮬레이션에 오류가 발생할 수 있는 반올림 오류를 수정합니다. 수정 #9761. -
의 버그를 수정했습니다
BackendSampler에서 이진 확률 비트 문자열이 가장 큰 결과를 정수로 표현하는 데 필요한 최소 비트 수로 잘리는 버그가 수정되었습니다. 즉, 예를 들어{"0001": 1.0}를 측정한 결과, 결과는{"1": 1.0}로 잘렸습니다. -
생성자 메서드와 관련된 문제를 수정했습니다
PassManagerConfig.from_backend()생성자 메서드와 함께 사용되었을 때BackendV1기반 시뮬레이터 백엔드에서 사용할 때 발생하는 문제를 수정했습니다. 일부 선택적 필드를 채우지 않은 일부 시뮬레이터 백엔드의 경우 생성자에서 오류가 발생했습니다. 수정 #9265 및 #8546 -
수정
BackendSampler및BackendEstimator가 사용자 정의bound_pass_manager로 성공적으로 실행되도록 수정했습니다. 이전에는 단일 회로에 대한 실행이bound_pass_manager를 사용하면 단계 중 하나에서 목록이 반환되지 않았기 때문에ValueError이 발생했습니다. -
트랜스파일러 패스는
GateDirection트랜스파일러 패스는 더 이상 명시적 보정이 적용되었지만 일반 커플링 맵이나 타깃에 존재하지 않는 게이트를 거부하지 않습니다. -
클래스 관련 문제를 수정했습니다
CommutationChecker클래스에서 큐비트를 표현하기 위한 배열만 필요한데 내부적으로 큐비트에 대한 배열을 할당하려고 시도하는 문제를 수정했습니다. 예를 들어 4쿼비트 게이트의 경우 2킬로바이트가 아닌 32기가바이트가 필요하므로 와이드 게이트에 과도한 양의 메모리가 필요할 수 있습니다. 수정 #9197 -
에서 빈 보정 가져오기
InstructionProperties에서 빈 캘리브레이션을 올리는 문제( AttributeError )가 수정되었습니다. 이제None이 반환됩니다. -
수정
qasm()를 수정하여reset명령어 뒤에;를 추가하도록 수정했습니다. -
이제 OpenQASM 3 내보내기 중에 등록 및 매개변수 이름이 유효한 식별자가 아닌 경우 이스케이프(
qasm3.dumps())에서 유효한 식별자가 아닌 경우 이스케이프 처리됩니다. 수정 #9658. -
QPY(
qpy.load())는 이제 올바르게 역직렬화됩니다StatePreparation명령어를 올바르게 역직렬화합니다. 이전에는 QPY가 포함된 파일을 로드하려고 할 때 오류가 발생했습니다. 수정 #8297. -
64개 이상의 큐비트와 의 버그를 수정했습니다
random_circuit()의 버그(64개 이상의 큐비트 및conditional=True)를 수정하여 결과 회로에 잘못된 값이 입력되어 트랜스필레이션 또는 기타 회로 작업 중에 다양한 오류가 발생할 수 있는 문제를 해결했습니다. 수정 #9649. -
클래스의 메서드 관련 문제를 수정했습니다
OneQubitEulerDecomposer클래스의 메서드angles()와angles_and_phase()입력 행렬이complex/np.cdouble이 아닌 다른 타입인 경우 에러가 발생하던 문제를 수정했습니다. 이전 릴리스에서는 잘 작동했지만, 키스킷 테라 0.23.0 에서 내부가 러스트로 재작성되면서OneQubitEulerDecomposer의 내부가 러스트에서 다시 작성되면서. 수정 #9827 -
키스킷 게이트
CCZGate,CSGate,CSdgGate는qelib1.inc에 정의되어 있지 않으므로 OpenQASM 2.0 로 덤프할 때 해당 정의를 파일에 삽입해야 합니다. 9559, #9721, #9722 수정.
에어 0.12.0
변경 없음
IBM Q 제공자 0.20.2
변경 없음
0.42.0
테라 0.23.2
변경 없음
에어 0.12.0
Prelude
키스킷 에어 0.12.0 릴리즈의 주요 내용은 다음과 같습니다:
- 다음을 기반으로 하는 새로운 GPU 텐서 네트워크 시뮬레이터가 추가되었습니다 cuTensorNet
- 모듈에 새로운
AerDensityMatrix클래스를 추가했습니다qiskit_aer.quantum_info모듈에- 입력을 직접 변환하여
AerSimulator및 레거시QasmSimulator,StatevectorSimulator,UnitarySimulator클래스의 런타임 성능을 크게 향상시켰습니다QuantumCircuit객체를 내부 C++ 표현으로 직접 변환하여 회로를 먼저 직렬화하는 대신QasmQobj. 이 개선 사항은 큐비트 수가 적은 회로 또는parameter_binds키워드 인수를 사용하는 파라미터화된 회로에서 가장 두드러지게 나타납니다.
새 기능
-
NoiseModel에 새로운 클래스 메서드from_backend_properties()를 추가했습니다. 이렇게 하면BackendProperties객체에서 새NoiseModel객체를 만들 수 있습니다.NoiseModel.from_backend()생성자에도 비슷한 기능이 있었지만BackendProperties객체만으로는NoiseModel객체를 생성하기에 충분한 정보를 포함하지 않기 때문에 제거되었습니다. -
모듈에 새 클래스
AerDensityMatrix를 추가했습니다qiskit_aer.quantum_info모듈에 새 클래스를 추가했습니다. 이 클래스는 키스킷의 업스트림 클래스에 동일한 인터페이스를 제공하는 데 사용됩니다DensityMatrix클래스와 동일한 인터페이스를 제공하지만 키스킷 에어의 시뮬레이션에 의해 지원됩니다. -
에 새 키워드 인수
abelian_grouping를 추가했습니다Estimator. 이 인수는 입력 관측값을 큐비트 단위의 정류 가능한 관측값으로 그룹화할지 여부를 제어하는 데 사용됩니다Estimator가 입력 관측값을 큐비트 단위의 정류 가능한 관측값으로 그룹화하여 기대값을 계산하는 데 필요한 회로 실행 횟수를 줄이고 런타임 성능을 향상시킬지 여부를 제어합니다Estimator. 기본적으로 이 값은True으로 설정되어 있습니다. -
AerState에는 밀도 행렬을AER::QV::DensityMatrix으로 설정하는 새로운 메서드initialize_density_matrix()가 있습니다. 이 메서드는q.i.states.DensityMatrix에서 호출되어ndarray으로 데이터를 초기화합니다.initialize_density_matrix()에는ndarray데이터의 복사 또는 공유를 지정하는 부울 인수가 있습니다. 데이터가 C++ 및 파이썬과 공유되는 경우, C++가 데이터에 액세스하는 동안 파이썬에서 데이터를 수집해서는 안 됩니다. -
run()(모든 시뮬레이터 백엔드 클래스의 경우)로 시뮬레이션을 실행하는 데 드는 오버헤드가 크게 감소했습니다. 이는 더 이상 내부적으로 직렬화하지 않음으로써 달성되었습니다QuantumCircuit객체를QasmQobj로 직렬화하는 대신QuantumCircuit오브젝트를 시뮬레이션에 사용되는 내부 C++ 회로 구조로 직접 직렬화함으로써 가능합니다. 이 개선 사항은run()의parameter_binds키워드 인수를 사용하여 적은 수의 큐비트 또는 파라미터화된 회로를 시뮬레이션할 때 가장 두드러지게 나타납니다. 펄스 시뮬레이션(현재는 사용되지 않는PulseSimulator)과 DASK 기반 시뮬레이션은 여전히 내부 직렬화를 사용하므로 이러한 성능 개선 효과를 볼 수 없습니다. -
AerJob,circuits()에 새로운 메서드를 추가하여 객체 목록을 반환하는QuantumCircuit객체 목록을 반환하는 메서드를 추가했습니다. 이 메서드는 Qobj가 시뮬레이션에 사용되는 경우None을 반환합니다. -
AerState및AerStatevector이제 적용을 지원합니다Kraus운영자를 지원합니다.AerStatevector에서는 크라우스 연산자 중 하나가 오류 확률에 따라 양자 상태에 무작위로 적용됩니다. -
NVIDIA 에 기반한 새로운 시뮬레이션 방법 추가 cuTensorNetcuQuantum SDK의 API를 기반으로 하는 새로운 시뮬레이션 방법을 추가했습니다. 이는 회로를 내부적으로 텐서 네트워크로 변환하여 시뮬레이션을 수행함으로써 모든 양자 회로를 시뮬레이션할 수 있는 GPU 가속 일반 텐서 네트워크 시뮬레이터를 제공합니다. 이 시뮬레이션 방법을 사용하려면
AerSimulator객체를 초기화할 때method="tensor_network"및device="GPU"을 설정합니다. 예를 들어,from qiskit_aer import AerSimulator tensor_net_sim = AerSimulator(method="tensor_network", device="GPU")이 방법은 상태 벡터와 밀도 행렬 시뮬레이션을 모두 지원합니다. 회로에
SaveStatevector연산이 없는 경우 밀도 매트릭스 단일 샷 시뮬레이션으로 노이즈 시뮬레이션을 수행할 수도 있습니다.이 새로운 시뮬레이션 방법은 텐서 네트워크 슬라이싱 기법을 사용하여 여러 GPU 및 MPI 프로세스를 통한 병렬화도 지원합니다. 그러나 입력 회로가 복잡한 경우 이러한 유형의 시뮬레이션은 매우 오랜 시간이 걸릴 수 있습니다.
-
이제 소스에서 키스킷 에어를 빌드할 때 다른 BLAS 라이브러리를 사용하도록
BLA_VENDOR환경 변수를 지정할 수 있습니다. 이를 지정하지 않으면 기본적으로 OpenBLAS 이 사용됩니다. BLA_VENDOR`에 지정된 BLAS 라이브러리를 찾을 수 없는 경우 Cmake 빌드 프로세스가 중지됩니다.
알려진 문제점
- 이번 키스킷 에어 릴리즈는 코난 2.X 릴리즈 시리즈와 호환되지 않습니다. 소스에서 수동으로 키스킷 에어를 빌드하는 경우 Conan 1.x 릴리스를 사용해야 합니다. 최신 버전의 코난과의 호환성은 향후 릴리스에서 수정될 예정입니다. 자세한 내용은 1730번 이슈를 참조하세요.
업그레이드 주의사항
-
프리미티브의 기본 동작은
Estimator프리미티브의 기본 동작은 이제 입력 관측값을 큐비트 단위의 정류 가능한 관측값으로 그룹화합니다. 그룹화는 실행할 회로의 수를 줄이고 성능을 향상시킵니다. 이전 동작을 원한다면 키워드 인수를 사용하여Estimator인스턴스를 초기화할 수 있습니다abelian_grouping=False. -
컨텍스트 관리자를 사용한 프리미티브 사용과 회로를 사용한 초기화(에스티메이터에만 관찰 가능) 및 2022년 10월 키스킷 테라 0.22.0 릴리스에서 더 이상 사용되지 않는 파라미터가 제거되었습니다.
-
run()메서드의 동작이 유효하지 않거나 다른 방식으로 시뮬레이션할 수 없는QuantumCircuit객체가 입력으로 전달될 때 동작이 변경되었습니다. 이전에는 이러한 경우run()메서드가AerJob을 반환하고result()메서드가 을 반환했습니다Result를ERROR또는PARTIAL COMPLETED(모든 회로 입력이 유효하지 않은지 또는 일부만 유효하지 않은지에 따라 다름)로 반환했습니다. 이번 릴리스부터는 이러한 상태의 결과 객체를 반환하는 대신 예외가 발생하는 대신 예외가 발생합니다. 이 변경은 더 이상 내부적으로 객체를 직렬화하지 않고QuantumCircuit객체를 C++로 전달하기 전에 내부적으로 직렬화하지 않고 대신QuantumCircuit에서 직접 변환하는 대신 이제 키스킷 에어가 실행할 수 없는 회로를 시뮬레이션하려고 할 때 직접 오류가 발생합니다. 이전 동작을 원한다면 독립형 모드에서 키스킷 에어를 빌드하고 수동으로QuantumCircuit객체를 JSON 표현으로QasmQobj그런 다음 이전 동작을 유지하는 독립 실행형 Aer 바이너리로 전달합니다. -
NoiseModel에서 더 이상 사용되지 않는 방법add_nonlocal_quantum_error()이 제거되었습니다. 대체할 수 있는 방법이 없습니다. 비로컬 양자 오류를 추가하려면 자체 양자 오류를 회로에 삽입하는 트랜스파일러 패스를 작성하고, 에어 시뮬레이터에서 회로를 실행하기 직전에 패스를 실행해야 합니다. -
이제
BackendProperties객체를backend인수로 받아들이지 않도록NoiseModel.from_backend()이 변경되었습니다. 대신 새로 추가된NoiseModel.from_backend_properties()방법을 사용하세요. -
noise모듈의 여러 메서드 및 함수(아래 나열됨)에서 광범위하게 사용되는 사용되지 않는standard_gates인수가 제거되었습니다.NoiseModel.from_backend()및noise.device.basic_device_gate_errors()kraus_error(),mixed_unitary_error(),pauli_error(),depolarizing_error()에서noise.errors.standard_errorsQuantumError.__init__()
시뮬레이터가 내부적으로 노이즈(양자 오류)를 표현하는 방식에 대해 사용자가 불가지론적이어야 하므로 대체 수단을 사용할 수 없습니다.
-
QuantumError생성자는 이제noise_ops인수에 대해 더 이상 사용되지 않는 json 유사 입력 지원을 중단했습니다. 예를 들어noise_ops인수에 새 유형 입력을 대신 사용합니다,from qiskit.circuit.library import IGate, XGate from qiskit_aer.noise import QuantumError error = QuantumError([ ((IGate(), [1]), 0.9), ((XGate(), [1]), 0.1), ]) # json-like input is no longer accepted (the following code fails) # error = QuantumError([ # ([{"name": "I", "qubits": [1]}], 0.9), # ([{"name": "X", "qubits": [1]}], 0.1), # ])또한 더 이상 사용되지 않는 인수를 삭제했습니다:
number_of_qubits: 대신QuantumCircuit을 사용하여noise_ops을 정의합니다.atol: 대신QuantumError.atol속성을 사용합니다.standard_gates: 대안이 없습니다(사용자는 양자 오류의 내부 표현에 너무 신경 쓰지 않아야 합니다).
-
사용되지 않는
noise.errors.errorutils모듈은 완전히 제거되었으며 대체할 수 있는 모듈이 없습니다. 모듈의 모든 함수는standard_errors에서 함수를 구현하는 데만 사용하도록 설계된 헬퍼 함수(즉, 비공개 함수로 제공되어야 함)였으며 더 이상 사용되지 않았습니다. -
더 이상 사용되지 않는
utils.noise_remapper은 완전히 제거되었으며, 이제 C++ 코드가 회로를 잘라낼 경우 노이즈 모델을 자동으로 잘라내고 다시 매핑하기 때문에 대체할 수 없습니다. -
utils.noise_transformation모듈의 모든 사용되지 않는 함수(pauli_operators()및reset_operators())와 클래스(NoiseTransformer)는 제거되었으며 대체할 수 없습니다. 사실 이 함수는approximate_quantum_error()구현에만 사용되는 비공개 함수/클래스이며 공개되어서는 안 되는 것이었습니다. -
AerSimulator및PulseSimulator클래스의run()메서드의 이전 사용되지 않는qobj인수 이름이 이제 제거되었습니다. 이 인자 이름은 키스킷 에어 0.8.0 릴리스의 일부로 더 이상 사용되지 않으며, 각각circuits및schedules인자 이름으로 사용되었습니다. -
에어의
setup.py은 더 이상 빌드 요구 사항을 설치하기 위해pip으로의 호출을 수동으로 또는setuptools.setup의setup_requires옵션을 통해 시도하지 않도록 업데이트되었습니다. Aer를 빌드하는 가장 바람직한 방법은 다음과 같은 PEP 517 호환 빌더를 사용하는 것입니다:pip install .이 변경 사항은 빌드 요구 사항이 설치되지 않은 경우
setup.py로의 직접 호출이 더 이상 작동하지 않음을 의미합니다. 이는 최신 Python 패키징 가이드라인과 일치합니다.
지원 중단 노트
-
Python 3.7 지원으로 키스킷 에어 실행에 대한 지원은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 즉, 향후 릴리스부터는 사용 중인 Python 버전을 Python 3.8 이상으로 업그레이드해야 합니다.
-
PulseSimulator백엔드는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다.PulseSimulator백엔드를 사용하여 펄스 레벨 시뮬레이션을 수행하는 경우, 대신 키스킷 다이내믹스 라이브러리를 사용하여 시뮬레이션을 수행해야 합니다. 키스킷 다이내믹스는PulseSimulator백엔드보다 더 유연하고 강력한 펄스 레벨 시뮬레이션 프레임워크를 제공합니다. -
AerJob클래스의qobj()메서드는 이제 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다.run()에 입력으로 qobj 형식을 사용하는 것은 qiskit-aer 0.9.0 이후 더 이상 사용되지 않으며, 대부분의 경우 이 메서드는 이제None을 반환합니다. 지금run()메서드로 입력을 받으려면circuits()메서드를 대신 사용하여 작업에서 시뮬레이션된QuantumCircuit객체를 반환합니다. -
noise모듈의 여러 메서드와 함수에서 광범위하게 사용되는warnings인수는 Python 의 표준warnings라이브러리에서 필터링 함수를 사용하기 위해 더 이상 사용되지 않습니다.
버그 수정
-
비연속 메모리가 있는
numpy.ndarray인스턴스에서 새AerStatevector인스턴스를 만들 때 발생하는 문제를 수정했습니다. 이전에는AerStatevector에서 입력 배열이 연속된 것으로 가정했기 때문에 예기치 않은 동작(및 잠재적 오류)이 발생했습니다. 메모리 레이아웃을 확인하고numpy.ndarray을 사용하기 전에 내부적으로 연속 배열로 복사하도록 수정되었습니다. -
클래스 관련 문제를 수정했습니다
Sampler클래스의 문제를 수정했습니다QuantumCircuit에 여러 개의 클래식 레지스터가 포함될 경우 실패하던 문제를 수정했습니다. 수정 #1679 -
무한 루프를 유발하는 청크의 가용 메모리를 계산하기 전에 GPU에서 사용되는 클래식 레지스터의 비트 수가 설정되지 않았습니다. 따라서 이 수정 사항은 배치 샷 실행이 활성화된 경우 청크를 할당하기 전에 비트 수를 설정합니다.
-
GPU를 활성화했지만 cuQuantum 을 비활성화했을 때 빌드 오류 및 테스트 오류 수정.
-
행렬 곱 상태 시뮬레이션 방법(즉,
AerSimulator객체를 초기화할 때 키워드 인수method="matrix_product_state"설정)에서 시뮬레이터가 측정을 수행하기 전에 큐비트를 잘못 정렬하여 무한 루프가 발생할 수 있는 문제를 수정했습니다. 큐비트의 측정이 현재 MPS 구조의 순서대로 이루어지고 그 후에 후처리 단계로 정렬되도록 수정되었습니다. 이렇게 하면 시뮬레이션 방법의 성능이 향상되고 얽힌 상태를 더 정확하게 표현할 수 있습니다. 수정 #1694 -
메서드가 있는
AerSimulator백엔드:statevectordensity_matrixmatrix_product_statestabilizer
이제 테라 함수의 백엔드로 사용될 때
break_loop및continue_loop지침을 지원한다고 보고합니다transpile()함수의 백엔드로 사용할 때 시뮬레이터는 이미 이러한 기능을 지원했지만 보고하지 않았을 뿐입니다.
IBM Q 제공자 0.20.2
이 릴리스에서는 0.20.1 에 추가된 패키지의 요구 사항에 설정된 지나치게 제한적인 버전 제약 조건이 제거됩니다. 0.20.1 의 경우 새 릴리스가 현재 qiskit-ibmq-provider 와 호환되지 않는 유일한 종속성이었기 때문에 버전 제한을 두려고 했던 유일한 종속성은 requests-ntlm 패키지였습니다. 0.20.1 의 일부로 추가된 다른 버전 제한으로 인해 qiskit-ibmq-provider 패키지가 다른 패키지에서 사용되는 종속성 버전과 호환되지 않아 여러 환경에서 설치 문제가 발생했습니다.