CirQ

From Alliance Doc
Jump to navigation Jump to search
Other languages:

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

File : script.sh

#!/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 :

Question.png
[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)
Représentation du circuit créant un état de Bell

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.

Question.png
[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())
Diagramme du résultat de 1000 simulations de l'état de Bell