Spanish
Idiomas
English
Japanese
Spanish

Guía sobre opciones de ajuste de algoritmos

Una de las ventajas de las primitivas es que abstraen la configuración de ejecución del circuito para que los desarrolladores de algoritmos puedan concentrarse en los componentes algorítmicos puros. Sin embargo, a veces, para aprovechar al máximo un algoritmo, es posible que desees ajustar ciertas opciones de las primitivas. Esta sección describe algunas de las configuraciones comunes que podrías necesitar.

Atención

Esta sección se centra en la primitiva Options de Qiskit Runtime (importada de qiskit_ibm_runtime). Si bien la mayor parte de la interfaz primitives es común en todas las implementaciones, la mayoría de las Options no lo son. Consulta las referencias de API correspondientes para obtener información sobre las opciones de las qiskit.primitives y qiskit_aer.primitives.

1. Iteraciones

Para algunos algoritmos, establecer un número específico de iteraciones (shots) es una parte central de sus rutinas. Anteriormente, las iteraciones se podían establecer durante la llamada a backend.run(). Por ejemplo, backend.run(shots=1024). Ahora, esa configuración es parte de las opciones de ejecución («opción de segundo nivel»). Esto se puede hacer durante la configuración de la primitiva:

from qiskit_ibm_runtime import Estimator, Options

options = Options()
options.execution.shots = 1024

estimator = Estimator(session=session, options=options)

Si necesitas modificar el número de iteraciones (shots) establecidas entre repeticiones (llamadas a las primitivas), puedes configurar las iteraciones directamente en el método run(). Esto sobrescribe la configuración inicial de shots.

from qiskit_ibm_runtime import Estimator

estimator = Estimator(session=session)

estimator.run(circuits=circuits, observables=observables, shots=50)

# other logic

estimator.run(circuits=circuits, observables=observables, shots=100)

Para obtener más información sobre las opciones de las primitivas, consulta la referencia de API de la clase Options.

2. Transpilación

De forma predeterminada, las primitivas de Qiskit Runtime realizan la transpilación de circuitos. Hay varios niveles de optimización entre los que puedes elegir. Estos niveles afectan la estrategia de transpilación y pueden incluir mecanismos adicionales de supresión de errores. El nivel 0 solo implica la transpilación básica. Para obtener información sobre cada nivel de optimización, consulta la tabla de niveles de optimización en el tema de Supresión de errores.

La opción de nivel de optimización es una «opción de primer nivel» y se puede configurar de la siguiente manera:

from qiskit_ibm_runtime import Estimator, Options

options = Options(optimization_level=2)

# or..
options = Options()
options.optimization_level = 2

estimator = Estimator(session=session, options=options)

Es posible que desees configurar aún más tu estrategia de transpilación y, para ello, existen opciones de transpilación avanzadas que puedes configurar. Estas son «opciones de segundo nivel» y se pueden configurar de la siguiente manera:

from qiskit_ibm_runtime import Estimator, Options

options = Options()
options.transpilation.initial_layout = ...
options.transpilation.routing_method = ...

estimator = Estimator(session=session, options=options)

Para obtener más información y una lista completa de las opciones de transpilación avanzada, consulta la tabla de Opciones de transpilación avanzada en el tema Supresión de errores.

Finalmente, es posible que desees especificar configuraciones que no están disponibles a través de la interfaz de las primitivas, o usar pases de transpiladores personalizados. En estos casos, puedes establecer skip_transpilation=True para enviar circuitos transpilados por el usuario. Para saber cómo se hace esto, consulta el tutorial Envío de circuitos transpilados por el usuario usando primitivas.

La opción skip_transpilation es una opción de transpilación avanzada, configurada de la siguiente manera:

from qiskit_ibm_runtime import Estimator, Options

options = Options()
options.transpilation.skip_transpilation = True

estimator = Estimator(session=session, options=options)

3. Mitigación de errores

Es posible que desees aprovechar diferentes métodos de mitigación de errores y ver cómo estos afectan el rendimiento de tu algoritmo. Estos también se pueden configurar a través de la opción resilience_level. El método seleccionado para cada nivel es diferente para Sampler y Estimator. Puedes encontrar más información en el tema Configurar mitigación de errores.

La configuración es similar a las otras opciones:

from qiskit_ibm_runtime import Estimator, Options

options = Options(resilience_level = 2)

# or...

options = Options()
options.resilience_level = 2

estimator = Estimator(session=session, options=options)