Skip to main content
IBM Quantum Platform

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, Sampler y Estimator
  • Introducción de soporte para correr con cuQuantum

Nuevas funciones

  • Se ha añadido soporte para BackendV2 a from_backend(). Ahora puede generar un objeto NoiseModel a partir de una instancia de entrada BackendV2 de entrada. Cuando se utiliza una BackendV2 en from_backend() , las dos opciones obsoletas, standard_gates y warnings, se ignoran.

  • Añadida la implementación Aer de primitives, Sampler y BaseSampler y BaseEstimator aprovechan qiskit aer para realizar eficientemente el cálculo de las operaciones primitivas. Puede consultar la documentación qiskit.primitives para 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 opciones device='GPU' y cuStateVec_threshold . cuStateVec se activa cuando el número de qubits del circuito de entrada es igual o superior a cuStateVec_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-aer con 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 UnitaryGate no 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_qubit y fusion_threshold en función del method configurado para AerSimulator. Anteriormente, los valores por defecto de fusion_max_qubit y fusion_threshold eran 5 y 14 respectivamente 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ícitamente fusion_max_qubit=5 o fusion_threshold=14 para 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-aer Python ha pasado a ser un espacio de nombres autónomo, qiskit_aer. Anteriormente, compartía espacio de nombres con qiskit-terra al ser qiskit.providers.aer. Esto era problemático por varias razones, y esta versión se aleja de ello. Por el momento, import qiskit.providers.aer seguirá funcionando y redirigirá automáticamente a qiskit_aer . Las importaciones del espacio de nombres heredado qiskit.provider.aer emitirán un DeprecationWarning en el futuro. Para evitar posibles problemas a partir de esta versión, se recomienda actualizar todas las importaciones de qiskit.providers.aer a qiskit_aer y de qiskit.Aer a qiskit_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 (como SaveStatevector).

  • 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 RelaxationNoisePass por 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 for en 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

¿Le ha resultado útil esta página?
Informe de un error, de una errata o solicite contenido en GitHub.