Partager via


Prise en main des sessions

Les sessions sont une fonctionnalité clé de l’informatique quantique hybride qui vous permet de regrouper plusieurs travaux d’informatique quantique ensemble. Une session est un regroupement logique d’un ou plusieurs travaux soumis à un seul target. Chaque session a un ID unique attaché à chaque travail de cette session. Les sessions sont utiles lorsque vous souhaitez exécuter plusieurs travaux de calcul quantique en séquence, avec la possibilité d’exécuter du code classique entre les travaux quantiques.

Cet article explique l’architecture des sessions dans l’informatique quantique hybride et explique comment créer une session.

Prérequis

Pour créer une session, vous avez besoin des prérequis suivants :

  • Un compte Azure avec un abonnement actif. Si vous n’avez pas de compte Azure, inscrivez-vous gratuitement et inscrivez-vous à un abonnement de paiement à l’utilisation.

  • Un Azure Quantum espace de travail. Pour plus d’informations, consultez Créer un Azure Quantum espace de travail.

  • Un Python environnement avec Python et Pip installé.

  • Bibliothèque qdkPython. Si vous souhaitez utiliser Qiskit ou Cirq, vous devez installer les extensions azure et qiskit.

    pip install --upgrade qdk
    

    ou

    pip install --upgrade "qdk[azure,qiskit]" 
    

Qu’est-ce qu’une session ?

Dans les sessions, la ressource de calcul du client peut être déplacée vers le cloud, ce qui entraîne une latence inférieure et la possibilité de répéter l’exécution du circuit quantique avec différents paramètres. Les travaux peuvent être regroupés logiquement en une session, et les travaux de cette session peuvent être hiérarchisés par rapport aux travaux non-session. Bien que les états qubits ne soient pas persistants entre les travaux, une session permet des temps de file d’attente plus courts pour les travaux et des problèmes d’exécution plus longs.

Les sessions vous permettent d’organiser plusieurs travaux d’informatique quantique avec la possibilité d’exécuter du code classique entre les travaux quantiques. Vous serez en mesure d’exécuter des algorithmes complexes pour mieux organiser et suivre vos travaux d’informatique quantique individuels.

Un scénario utilisateur clé dans lequel vous souhaiterez peut-être combiner des travaux dans une session est des algorithmes quantiques paramétrables où la sortie d’un travail de calcul quantique informe les paramètres du travail d’informatique quantique suivant. Les exemples les plus courants de ce type d’algorithme sont Variational Quantum Eigensolvers (VQE) et Quantum Approximate Optimization Algorithms (QAOA).

Matériel pris en charge

Les sessions sont prises en charge sur tous les fournisseurs de matériel informatique quantique. Dans certains cas, les travaux soumis dans une session sont classés par ordre de priorité dans la file d’attente de ce target. Pour plus d’informations, consultez Comportement cible.

Guide pratique pour créer une session

Pour créer une session, procédez comme suit :

Cet exemple montre comment créer une session avec Q# du code en ligne à l’aide d’un Jupyter Notebook dans Visual Studio Code (VS Code). Vous pouvez également créer des sessions à l’aide d’un Python programme qui appelle un programme adjacent Q# .

Remarque

