Configurar la supresión de errores¶
Las técnicas de supresión de errores optimizan y transforman tu circuito en el punto de compilación para minimizar los errores. Esta es la técnica de manejo de errores más básica.
La supresión de errores generalmente genera una sobrecarga clásica de preprocesamiento en el tiempo de ejecución general. Por lo tanto, es importante lograr un equilibrio entre perfeccionar tus resultados y garantizar que tu trabajo (job) se complete en un tiempo razonable.
Las primitivas te permiten emplear técnicas de supresión de errores configurando el nivel de optimización (opción optimization_level
) y eligiendo opciones avanzadas de transpilación.
Configurar del nivel de optimización¶
La configuración optimization_level
especifica cuánta optimización realizar en los circuitos. Los niveles más altos generan circuitos más optimizados, a expensas de tiempos de transpilación más largos.
Nivel de Optimización |
Estimator y Sampler |
---|---|
0 |
Sin optimización: normalmente se utiliza para la caracterización de hardware
|
1 |
Optimización ligera:
|
2 |
Optimización media:
|
3 (default) |
Optimización Alta:
|
Ejemplo: configurar Estimator con niveles de optimización¶
from qiskit_ibm_runtime import QiskitRuntimeService, Session, Estimator, Options
from qiskit.circuit.library import RealAmplitudes
from qiskit.quantum_info import SparsePauliOp
service = QiskitRuntimeService()
options = Options(optimization_level=2)
psi = RealAmplitudes(num_qubits=2, reps=2)
H = SparsePauliOp.from_list([("II", 1), ("IZ", 2), ("XI", 3)])
theta = [0, 1, 1, 2, 3, 5]
with Session(service=service, backend="ibmq_qasm_simulator") as session:
estimator = Estimator(session=session, options=options)
job = estimator.run(circuits=[psi], observables=[H], parameter_values=[theta])
psi1_H1 = job.result()
# Close the session only if all jobs are finished, and you don't need to run more in the session
session.close()
Nota
Si no se especifica el nivel de optimización, el servicio usa optimization_level = 3
.
Ejemplo: configurar Sampler con niveles de optimización¶
from qiskit_ibm_runtime import QiskitRuntimeService, Session, Sampler, Options
service = QiskitRuntimeService()
options = Options(optimization_level=3)
with Session(service=service, backend="ibmq_qasm_simulator") as session:
sampler = Sampler(session=session, options=options)
Opciones avanzadas de transpilacion¶
También tienes la capacidad de ajustar una variedad de opciones avanzadas para configurar aún más tu estrategia de transpilación. Estos métodos se pueden utilizar junto con los niveles de optimización. Te permiten cambiar las opciones de interés y dejar que tu nivel de optimización administre el resto.
La mayoría de las opciones de transpilación se heredan de qiskit.compiler.transpile.
Opciones |
Descripción |
---|---|
options.transpilation.initial_layout(Union[dict, List, None]) |
Posición inicial de qubits virtuales en qubits físicos. |
options.transpilation.layout_method (Optional[str]) |
Nombre del pase de selección de la disposición. Uno de |
options.transpilation.routing_method (Optional[str]) |
Nombre del pase de enrutamiento: |
options.transpilation.skip_transpilation (bool) |
Esta opción es específica de las primitivas de Qiskit Runtime. Permite omitir la transpilación por completo. Si usas este método, asegúrate de verificar que tu circuito esté escrito usando las compuertas base en el backend en el que estás ejecutando. |
options.transpilation.approximation_degree (Optional[float]) |
dial heurístico utilizado para la aproximación del circuito (1,0=sin aproximación, 0,0=aproximación máxima). El valor predeterminado es sin aproximación para todos los niveles de optimización |