French
Langues
English
Japanese
German
Korean
Portuguese, Brazilian
French
Shortcuts

Note

Cette page a été générée à partir de tutorials/circuits_advanced/07_pulse_scheduler.ipynb.

Exécuter en mode interactif dans le ` IBM Quantum lab <https://quantum-computing.ibm.com/jupyter/tutorial/circuits_advanced/07_pulse_scheduler.ipynb>`_.

Utiliser le Scheduler

L’ordonnanceur (Scheduler) va traduire un QuantumCircuit en une Pulse Schedule, en utilisant des calibrations des ´´gates´´ et des mesures: une description optimisée au niveau d’impulsion d’une opération sur des qubits particuliers.

Les systèmes d’exécution (Backends) qui sont activés avec OpenPulse auront généralement des calibrations définis pour des mesures et pour chacune de ses portes (gates) de base. Les calibrations peuvent également être définis ou mis à jour par l’utilisateur.

Utilisation de base

Pour commencer, construisez un circuit quantique comme vous le feriez normalement. Pour notre exemple ci-dessous, nous créons un simple état de Bell.

[1]:
from qiskit import QuantumCircuit

circ = QuantumCircuit(2, 2)
circ.h(0)
circ.cx(0, 1)
circ.measure([0, 1], [0, 1])

circ.draw('mpl')
[1]:
../../_images/tutorials_circuits_advanced_07_pulse_scheduler_1_0.png

Nous allons utiliser le backend simulé, FakeAlmaden, pour montrer comment utiliser l’ordonnanceur (Scheduler). Il contient des calibrations par défaut pour la mesure et pour ses portes (gates) de base. L’opération Hadamard n’est pas une de ces portes de base, donc nous utilisons le transpileur pour compiler notre circuit d’entrée pour générer un circuit équivalent en termes de portes de base de l’appareil.

[2]:
from qiskit import transpile, schedule as build_schedule
from qiskit.test.mock import FakeAlmaden

backend = FakeAlmaden()

transpiled_circ = transpile(circ, backend)  # Undefined Hadamard is replaced by U1
schedule = build_schedule(transpiled_circ, backend)

Let’s see how our schedule schedule built from the circuit transpiled_circ looks.

[3]:
schedule.draw(plot_range=[0, 2000])
[3]:
../../_images/tutorials_circuits_advanced_07_pulse_scheduler_5_0.png

Cela couvre les éléments de base! Nous avons utilisé le transpileur pour réécrire le circuit en termes de portes (´´gates´´) de base, puis utilisé les calibrations par défaut de backend pour programmer le circuit transpilé. Ensuite, nous allons passer à l’ordonnancement avec des calibrations que nous construirons nous-mêmes.

Ordonnance avec des définitions de porte customisées

If your input circuit has calibrations defined, it will use those calibrations when scheduling your circuit.

[4]:
from qiskit import pulse

with pulse.build() as h_q0:
    pulse.play(pulse.library.Gaussian(duration=256, amp=0.2, sigma=50, name='custom'),
               pulse.DriveChannel(0))

circ.add_calibration('h', [0], h_q0)

schedule = build_schedule(circ, backend)
schedule.draw(plot_range=[0, 2000])
[4]:
../../_images/tutorials_circuits_advanced_07_pulse_scheduler_7_0.png

Notice that the initial pulse on D0, the Hadamard gate, is now implemented with our custom pulse.

Méthode d’ordonnance (scheduler)

L’ordonnanceur peut suivre plusieurs routines. Par défaut, il suit une règle aussi tard que possible (ALAP, as late as possible). Une autre méthode d’ordonnance est dès que possible (ASAP, as soon as possible). Pour les deux méthodes, le planning de sortie est minimal: dans le chemin d’opération de durée la plus longue du circuit d’entrée, le moment de début de chaque opération correspond au moment de fin de l’opération procédédente. Les méthodes déterminent comment planifier (schedule) des opérations en dehors de ce chemin le plus long.

Ceci devient clair à travers un exemple:

[5]:
circ = QuantumCircuit(2, 2)
circ.x(0)
circ.x(0)
circ.x(1)
circ.measure([0, 1], [0, 1])
[5]:
<qiskit.circuit.instructionset.InstructionSet at 0x12cba98e0>

Pour notre backend simulé, ces opérations de \(X\) sont toutes de la même durée (durée = 160 dt). Pour que le planning (schedule) soit minimal, les deux opérations :math:` X` sur le qubit 0 seront planifiées consécutives (back-to-back), et l’impulsion de mesure suivra immédiatement la seconde de ces impulsions.

ALAP choisira le dernier moment valide pour ordonnancer des opérations moins restreintes, de sorte que la porte \(X\) sur le qubit 1 exécutera en synchronisation avec la deuxième porte \(X\) sur le qubit 0.

[6]:
schedule = build_schedule(circ, backend,
                          method="as_late_as_possible")
schedule.draw(channels=[pulse.DriveChannel(0), pulse.DriveChannel(1)])
[6]:
../../_images/tutorials_circuits_advanced_07_pulse_scheduler_11_0.png

D’autre part, comme son nom l’indique, ASAP ordonnancera des opérations dès que ses ressources seront libres. Ainsi, la porte \(X\) sur le qubit 1 sera programmée à time=0, en synchronisation avec la première porte \(X\) sur le qubit 0.

[7]:
schedule = build_schedule(circ, backend,
                          method="as_soon_as_possible")
schedule.draw(channels=[pulse.DriveChannel(0), pulse.DriveChannel(1)])
[7]:
../../_images/tutorials_circuits_advanced_07_pulse_scheduler_13_0.png

ALAP est la valeur par défaut car elle permet aux qubits de rester inactifs aussi longtemps que possible. Dans ce cas, la différence entre ALAP et ASAP peut être négligeable, mais dans ALAP, le qubit 0 a * pas de temps * de décomposition (decay) à partir de l’état excité avant la mesure.

[8]:
import qiskit.tools.jupyter
%qiskit_version_table
%qiskit_copyright

Version Information

Qiskit SoftwareVersion
Qiskit0.23.2
Terra0.16.2
Aer0.7.2
Ignis0.5.1
Aqua0.8.1
IBM Q Provider0.11.1
System information
Python3.9.1 (default, Dec 10 2020, 10:36:35) [Clang 12.0.0 (clang-1200.0.32.27)]
OSDarwin
CPUs6
Memory (Gb)32.0
Tue Jan 26 15:29:54 2021 EST

This code is a part of Qiskit

© Copyright IBM 2017, 2021.

This code is licensed under the Apache License, Version 2.0. You may
obtain a copy of this license in the LICENSE.txt file in the root directory
of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.

Any modifications or derivative works of this code must retain this
copyright notice, and modified files need to carry a notice indicating
that they have been altered from the originals.

[ ]: