Skip to main content
IBM Quantum Platform

키스킷 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

  • 수정 BackendSamplerBackendEstimator 가 사용자 정의 bound_pass_manager 로 성공적으로 실행되도록 수정했습니다. 이전에는 단일 회로에 대한 실행이 bound_pass_manager 를 사용하면 단계 중 하나에서 목록이 반환되지 않았기 때문에 ValueError 이 발생했습니다.

  • 트랜스파일러 패스는 GateDirection 트랜스파일러 패스는 더 이상 명시적 보정이 적용되었지만 일반 커플링 맵이나 타깃에 존재하지 않는 게이트를 거부하지 않습니다.

  • 클래스 관련 문제를 수정했습니다 CommutationChecker 클래스에서 nn 큐비트를 표현하기 위한 배열만 필요한데 내부적으로 2n2^{n} 큐비트에 대한 배열을 할당하려고 시도하는 문제를 수정했습니다. 예를 들어 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, CSdgGateqelib1.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 을 반환합니다.

  • AerStateAerStatevector 이제 적용을 지원합니다 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() 메서드가 을 반환했습니다 ResultERROR 또는 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_errors
    • QuantumError.__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() 구현에만 사용되는 비공개 함수/클래스이며 공개되어서는 안 되는 것이었습니다.

  • AerSimulatorPulseSimulator 클래스의 run() 메서드의 이전 사용되지 않는 qobj 인수 이름이 이제 제거되었습니다. 이 인자 이름은 키스킷 에어 0.8.0 릴리스의 일부로 더 이상 사용되지 않으며, 각각 circuitsschedules 인자 이름으로 사용되었습니다.

  • 에어의 setup.py 은 더 이상 빌드 요구 사항을 설치하기 위해 pip 으로의 호출을 수동으로 또는 setuptools.setupsetup_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 백엔드:

    • statevector
    • density_matrix
    • matrix_product_state
    • stabilizer

    이제 테라 함수의 백엔드로 사용될 때 break_loopcontinue_loop 지침을 지원한다고 보고합니다 transpile() 함수의 백엔드로 사용할 때 시뮬레이터는 이미 이러한 기능을 지원했지만 보고하지 않았을 뿐입니다.

IBM Q 제공자 0.20.2

이 릴리스에서는 0.20.1 에 추가된 패키지의 요구 사항에 설정된 지나치게 제한적인 버전 제약 조건이 제거됩니다. 0.20.1 의 경우 새 릴리스가 현재 qiskit-ibmq-provider 와 호환되지 않는 유일한 종속성이었기 때문에 버전 제한을 두려고 했던 유일한 종속성은 requests-ntlm 패키지였습니다. 0.20.1 의 일부로 추가된 다른 버전 제한으로 인해 qiskit-ibmq-provider 패키지가 다른 패키지에서 사용되는 종속성 버전과 호환되지 않아 여러 환경에서 설치 문제가 발생했습니다.

이 페이지가 도움이 되었습니까?
GitHub에서 버그, 오타를 보고하거나 컨텐츠를 요청하십시오.