키스킷 0.38 릴리즈 노트
0.38.0
테라 0.21.2
변경 없음
에어 0.11.0
Prelude
키스킷 에어 0.11.0 릴리즈의 주요 내용은 다음과 같습니다:
- 새로운 독립형 네임스페이스로 마이그레이션( Python )
qiskit_aer AerStatevector클래스 소개- 의 에어 구현 도입
primitives,Sampler및Estimator - 다음과 함께 실행하기 위한 지원 소개 cuQuantum
새 기능
-
에 대한 지원이 추가되었습니다
BackendV2에 대한 지원을from_backend()으로 추가했습니다. 이제 입력에서NoiseModel객체를 생성할 수 있습니다BackendV2인스턴스를 생성할 수 있습니다. 에서BackendV2입력이from_backend()에서 사용되면 더 이상 사용되지 않는 두 가지 옵션인standard_gates과warnings은 정상적으로 무시됩니다. -
의 에어 구현이 추가되었습니다
primitives,Sampler와BaseSampler및BaseEstimator인터페이스는 키스킷 에어를 활용하여 프리미티브 연산을 효율적으로 수행합니다. 자세한 설명은qiskit.primitives문서에서 프리미티브 API에 대한 자세한 설명을 참조하세요. -
키스킷 에어에 외부 프로그램에서 에어의 시뮬레이션 방법을 사용할 수 있는 공유 라이브러리를 추가했습니다. 이 기능은 실험적인 기능이며 사용 중단 기간 없이 API가 변경될 수 있습니다.
-
M1 macOS 시스템에 대한 지원이 추가되었습니다. arm64 macOS 에서 지원되는 Python 버전 >= 3.8 에 대한 사전 컴파일된 바이너리는 이제 이번 릴리스와 향후 릴리스에 대해 PyPI 에 게시됩니다.
-
GPU를 사용하여 상태 벡터, 밀도 행렬 및 단일 시뮬레이터를 가속화하기 위해 cuQuantum, NVIDIA 의 양자 컴퓨팅용 API에 대한 지원이 추가되었습니다. 이것은 cuQuantum 베타 2의 체험용 구현입니다. ( 0.1.0 ) cuStateVec API는 cuQuantum 의 경로를
CUSTATEVEC_ROOT로 설정하여 Aer를 빌드함으로써 Aer의 구현 대신 가속을 활성화할 수 있습니다. (현재 바이너리 배포는 사용할 수 없습니다.) cuStateVectordevice='GPU'및cuStateVec_threshold옵션을 설정하여 활성화합니다. cuStateVec 는 입력 회로의 큐비트 수가cuStateVec_threshold보다 크면 활성화됩니다. -
ppc64le 및 s390x Linux 플랫폼에서 실행에 대한 부분 지원이 추가되었습니다. 이번 릴리스에서는 ppc64le 및 s390x Linux 플랫폼용 사전 컴파일된 바이너리를 모든 Python 버전에 게시하기 시작합니다. 그러나 다른 지원 플랫폼과 달리 키스킷의 모든 업스트림 종속성이 아직 이러한 플랫폼을 지원하는 것은 아닙니다. 따라서 이러한 종속성을 빌드하고 설치하려면 C/C++ 컴파일러가 필요할 수 있으며, Python 환경이 작동하는 간단한
pip install qiskit-aer만으로는 키스킷 에어를 설치하기에 충분하지 않습니다. 또한 이러한 제약으로 인해 사전 컴파일된 휠을 게시하기 전에 테스트할 수 없으므로 다른 플랫폼에 적용되는 플랫폼 지원과 관련된 동일한 보증이 이 플랫폼에는 적용되지 않습니다. -
+-rl로 구성된 레이블로 초기화를 허용합니다. 이제 다음 코드가 작동합니다:import qiskit from qiskit_aer import AerSimulator qc = qiskit.QuantumCircuit(4) qc.initialize('+-rl') qc.save_statevector() AerSimulator(method="statevector").run(qc)
알려진 문제점
- Linux s390x 플랫폼(또는 다른 대형 엔디안 플랫폼)에서 다음이 포함된 회로를 실행하는 경우
UnitaryGate연산이 포함된 회로를 실행하면 엔디안 버그로 인해 작동하지 않습니다. 자세한 내용은 #1506을 참조하세요.
업그레이드 주의사항
-
많은 수의 큐비트를 위한 MPI 병렬화는 MPI 프로세스에서 교환되는 데이터 크기를 줄일 수 있는 올투올 통신으로 다중 청크 스왑을 적용하도록 최적화되어 있습니다. 이번 업그레이드로 병렬화의 확장성이 향상되었습니다.
-
AerSimulator에 대해 구성된method에 따라 기본값fusion_max_qubit및fusion_threshold을 설정합니다. 이전에는 모든 시뮬레이션 방법에 대해fusion_max_qubit및fusion_threshold의 기본값이 각각5및14이었습니다. 그러나 최적의 값은 실행 방법에 따라 달라집니다. 이전 기본값에 의존하는 경우fusion_max_qubit=5또는fusion_threshold=14을 명시적으로 설정하여 이전 기본 동작을 유지할 수 있습니다. 예를 들어,from qiskit_aer import AerSimulator sim = AerSimulator(method='mps', fusion_max_qubit=5, fusion_threshold=14) -
일부 cuStateVec API의 스레드 안전 버그 수정을 포함하여 cuQuantum 22.5.0.41 을 지원하기 위한 업데이트입니다. 이제 키스킷 에어는 cuStateVec 을 활성화할 때 멀티샷 및 멀티 청크 병렬화를 위한 멀티 스레딩을 켭니다.
-
Python 3.6 으로 qiskit-aer를 실행하는 것은 더 이상 지원되지 않습니다. Python >= 3.7 이제 qiskit-aer를 설치하고 실행하는 데 필요합니다.
-
qiskit-aerPython 패키지가 독립 네임스페이스인qiskit_aer로 이동했습니다. 이전에는qiskit.providers.aer으로qiskit-terra와 네임스페이스를 공유했습니다. 이는 여러 가지 이유로 문제가 되었는데, 이번 릴리스에서는 이러한 문제에서 벗어났습니다. 당분간import qiskit.providers.aer은 계속 작동하며qiskit_aer으로 자동 리디렉션됩니다. 레거시qiskit.provider.aer네임스페이스에서 가져오기는 앞으로DeprecationWarning으로 전송됩니다. 이 릴리스부터 발생할 수 있는 문제를 방지하려면 모든 가져오기를qiskit.providers.aer에서qiskit_aer으로,qiskit.Aer에서qiskit_aer.Aer으로 업데이트하는 것이 좋습니다. -
0.9.0 이후 더 이상 사용되지 않는 스냅샷 지침(예:
SnapshotStatevector)을 제거했습니다. 이 지침을 사용하는 애플리케이션은 해당 저장 지침(예:SaveStatevector)을 사용하도록 수정해야 합니다. -
qiskit_aer.extensions모듈을 완전히 제거했습니다. 스냅샷 지침이 제거됨에 따라 이 모듈은 비어 있으며 더 이상 용도가 없어졌습니다. -
키스킷 테라의 필수 버전이 0.20.0 로 변경되었습니다.
버그 수정
-
MPI 청크 배포 수정. Thrust 구현에 대한 글로벌 인덱싱 수정, 비게이트 작업의 캐시 차단 수정이 포함됩니다. 또한 저장상태벡터는 모든 프로세스에 동일한 상태벡터를 반환합니다(첫 번째 프로세스만 이전에 상태벡터를 수신했습니다)
-
멀티플렉서 게이트에 제어 큐비트가 없는 경우 단일 게이트로 처리합니다. 이전에는 멀티플렉서 게이트에 제어 큐비트가 없는 경우 양자 상태가 업데이트되지 않았습니다.
-
RelaxationNoisePass에서 인스트럭션의 실제 단위와 상관없이 인스트럭션 지속 시간이 항상 dt 시간 단위로 간주되던 버그를 수정했습니다. 이제 모든 인스트럭션 지속 시간 단위에서 단위 변환이 올바르게 처리됩니다.자세한 내용은 #1453을 참조하세요.
-
루프 본문에서 루프 매개변수가 사용되지 않은
for루프의 시뮬레이션을 수정했습니다. 예를 들어, 이전에는 이 코드가 실패했지만 이제는 성공합니다:import qiskit from qiskit_aer import AerSimulator qc = qiskit.QuantumCircuit(2) with qc.for_loop(range(4)) as i: qc.h(0) qc.cx(0, 1) AerSimulator(method="statevector").run(qc) -
백엔드에서 T2 값이 2 * T1 보다 클 때 오류가 발생하던 버그(
NoiseModel.from_backend())를 수정했습니다. 이 수정 후에는 T2 값을 최대 2 * T1 까지 잘라내고 잘릴 경우 사용자 경고를 발행하게 됩니다. 이 버그는 #1391에 도입되었으며, 그 이전에는NoiseModel.from_backend()에서 T2 값을 2 * T1 까지 자동으로 잘라냈습니다.자세한 내용은 1464호를 참조하세요.
-
노이즈 모델을 Python 에서 C++ 로 로드할 때 직렬화 오버헤드가 크게 증가하여 의도하지 않은 중첩된 Python 다중 처리 호출로 인한 노이즈 시뮬레이션의 성능 저하를 수정했습니다. 자세한 내용은 1407호를 참조하세요.
-
이슈 #1557에 대한 수정 사항입니다. 시드_시뮬레이터 옵션을 설정하지 않으면 각 프로세스마다 다른 시드 번호가 생성됩니다. 모든 프로세스가 동일한 시드 번호를 사용하도록 Circuit에서 설정된 평균 시드를 수정합니다.
-
병렬 프로세스에 대한 다중 청크 병렬화 및 다중 샷 배포를 위한 MPI 병렬화의 수정 사항입니다. MPI 배포를 방지하는 배포 구성이 누락되어 있던 문제가 이제 수정되었습니다.
-
캐시 차단 트랜스파일러 및 GPU 또는 MPI의 청크 병렬화에 대한 수정 사항입니다. 이 수정은 제어 큐비트 또는 대상 큐비트가 많은 큐비트(> 차단_큐비트) 관련 문제를 해결합니다. 이 수정 사항부터는 다중 제어 게이트의 타겟 큐비트만 차단_큐비트에서 캐시 차단됩니다. 그러나 대상 큐비트 수가 여전히 블로킹_큐비트보다 큰 경우(즉, 큰 단일 행렬 곱셈)에는 지원되지 않습니다
-
N-큐비트 회로 명령어가 항상 명령어 큐비트가 아닌
[0, ..., N-1]큐비트에 적용되는 버그(QuantumError.to_dict())를 수정했습니다. 이 버그는 디바이스 및 가짜 백엔드 노이즈 모델에도 영향을 미쳤습니다.자세한 내용은 1415호를 참조하세요.
-
시드_시뮬레이터를 설정하지 않으면 각 회로에 시드가 무작위로 할당되므로 다중 회로 시뮬레이션을 다른 다중 회로 시뮬레이션으로 재현할 수 없습니다. 사용자는 다중 회로 시뮬레이션에서 무작위로 할당되는 시드_시뮬레이터를 사용하여 여러 개의 단일 회로 시뮬레이션을 실행해야 했습니다. 이 수정으로 사용자는 첫 번째 다중 회로 시뮬레이션에서 첫 번째 회로의 시드_시뮬레이터를 설정하여 다른 다중 회로 시뮬레이션으로 다중 회로 시뮬레이션을 재현할 수 있습니다. 이 수정 사항은 또한 https://github.com/Qiskit/qiskit-aer/issues/1511 에서 보고된 문제도 해결되었습니다. 매개변수 바인딩을 사용한 시뮬레이션이 각 회로 인스턴스에 대해 동일한 결과를 반환하는 문제입니다.
-
폴리 노이즈 사용 시 GPU에 대한 멀티샷 일괄 최적화의 성능 문제를 수정했습니다. 이 수정으로 멀티 스레딩을 통해 런타임 노이즈 샘플링이 가능하며, 여러 GPU를 사용할 때 중첩된 OpenMP 병렬화를 사용합니다. 문제 1473에 대한 수정 사항입니다 <https://github.com/Qiskit/qiskit-aer/issues/1473>
-
cuStateVec 지원 수정, cuQuantum 버전 0.40 에서 cuStateVec 의 일부 API 의 사양 변경으로 인한 빌드 오류 수정입니다.
-
동안_loop가 QuantumCircuit 의 꼬리일 때 발생하는 문제를 수정합니다. 루프는 점프 및 표시 명령으로 번역됩니다. 그러나 동안_루프가 회로의 끝에 있는 경우 마크 명령이 잘못 잘립니다. 이 수정 사항은 항상 마크 지침을 유지하도록 잘라내기 알고리즘을 수정합니다.
IBM Q 제공자 0.19.2
변경 없음