Notas de la versión de Qiskit 0.30
0.30.1
Terra 0.18.3
Preludio
Esta versión de corrección de errores corrige algunos problemas menores en 0.18, incluida una regresión de rendimiento en assemble cuando se ejecutaban objetos QuantumCircuit en backends habilitados para pulse.
Corrección de errores
- Corregido #7004 donde
AttributeErrorse planteó cuando se ejecutaScheduleBlocken un backend pulse. Estos bloques se tratan ahora correctamente como trabajos de pulso, comoSchedule. - Se ha corregido un problema que provocaba un error al vincular un valor de parámetro complejo al coeficiente de un operador. Los calcos a
floatenPrimitiveOpse han generalizado acomplexsi es necesario, pero seguirán siendofloatsi no hay componente imaginaria. Correcciones #6976. - Actualizar los errores de puerta de 1 qubit en
plot_error_mappara utilizar la puerta sx en lugar de la puerta u2, en consonancia con los backends IBMQ.
Aer 0.9.0
No cambia
Ignis 0.6.0
No cambia
Aqua 0.9.5
No cambia
IBM Proveedor Q 0.16.0
No cambia
0.30.0
Terra 0.18.2
No cambia
Aer 0.9.0
Preludio
La versión 0.9 incluye nuevas opciones de backend para la exeucción paralela de un gran número de circuitos en un clúster HPC utilizando una distribución Dash, junto con otras mejoras generales de rendimiento y correcciones de errores.
Nuevas funciones
-
Añadido soporte para set_matrix_product_state.
-
Añadir la biblioteca qiskit
SXdgGateyCUGatea las puertas base compatibles para los backends del simulador Aer. Tenga en cuenta que laCUGatesólo es compatible de forma nativa con los métodosstatevectoryunitary. Para otros métodos de simulación, debe transpilarse a las puertas base admitidas para ese método. -
Añade soporte para la puerta Pauli de N-qubit (
qiskit.circuit.library.generalized_gates.PauliGate) a todos los métodos de simulación deAerSimulatoryQasmSimulator. -
Añade la posibilidad de establecer un ejecutor personalizado y configurar la división de trabajos para ejecutar varios circuitos en paralelo en un clustor HPC. Se puede establecer un ejecutor personalizado utilizando la opción
executor, y la división de trabajos se configura utilizando la opciónmax_job_size.Por ejemplo configurando un backend y ejecutando mediante
backend = AerSimulator(max_job_size=1, executor=custom_executor) job = backend.run(circuits)dividirá la sección en varios trabajos, cada uno de los cuales contendrá un único circuito. Si la división de trabajos está activada, el método
rundevolverá un objetoAerJobSetque contiene todas las clases individualesAerJob. Una vez finalizada la ejecución de todos los trabajos individuales, los resultados se combinan automáticamente en un único objeto Resultado devuelto porjob.result().Entre los ejecutores compatibles se incluyen los del módulo Python
concurrent.futures(p. ej.ThreadPoolExecutor,ProcessPoolExecutor), y los ejecutores del cliente distribuido dask si está instalada la biblioteca dask opcional. El uso de un ejecutor Dask permite configurar la ejecución en paralelo de múltiples circuitos en clusters HPC. -
Añade la posibilidad de registrar los datos de registro del método de simulación
matrix_product_stateen los metadatos de los resultados del experimento configurando la opción de backendmps_log_data=True. Los datos guardados incluyen las dimensiones de enlace y el valor descartado (la suma de los cuadrados de los coeficientes Schmidt que se descartaron por aproximación) después de cada instrucción de circuito relevante. -
El método
run()paraAerSimulator,QasmSimulator,StatevectorSimulator, yUnitarySimulatortiene un nuevo kwarg,parameter_bindsque se utiliza para proporcionar una lista de valores a utilizar para cualquier parámetro no ligado en el circuito de entrada. Por ejemplo:from qiskit.circuit import QuantumCircuit, Parameter from qiskit.providers.aer import AerSimulator shots = 1000 backend = AerSimulator() circuit = QuantumCircuit(2) theta = Parameter('theta') circuit.rx(theta, 0) circuit.cx(0, 1) circuit.measure_all() parameter_binds = [{theta: [0, 3.14, 6.28]}] backend.run(circuit, shots=shots, parameter_binds=parameter_binds).result()ejecutará el circuito de entrada 3 veces con los valores 0, 3.14, y 6.28 para theta. Cuando se ejecuta con varios parámetros, la longitud de las listas de valores debe ser la misma. Cuando se ejecuta con múltiples circuitos, la longitud de
parameter_bindsdebe coincidir con el número de circuitos de entrada (puede utilizar un dict vacío,{}, si no hay binds para un circuito). -
El
PulseSimulatorpuede ahora tomarQuantumCircuitobjetos enrun(). Anteriormente, sólo aceptabaScheduleobjetos como entrada arun(). Cuando se pasa un circuito o una lista de circuitos al simulador, éste llamará aschedule()para convertir los circuitos en un programa antes de ejecutar el circuito. Por ejemplo:from qiskit.circuit import QuantumCircuit from qiskit.compiler import transpile from qiskit.test.mock import FakeVigo from qiskit.providers.aer.backends import PulseSimulator backend = PulseSimulator.from_backend(FakeVigo()) circuit = QuantumCircuit(2) circuit.h(0) circuit.cx(0, 1) circuit.measure_all() transpiled_circuit = transpile(circuit, backend) backend.run(circuit)
Problemas conocidos
- Los
SaveExpectationValueySaveExpectationValueVariancehan sido desactivados para el método extended_stabilizer de losQasmSimulatoryAerSimulatordebido a que devuelven el valor incorrecto para ciertos componentes del operador Pauli. Consulte la página #1227 <https://github.com/Qiskit/qiskit-aer/issues/1227> para obtener más información y ejemplos.
Notas de actualización
- La base predeterminada para la clase
NoiseModelse ha cambiado de["id", "u3", "cx"]a["id", "rz", "sx", "cx"]debido a la desaprobación del método de circuitou3en qiskit-terra y al cambio de las puertas de base del backend qiskit-ibmq-provider. Para utilizar las puertas base antiguas, puede inicializar un modelo de ruido con puertas base personalizadas comoNoiseModel(basis_gates=["id", "u3", "cx"]). - Eliminado el kwarg
backend_optionsdel methnodrunde Aer backends que estaba obsoleto en qiskit-aer 0.7. Todas las opciones de ejecución deben pasarse ahora como kwargs separados. - Eliminado el paso de
system_modelcomo arg posicional para el métodorundelPulseSimulator.
Notas sobre características en desuso
- Pasar un qobj ensamblado directamente al método
run()de los backends del simulador Aer ha quedado obsoleto en favor de pasar los circuitos transpilados directamente comobackend.run(circuits, **run_options). - Todas las instrucciones de snapshot en
qiskit.providers.aer.extensionshan quedado obsoletas. Para la sustitución, utilice las instrucciones de guardado del móduloqiskit.providers.aer.library. - La adición de errores cuánticos no locales a un
NoiseModelha quedado obsoleta debido a incoherencias en la forma de aplicar este ruido al circuito optimizado. El ruido no local debe añadirse manualmente a un circuito programado en Qiskit utilizando un pase de transpilador personalizado antes de ejecutarlo en el simulador. - El uso de la opción
methodde los programasStatevectorSimulator, yUnitarySimulatorpara ejecutar una simulación en la GPU ha quedado obsoleto. Para ejecutar una simulación GPU en un sistema compatible, utilice en su lugar la opcióndevice='GPU'.
Corrección de errores
- Se soluciona un problema de rendimiento relacionado con la configuración del atributo
basis_gates. Anteriormente se producían efectos secundarios no deseados en la clase backend que podían hacer que el tiempo de ejecución de la simulación repetida aumentara de forma incremental. Consulte la página #1229 <https://github.com/Qiskit/qiskit-aer/issues/1229> para obtener más información y ejemplos. - Corregido error en MPS::apply_kraus. Tras aplicar la matriz de kraus a los qubits pertinentes, debemos propagar los cambios a los qubits vecinos.
- Corrige un error por el que qiskit-terra asume que los qubits de una puerta multiplexora son primero los objetivos y luego los controles de la puerta, mientras que qiskit-aer asume el orden inverso.
- Corrige un error introducido en 0.8.0 por el que las simulaciones de GPU asignaban memoria host innecesaria además de la memoria de GPU.
- Se corrige un error por el que la instrucción initialize desactivaba la optimización del muestreo de medidas para los métodos de simulación de estado vectorial de estado y producto matricial, incluso cuando era la primera instrucción del circuito o se aplicaba a todos los qubits y, por tanto, era determinista.
- Arreglar el problema #1196 utilizando los productos internos con los estados base computacionales para calcular la norma en lugar del algoritmo de estimación de la norma.
- Corrige un error en el método del simulador
stabilizerde losQasmSimulatoryAerSimulatorpor el que el valor de la expectativa para lossave_expectation_valueysnapshot_expectation_valuepodía tener el signo equivocado para ciertosYPauli. - Se ha corregido un error por el que, si la memoria necesaria era inferior a la memoria del sistema, se activaba el método de simulación multicorte y la simulación seguía iniciándose. Este caso lanzará ahora una excepción de memoria insuficiente.
- Se soluciona un problema por el que al configurar la opción
shotspara un backend conset_options(shots=k)siempre se ejecutaba el número de disparos predeterminado (1024) en lugar del valor especificado. - Corrige un error en la forma en que
AerSimulatormanejaba el valor de la opción paramax_parallel_experiments=1. Antes se trataba igual quemax_parallel_experiments=0. - Se corrige un error en el método de simulación
extended_stabilizerpor el que trataba incorrectamente la puerta qelay y las instrucciones Pauli multi-qubit como no soportadas. - Corrección de error tipográfico en las opciones
AerSimulatoryQasmSimulatorpara la opciónextended_stabilizer_norm_estimation_repetitions. - Se corrige un error al aplicar la puerta
unitaryutilizando el método de simulaciónmatrix_product_stateque no soportaba correctamente permutaciones en el orden de los qubits sobre los que se aplica la puerta. - Se soluciona un problema por el que la fusión de puertas podía seguir activada para el método de simulación
matrix_product_stateaunque no fuera compatible. Ahora la fusión está siempre desactivada para este método. - Corregido error en el método de simulación
matrix_product_stateen el cálculo de la normalización tras el truncamiento de los coeficientes Schmidt después de realizar el SVD.
Otras notas
- Mejora el rendimiento del algoritmo de muestreo de medidas para el método de simulación
matrix_product_state. El nuevo comportamiento por defecto es muestrear siempre utilizando el método mejoradomps_apply_measure. El método de muestreomps_probabilitiespuede seguir utilizándose configurando el valor de la opción personalizadamps_sample_measure_algorithm="mps_probabilities".
Ignis 0.6.0
No cambia
Aqua 0.9.5
No cambia
IBM Proveedor Q 0.16.0
No cambia