CirQ
CirQ est une bibliothèque d'informatique quantique à code source ouvert développée en Python par Google, qui permet de construire, optimiser, simuler et exécuter des circuits quantiques. Plus particulièrement, CirQ permet de simuler des circuits sur des configurations spécifiques de qubits, ce qui peut optimiser un circuit pour une certaine architecture de qubits. L'information sur les fonctionnalités de la bibliothèque est disponible dans la documentation et sur le GitHub de CirQ. Tout comme Snowflurry, CirQ peut être utilisée pour exécuter des circuits quantiques sur l'ordinateur quantique MonarQ.
Installation
Le simulateur d'ordinateur quantique CirQ est disponible sur toutes nos grappes. Le langage de programmation Python doit être chargé avant d'y avoir accès. Il est préférable de travailler dans un environnement virtuel Python.
[name@server ~]$ module load python/3.11
[name@server ~]$ virtualenv --no-download --clear ~/ENV && source ~/ENV/bin/activate
[name@server ~]$ pip install --no-index --upgrade pip
[name@server ~]$ pip install --no-index cirq==1.4.1
[name@server ~]$ python -c "import cirq"
[name@server ~]$ pip freeze > cirq-1.4.1-reqs.txt
La dernière commande crée un fichier nommé cirq-1.4.1-reqs.txt, que vous pouvez réutiliser dans un script de tâche, tel que décrit ci-dessous.
Exécution sur une grappe
#!/bin/bash
#SBATCH --account=def-someuser # indiquez le nom de votre compte
#SBATCH --time=00:15:00 # modifiez s'il y a lieu
#SBATCH --cpus-per-task=1 # modifiez s'il y a lieu
#SBATCH --mem-per-cpu=1G # modifiez s'il y a lieu
# Chargez les dépendances des modules.
module load StdEnv/2023 gcc python/3.11
# Générez l'environnement virtuel dans $SLURM_TMPDIR.
virtualenv --no-download ${SLURM_TMPDIR}/env
source ${SLURM_TMPDIR}/env/bin/activate
# Installez CirQ et ses dépendances.
pip install --no-index --upgrade pip
pip install --no-index --requirement ~/cirq-1.4.1-reqs.txt
# Modifiez le programme CirQ.
python cirq_example.py
Vous pouvez ensuite soumettre votre tâche à l'ordonnanceur.
Exemple d'utilisation : États de Bell
Les états de Bell sont les états les plus simples qui permettent d'expliquer à la fois la superposition et l'intrication sur des qubits. La bibliothèque CirQ permet de construire un état de Bell comme ceci :
[name@server ~]$ python
python> import cirq
python> from cirq.contrib.svg import SVGCircuit
python> from cirq import H, CNOT
python> qubits = cirq.LineQubit.range(2)
python> circuit = cirq.Circuit(H.on(qubits[0]),CNOT.on(qubits[0],qubits[1]))
python> circuit.append(cirq.measure(qubits, key='m'))
python> SVGCircuit(circuit)
Ce code construit et affiche un circuit qui prépare un état de Bell. La porte H (porte de Hadamard) crée une superposition égale de |0⟩ et |1⟩ sur le premier qubit tandis que la porte CNOT (porte X contrôlée) crée une intrication entre les deux qubits. Cet état de Bell est donc une superposition égale des états |00⟩ et |11⟩. La simulation de ce circuit à l'aide de CirQ permet de visualiser les résultats. Dans ce diagramme, le nombre entier 3 représente l'état |11⟩ puisque 3 s'écrit 11 en binaire.
[name@server ~]$ python
python> import matplotlib.pyplot as plt
python> s = cirq.Simulator().run(circuit, repetitions=1000)
python> counts = s.histogram(key='m')
python> cirq.plot_state_histogram(counts, plt.subplot())