Notas de la versión de Qiskit 0.6
0.6
Terra 0.6
Punto destacado
Esta versión incluye un rediseño de los componentes internos centrado en un nuevo formato de comunicación formal (Qobj), junto con funciones largamente esperadas para mejorar la experiencia del usuario en su conjunto. Los aspectos más destacados, en comparación con la versión 0.5, son:
- Mejoras en la interoperabilidad (basadas en la especificación Qobj) y la extensibilidad (facilidades para ampliar Qiskit con nuevos backends de forma transparente)
- Nuevas opciones de gestión de credenciales y autenticación para los backends de IBM Q, destinadas a simplificar el proceso y admitir la carga automática de credenciales de usuario
- Renovación de las utilidades de visualización: los usuarios de Jupyter disponen ahora de elegantes visualizaciones interactivas, junto con mejoras para el cajón de circuitos (incluida una versión basada en matplotlib)
- Mejoras de rendimiento centradas en la transpilación de circuitos: se han sentado las bases de una arquitectura más flexible y modular, incluida la paralelización de la compilación de circuitos y numerosas optimizaciones
Consideraciones acerca de la compatibilidad
Tenga en cuenta que en esta versión se han introducido algunos cambios incompatibles con versiones anteriores; las notas siguientes contienen información sobre cómo adaptarse a los nuevos cambios.
Eliminación de QuantumProgram
Como ya se indicó en la versión 0.5, la clase QuantumProgram ha quedado obsoleta y ya no está disponible para trabajar con los componentes individuales (BaseJob, QuantumCircuit, ClassicalRegister, QuantumRegister, qiskit) directamente.
Consulte las notas de la versión 0.5 y los ejemplos para obtener más información sobre la transición:
from qiskit import QuantumCircuit, ClassicalRegister, QuantumRegister
from qiskit import Aer, execute
q = QuantumRegister(2)
c = ClassicalRegister(2)
qc = QuantumCircuit(q, c)
qc.h(q[0])
qc.cx(q[0], q[1])
qc.measure(q, c)
backend = get_backend('qasm_simulator')
job_sim = execute(qc, backend)
sim_result = job_sim.result()
print("simulation: ", sim_result)
print(sim_result.get_counts(qc))IBM Q Autenticación y Qconfig.py
Se ha ampliado la gestión de credenciales para autenticarse al utilizar los backends de IBM Q, y hay nuevas opciones que pueden utilizarse para mayor comodidad:
-
guardar tus credenciales en disco una vez, y cargarlas automáticamente en futuras sesiones. Se trata de un mecanismo excepcional:
from qiskit import IBMQ IBMQ.save_account('MY_API_TOKEN', 'MY_API_URL')después, sus credenciales pueden cargarse automáticamente desde el disco invocando
load_accounts():from qiskit import IBMQ IBMQ.load_accounts()o puede cargar sólo cuentas específicas si sólo desea utilizarlas en una sesión:
IBMQ.load_accounts(project='MY_PROJECT') -
utilizar variables de entorno. Si
QE_TOKENyQE_URLestán configurados, la llamada aIBMQ.load_accounts()cargará automáticamente las credenciales a partir de ellos.
Además, el método anterior de tener un archivo Qconfig.py en la carpeta del programa y pasar las credenciales explícitamente sigue siendo compatible.
Trabajar con backends
Se ha introducido un nuevo mecanismo en Terra 0.6 como forma recomendada de obtener un backend, que permite un filtrado más potente y unificado e integrado con el nuevo sistema de credenciales. Los anteriores métodos de nivel superior register(), available_backends() y get_backend() siguen siendo compatibles, pero quedarán obsoletos en próximas versiones en favor del uso directo de los objetos qiskit.IBMQ y qiskit.Aer, que permiten un filtrado más complejo.
Por ejemplo, para listar y utilizar un backend local:
from qiskit import Aer
all_local_backends = Aer.backends(local=True) # returns a list of instances
qasm_simulator = Aer.backends('qasm_simulator')Y para listar y utilizar backends remotos:
from qiskit import IBMQ
IBMQ.enable_account('MY_API_TOKEN')
5_qubit_devices = IBMQ.backends(simulator=True, n_qubits=5)
ibmqx4 = IBMQ.get_backend('ibmqx4')Tenga en cuenta también que los nombres de los simuladores locales se han simplificado. Los nombres anteriores pueden seguir utilizándose, pero se recomienda usar los nuevos, más cortos:
Qiskit Terra 0.5 | Qiskit Terra 0.6 |
|---|---|
| local_qasm_simulator | 'qasm_simulator' |
| 'simulador_vector_estado_local' | 'simulador_vector_estado' |
| 'local_simulador_unitario_py' | simulador unitario |
Cambios en el backend y la API de trabajos
-
Los trabajos enviados a IBM Q backends tienen capacidades mejoradas. Es posible cancelarlos y reponer créditos (
job.cancel()), y recuperar trabajos anteriores ejecutados en un backend específico ya sea por id de trabajo (backend.retrieve_job(job_id)) o en lote de últimos trabajos (backend.jobs(limit)) -
Las propiedades para comprobar el estado de cada trabajo (
queued,running,validating,doneycancelled) ya no existen. Si desea comprobar el estado del trabajo, utilice la comparación de identidades contrajob.status:from qiskit.backends import JobStatus job = execute(circuit, backend) if job.status() is JobStatus.RUNNING: handle_job(job)
Consulte la nueva documentación de la clase IBMQJob para obtener más información sobre cómo utilizar la API simplificada.
-
Algunos miembros de
BaseBackendyBaseJobya no son propiedades, sino métodos, por lo que deben invocarse como funciones.Qiskit Terra 0.5Qiskit Terra 0.6backend.name backend.name() backend.status backend.status() backend.configuration backend.configuration() backend.calibration backend.properties() backend.parameters backend.jobs () backend.retrieve_job (job_id) job.status job.status() job.cancelled job.queue_position() job.running job.cancel() job.queued job.done
Mejores herramientas Jupyter
La nueva versión contiene mejoras en la experiencia del usuario al utilizar los cuadernos Jupyter.
En primer lugar, se proporcionan nuevas visualizaciones interactivas de histogramas de recuentos y estados cuánticos: plot_histogram() y plot_state(). Estos métodos utilizarán por defecto el nuevo tipo interactivo cuando el entorno sea Jupyter y exista conexión a Internet.
En segundo lugar, la nueva versión ofrece la magia de las celdas Jupyter para seguir el progreso de tu código. Utilice %%qiskit_job_status para realizar un seguimiento del estado de los trabajos enviados a los backends de IBM Q. Utilice %%qiskit_progress_bar para seguir el progreso de la compilación/ejecución.