Notas de la versión de Qiskit 0.38
0.38.0
Terra 0.21.2
No cambia
Aer 0.11.0
Preludio
Los aspectos más destacados del lanzamiento de Qiskit Aer 0.11.0 son:
- La migración a un nuevo espacio de nombres autónomo Python
qiskit_aer - La introducción de la clase
AerStatevector - La introducción de implementaciones Aer de
primitives,SampleryEstimator - Introducción de soporte para correr con cuQuantum
Nuevas funciones
-
Se ha añadido soporte para
BackendV2afrom_backend(). Ahora puede generar un objetoNoiseModela partir de una instancia de entradaBackendV2de entrada. Cuando se utiliza unaBackendV2enfrom_backend(), las dos opciones obsoletas,standard_gatesywarnings, se ignoran. -
Añadida la implementación Aer de
primitives,SampleryBaseSampleryBaseEstimatoraprovechan qiskit aer para realizar eficientemente el cálculo de las operaciones primitivas. Puede consultar la documentaciónqiskit.primitivespara obtener una descripción más detallada de la API de primitivas. -
Se ha añadido una biblioteca compartida a Qiskit Aer que permite a los programas externos utilizar los métodos de simulación de Aer. Se trata de una función experimental y su API puede modificarse sin el periodo de depreciación.
-
Se ha añadido compatibilidad con los sistemas M1 macOS. Los binarios precompilados para las versiones compatibles de Python >= 3.8 en arm64 macOS se publicarán ahora en PyPI para ésta y futuras versiones.
-
Se ha añadido soporte para las API de cuQuantum, NVIDIA para computación cuántica, con el fin de acelerar los simuladores de vectores de estado, matrices de densidad y unitarios mediante el uso de GPU. Se trata de una implementación experimental para cuQuantum Beta 2. ( 0.1.0 ) Las API de cuStateVec están habilitadas para acelerar en lugar de las implementaciones de Aer mediante la construcción de Aer estableciendo la ruta de cuQuantum a
CUSTATEVEC_ROOT. (La distribución binaria no está disponible actualmente) cuStateVector se activa configurando las opcionesdevice='GPU'ycuStateVec_threshold. cuStateVec se activa cuando el número de qubits del circuito de entrada es igual o superior acuStateVec_threshold. -
Se ha añadido compatibilidad parcial con las plataformas ppc64le y s390x Linux. Esta versión empezará a publicar binarios precompilados para las plataformas ppc64le y s390x Linux en todas las versiones Python. Sin embargo, a diferencia de otras plataformas soportadas, no todas las dependencias de Qiskit soportan aún estas plataformas. Así que un compilador C/C++ puede ser necesario para construir e instalar estas dependencias y un simple
pip install qiskit-aercon sólo un entorno de trabajo Python no será suficiente para instalar Qiskit Aer. Además, estas mismas limitaciones nos impiden probar las ruedas precompiladas antes de publicarlas, por lo que no se aplican a estas plataformas las mismas garantías de compatibilidad que existen para las demás. -
Permitir la inicialización con una etiqueta, que consiste en
+-rl. Ahora funciona el siguiente código:import qiskit from qiskit_aer import AerSimulator qc = qiskit.QuantumCircuit(4) qc.initialize('+-rl') qc.save_statevector() AerSimulator(method="statevector").run(qc)
Problemas conocidos
- Cuando se ejecuta en plataformas Linux s390x (u otras plataformas big endian) la ejecución de circuitos que contienen operaciones
UnitaryGateno funcionará debido a un error de endianeces. Véase el nº 1506 para más detalles.
Notas de actualización
-
La paralelización MPI para un gran número de qubits está optimizada para aplicar múltiples chunk-swaps como comunicación all-to-all que puede disminuir el tamaño de los datos intercambiados en los procesos MPI. Esta actualización mejora la escalabilidad de la paralelización.
-
Configure por defecto
fusion_max_qubityfusion_thresholden función delmethodconfigurado paraAerSimulator. Anteriormente, los valores por defecto defusion_max_qubityfusion_thresholderan5y14respectivamente para todos los métodos de simulación. Sin embargo, sus valores óptimos dependen de los métodos de ejecución. Si dependía de los valores predeterminados anteriores, puede establecer explícitamentefusion_max_qubit=5ofusion_threshold=14para conservar el comportamiento predeterminado anterior. Por ejemplo:from qiskit_aer import AerSimulator sim = AerSimulator(method='mps', fusion_max_qubit=5, fusion_threshold=14) -
Se trata de una actualización para dar soporte a cuQuantum 22.5.0.41 que incluye la corrección de errores de seguridad de hilos en algunas API de cuStateVec. Ahora Qiskit Aer activa el multi-threading para multidisparos y la paralelización multi-chunk al habilitar cuStateVec.
-
Ya no es posible ejecutar qiskit-aer con Python 3.6. Python >= 3.7 ahora es necesario para instalar y ejecutar qiskit-aer.
-
El paquete
qiskit-aerPython ha pasado a ser un espacio de nombres autónomo,qiskit_aer. Anteriormente, compartía espacio de nombres conqiskit-terraal serqiskit.providers.aer. Esto era problemático por varias razones, y esta versión se aleja de ello. Por el momento,import qiskit.providers.aerseguirá funcionando y redirigirá automáticamente aqiskit_aer. Las importaciones del espacio de nombres heredadoqiskit.provider.aeremitirán unDeprecationWarningen el futuro. Para evitar posibles problemas a partir de esta versión, se recomienda actualizar todas las importaciones deqiskit.providers.aeraqiskit_aery deqiskit.Aeraqiskit_aer.Aer. -
Se han eliminado las instrucciones snapshot (como
SnapshotStatevector) que estaban obsoletas desde 0.9.0. Las aplicaciones que utilizan estas instrucciones deben modificarse para utilizar las instrucciones de guardado correspondientes (comoSaveStatevector). -
Eliminado por completo el módulo
qiskit_aer.extensions. Con la supresión de las instrucciones de instantánea, este módulo ha quedado vacío y ya no sirve para nada. -
La versión necesaria de Qiskit Terra ha pasado a ser 0.20.0.
Corrección de errores
-
Correcciones para la distribución de trozos MPI. Incluida la corrección de la indexación global para las implementaciones de Thrust, la corrección del bloqueo de caché de las operaciones nogate. También savestatevector devuelve el mismo vector de estado a todos los procesos (sólo el 1er proceso recibió el vector de estado previamente)
-
Maneja una puerta multiplexora como una puerta unitaria si no tiene qubits de control. Anteriormente, si una puerta multiplexora no tenía qubits de control, el estado cuántico no se actualizaba.
-
Se ha corregido un error en
RelaxationNoisePasspor el que se asumía que la duración de las instrucciones estaba siempre en unidades de tiempo dt, independientemente de la unidad real de la isntrucción. Ahora la conversión de unidades se gestiona correctamente para todas las unidades de duración de instrucción.Véase el nº 1453 para más detalles.
-
Corregida la simulación de bucles
foren la que el parámetro de bucle no se utilizaba en el cuerpo del bucle. Por ejemplo, antes este código fallaba, pero ahora tendrá éxito: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) -
Corrige un error en
NoiseModel.from_backend()que provocaba un error cuando T2 valor superior a 2 * T1 era suministrado por el backend. Después de esta corrección, pasa a truncar T2 valor hasta 2 \ * T1 y emitir una advertencia al usuario si trunca. El error se introdujo en #1391 y, antes de eso,NoiseModel.from_backend()había truncado el valor de T2 hasta 2 * T1 silenciosamente.Para más información, véase el número 1464.
-
Corrección de la regresión de rendimiento en simulaciones de ruido debida al gran aumento de la sobrecarga de serialización para cargar modelos de ruido de Python a C++ resultante de llamadas de multiprocesamiento anidadas no intencionadas a Python. Para más detalles, véase el número 1407.
-
Esta es la solución para el problema nº 1557. Se generan diferentes números de semillas para cada proceso si no se establece la opción seed_simulator. Esta semilla fija el promedio establecido en Circuit para que todos los procesos utilicen el mismo número de semilla.
-
Se trata de un arreglo de la paralelización MPI para la paralelización multi-chunk y la distribución multi-shot sobre procesos paralelos. Faltaban configuraciones de distribución que impedían la distribución MPI, ahora está solucionado.
-
Esta es la solución para el transpilador de bloqueo de caché y la paralelización de trozos para GPUs o MPI. Esta corrección soluciona el problema con los qubits que tienen muchos qubits de control o de destino (> blocking_qubits). A partir de este arreglo, sólo los qubits objetivo de la puerta multicontrolada se bloquean en caché en blocking_qubits. Pero no admite el caso de que el número de qubits de destino sea aún mayor que blocking_qubits (es decir, una gran multiplicación de matrices unitarias)
-
Corrige un error en
QuantumError.to_dict()donde las instrucciones de circuito N-qubit donde la instrucción ensamblada siempre se aplicaba a los qubits[0, ..., N-1]en lugar de a los qubits de la instrucción. Este fallo también afectaba a los modelos de ruido del dispositivo y del falso backend.Para más detalles, véase el número 1415.
-
Debido a que se asignó aleatoriamente una semilla a cada circuito si seed_simulator no está configurado, la simulación multicircuito no fue reproducible con otra simulación multicircuito. Los usuarios debían realizar una simulación múltiple de un solo circuito con el simulador seed_simulator, que se asigna aleatoriamente en la simulación multicircuito. Esta corrección permite a los usuarios reproducir una simulación multicircuito con otra simulación multicircuito configurando seed_simulator del primer circuito en la primera simulación multicircuito. Esta corrección también resuelve un problema reportado en https://github.com/Qiskit/qiskit-aer/issues/1511 en el que la simulación con parámetros vinculantes devuelve resultados idénticos para cada instancia de circuito.
-
Solucionado un problema de rendimiento en la optimización por lotes multidisparo para GPU al utilizar ruido Pauli. Esta corrección permite el multithreading para ejecutar el muestreo de ruido y utiliza la paralelización anidada OpenMP cuando se utilizan varias GPU. Esta es la solución para el problema 1473 <https://github.com/Qiskit/qiskit-aer/issues/1473>
-
Esta es la corrección del soporte de cuStateVec, corrección del error de compilación debido al cambio de especificación de algunas API de cuStateVec de la versión cuQuantum 0.40.
-
Corrige un problema cuando while_loop es la cola de QuantumCircuit. while_loop se traduce a instrucciones jump y mark. Sin embargo, si un while_loop está al final de un circuito, su instrucción mark se trunca erróneamente. Esta corrección corrige el algoritmo de truncado para que siempre queden instrucciones de marca.
IBM Proveedor Q 0.19.2
No cambia