Les sessions sont gérées avec Python, même lors de l’exécution Q# de code inline.

  1. Dans VS Code, ouvrez le menu Affichage et choisissez Palette de commandes.

  2. Entrez et sélectionnez Créer : Nouveau Jupyter Notebook.

  3. En haut à droite, VS Code détectera et affichera la version de Python ainsi que l'environnement virtuel Python sélectionné pour le notebook. Si vous avez plusieurs Python environnements, vous devrez peut-être sélectionner un noyau à l’aide du sélecteur de noyau en haut à droite. Si aucun environnement n’a été détecté, consultez Jupyter Notebookinformations d’installation dans VS Code.

  4. Dans la première cellule du notebook, exécutez le code suivant :

    from qdk.azure import Workspace
    
    workspace = Workspace(
        resource_id = "", # add your resource ID
        location = "", # add your location, for example "westus"
    )
    
  5. Ajoutez une nouvelle cellule dans le notebook et importez le qsharpPython package :

    from qdk import qsharp
    
  6. Choisissez votre quantum target. Dans cet exemple, il s’agit target du simulateur IonQ.

    target = workspace.get_targets("ionq.simulator")
    
  7. Sélectionnez les configurations du target profil, soit Base, Adaptive_RIsoit Unrestricted.

    qsharp.init(target_profile=qsharp.TargetProfile.Base) # or qsharp.TargetProfile.Adaptive_RI, qsharp.TargetProfile.Unrestricted
    

    Remarque

    Adaptive_RI target les travaux de profil sont actuellement pris en charge sur Quantinuum targets. Pour plus d’informations, consultez l’informatique quantique hybride intégrée.

  8. Écrivez votre Q# programme. Par exemple, le programme suivant Q# génère un bit aléatoire. Pour illustrer l’utilisation des arguments d’entrée, ce programme prend un entier, net un tableau d’angles, anglecomme entrée.

    %%qsharp
    import Std.Measurement.*;
    import Std.Arrays.*;
    
    operation GenerateRandomBits(n: Int, angle: Double[]) : Result[] {
       use qubits = Qubit[n]; // n parameter as the size of the qubit array
       for q in qubits {
           H(q);
       }
       R(PauliZ, angle[0], qubits[0]); // arrays as entry-points parameters
       R(PauliZ, angle[1], qubits[1]);
       let results = MeasureEachZ(qubits);
       ResetAll(qubits);
       return results;
    }
    
  9. Ensuite, vous créez une session. Supposons que vous souhaitez exécuter GenerateRandomBit l’opération trois fois, de sorte que vous utilisez target.submit pour envoyer l’opération Q# avec les target données et répéter le code trois fois - dans un scénario réel, vous pouvez soumettre différents programmes au lieu du même code.

    angle = [0.0, 0.0]
    with target.open_session(name="Q# session of three jobs") as session:
        target.submit(input_data=qsharp.compile(f"GenerateRandomBits(2, {angle})"), name="Job 1", shots=100) # First job submission
        angle[0] += 1
        target.submit(input_data=qsharp.compile(f"GenerateRandomBits(2, {angle})"), name="Job 2", shots=100) # Second job submission
        angle[1] += 1
        target.submit(input_data=qsharp.compile(f"GenerateRandomBits(2, {angle})"), name="Job 3", shots=100) # Third job submission
    
    session_jobs = session.list_jobs()
    [session_job.details.name for session_job in session_jobs]
    

    Important

    Lorsque vous passez des arguments en tant que paramètres à la tâche, les arguments sont mis en forme dans l’expression Q# lorsque qsharp.compile est appelé. Cela signifie que vous devez mettre en forme vos arguments en tant qu’objets Q# . Dans cet exemple, comme les tableaux dans Python sont déjà imprimés selon le format [item0, item1, ...], les arguments d'entrée correspondent à la mise en forme Q#. Pour d'autres Python structures de données, vous devrez peut-être effectuer davantage de traitement pour obtenir les valeurs de chaîne insérées d'une manière compatible avec Q#.

  10. Une fois que vous avez créé une session, vous pouvez utiliser workspace.list_session_jobs pour récupérer une liste de tous les travaux de la session. Pour plus d’informations, consultez Comment gérer les sessions.

Comportement cible

Chaque fournisseur de matériel quantique définit leurs propres heuristiques pour mieux gérer la hiérarchisation des travaux au sein d’une session.

Quantinuum

Si vous choisissez d’envoyer des travaux au sein d’une session à un Quantinuum target, votre session a un accès exclusif au matériel tant que vous placez les travaux en file d'attente dans un délai maximal d'une minute entre chaque soumission. Après cela, vos travaux sont acceptés et gérés avec la logique de mise en file d’attente et de hiérarchisation standard.