Aller au contenu principal

Introduction aux fonctions Qiskit

Notes
  • Les fonctions Qiskit sont une fonctionnalité expérimentale disponible uniquement pour les utilisateurs des plans IBM Quantum® Premium, Flex et On-Prem (via l'API IBM Quantum Platform). Elles sont en version préliminaire et peuvent être modifiées.
Versions des packages

Le code de cette page a été développé avec les dépendances suivantes. Nous recommandons d'utiliser ces versions ou des versions plus récentes.

qiskit[all]~=1.4.1
qiskit-ibm-runtime~=0.37.0
qiskit-ibm-catalog~=0.4

Les fonctions Qiskit simplifient et accélèrent la découverte d'algorithmes et le développement d'applications à l'échelle utilitaire, en abstrayant certaines parties du flux de développement logiciel quantique. De cette façon, les fonctions Qiskit libèrent du temps normalement consacré à l'écriture manuelle de code et au réglage fin des expériences.

Aperçu des fonctions Qiskit Les fonctions se présentent sous deux formes :

TypeQue fait-elle ?Exemples d'entrées et de sortiesPour qui est-elle destinée ?
Fonction de circuitInterface simplifiée pour exécuter des circuits. Abstrait la transpilation, la suppression d'erreurs et la mitigation d'erreursEntrée : objets PUB abstraits
Sortie : valeurs d'espérance mitigées
Chercheurs utilisant Qiskit pour découvrir de nouveaux algorithmes et applications, sans avoir besoin de se concentrer sur l'optimisation matérielle ou la gestion des erreurs. Les fonctions de circuit peuvent être utilisées pour construire des fonctions d'application personnalisées.
Fonction d'applicationCouvre des tâches de plus haut niveau, comme l'exploration d'algorithmes et des cas d'usage spécifiques à un domaine. Abstrait le flux de travail quantique pour résoudre des tâches, avec des entrées et des sorties classiquesEntrée : molécules, graphes
Sortie : énergie de l'état fondamental et des états excités, valeurs optimales pour la fonction de coût
Chercheurs dans des domaines non quantiques, qui intègrent le quantique dans des flux de travail classiques à grande échelle existants, sans avoir besoin de mapper des données classiques vers des circuits quantiques.
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-catalog qiskit-ibm-runtime

Les fonctions sont fournies par IBM® et des partenaires tiers. Chacune est performante pour des caractéristiques de charge de travail spécifiques et dispose d'options de réglage des performances uniques.

Aperçu des fonctions disponibles

Fonctions de circuit

NomFournisseurUtilisation recommandéeAvantages uniques
Tensor-Network Error MitigationAlgorithmiqCharges de travail avec des observables de faible poids et des circuits sans boucle.Réduit la surcharge de mesure et la variance, surpassant les références standard de mitigation d'erreurs telles que l'extrapolation du bruit zéro (ZNE) et l'annulation probabiliste d'erreurs (PEC) pour les classes de circuits concernées.
QESEM : Suppression et mitigation d'erreursQedmaCharges de travail incluant des circuits avec des portes fractionnaires ou paramétrées, des observables de poids élevé, et des flux de travail nécessitant des valeurs d'espérance non biaisées et des estimations de temps d'exécution précises.Produit des valeurs d'espérance non biaisées avec une variance et une surcharge de ressources réduites, surpassant ZNE et PEC pour les classes de circuits concernées.
Performance ManagementQ-CTRLCharges de travail contenant des circuits paramétriques, des circuits profonds, ou nécessitant de nombreuses exécutions de circuits.Applique automatiquement la suppression d'erreurs pilotée par IA aux algorithmes quantiques, maximisant les performances des appareils IBM pour obtenir des résultats précis tout en réduisant le nombre de shots, le temps de calcul et le coût.

Méthode sans surcharge qui améliore la précision d'exécution pour les primitives Sampler et Estimator, compatible avec n'importe quel poids d'observables.

Fonctions d'application

NomFournisseurUtilisation recommandéeAvantages uniques
QUICK-PDEColibriTDUtiliser le calcul quantique pour des EDP multi-physiques.

Préparer des flux de travail de simulation pour le matériel quantique, tout en gardant un contrôle total sur les paramètres de modélisation quantiques et physiques.
Offre un cadre VQA hybride robuste qui fournit des solutions EDP précises et évolutives grâce à un encodage avancé des solutions et à des méthodes spectrales, ce qui en fait un point d'entrée idéal pour les équipes cherchant à développer des capacités de simulation prêtes pour le quantique.
Quantum Portfolio OptimizerGlobal Data QuantumCharges de travail d'optimisation financière, cherchant des stratégies de portefeuille optimales dans le temps tout en minimisant le risque et en maximisant les rendements, permettant le backtesting de stratégies de trading.Résout des problèmes d'optimisation combinatoire grâce à une adaptation hautement spécialisée de l'algorithme quantique VQE pour ce cas d'usage financier, en utilisant des stratégies d'exécution optimisées et des optimiseurs, ainsi que des techniques de mitigation d'erreurs adaptées à l'optimisation de portefeuille.
HI-VQE ChemistryQunova ComputingCharges de travail en chimie computationnelle, simulation moléculaire, science des matériaux, ou toute simulation hamiltonienne nécessitant de résoudre des problèmes de structure électronique à plusieurs corps.Résout les structures électroniques moléculaires en utilisant SQD amélioré avec une précision chimique (1 kcal/mol, 1,6 mHa) pour des problèmes modélisés avec 40 à 60 qubits, surpassant certaines solutions classiques sur des supercalculateurs ou le SQD standard en vitesse de convergence ou en précision, respectivement, d'ordres de grandeur.
Iskay Quantum OptimizerKipu QuantumCharges de travail d'optimisation telles que la planification, la logistique, le routage et les problèmes QUBO/HUBO.

Méthodes classiques de pré- et post-traitement réglables intégrées pour la routine d'optimisation quantique.

Fournit un avantage en temps d'exécution par rapport aux solveurs classiques (CPLEX, recuit simulé et recherche taboue) sur des benchmarks HUBO sélectionnés.

ms_5_100 Market Split, un défi difficile, résolu en quelques heures (voir ce tutoriel).
Singularity Machine LearningMultiverse ComputingFlux de travail de classification par apprentissage automatique classique pouvant bénéficier d'une meilleure précision ou efficacité computationnelle en tirant parti de l'optimisation quantique exécutée sur le matériel IBM.Fournit une précision comparable ou supérieure aux modèles classiques tels que Random Forest ou XGBoost, tout en opérant avec significativement moins d'apprenants et un ensemble plus compact.

Alimenté par un vote optimisé quantiquement, il sélectionne les apprenants les plus informatifs et affine les frontières de décision, résultant en une plus grande efficacité, une complexité de modèle réduite et des performances plus robustes.
Optimization SolverQ-CTRLProblèmes d'optimisation binaire ou tout problème combinatoire pouvant être mappé vers une fonction de coût binaire.

Les fonctions de coût de tout ordre et les tailles de problèmes jusqu'à l'échelle maximale de l'appareil sont prises en charge.
Solution d'optimisation quantique de bout en bout, sensible au bruit, qui permet de saisir des définitions de problèmes de haut niveau et trouve automatiquement des solutions précises à des problèmes combinatoires classiquement difficiles sur du matériel quantique à l'échelle utilitaire.

Elle abstrait la complexité en gérant la suppression d'erreurs, le mapping efficace et l'optimisation hybride quantique-classique pour résoudre des tâches d'optimisation à pleine échelle sans expertise quantique approfondie.

Démarrer avec les fonctions Qiskit

Les utilisateurs des plans Premium, Flex et On-Prem (via l'API IBM Quantum Platform) peuvent commencer à utiliser IBM Qiskit Functions gratuitement, ou peuvent obtenir une licence auprès de l'un des partenaires ayant contribué une fonction au catalogue.

Demander un essai gratuit pour les fonctions Qiskit tierces

Pour demander un nouvel essai gratuit, accède au Catalogue de fonctions Qiskit et explore le panneau de détails. Clique sur Request a free trial et remplis les informations requises par le partenaire de la fonction, notamment l'AccessGroupId IBM Cloud :

  1. Accède à IBM Cloud IAM.
  2. Vérifie ton éligibilité.
    • Change ton compte dans la barre supérieure vers un compte au format suivant : XXXXXXX - [Nom de l'organisation]
    • Assure-toi que l'organisation est la même que celle associée à ton compte Premium.
    • Si tu vois « [Ton nom]'s Account », tu utilises ton compte personnel, qui n'est pas éligible à l'accès Premium.
  3. Trouve ton identifiant de groupe d'accès.
    • Clique sur un nom de groupe.
    • Clique sur Détails.
    • Copie l'identifiant du groupe d'accès. Il devrait commencer par AccessGroup-.

Installer le client du catalogue de fonctions Qiskit

  1. Pour commencer à utiliser les fonctions Qiskit, installe le client IBM Qiskit Functions Catalog :

    pip install qiskit-ibm-catalog
  2. Récupère ta clé API depuis le tableau de bord IBM Quantum Platform et active ton environnement virtuel Python. Consulte les instructions d'installation si tu n'as pas encore configuré d'environnement virtuel.

    Si tu travailles dans un environnement Python de confiance (par exemple, sur un ordinateur portable ou un poste de travail personnel), utilise la méthode save_account() pour enregistrer tes identifiants localement. (Passe à l'étape suivante si tu n'utilises pas un environnement de confiance, comme un ordinateur partagé ou public, pour t'authentifier sur IBM Quantum Platform.)

    Pour utiliser save_account(), exécute python dans ton terminal, puis entre ce qui suit :

    from qiskit_ibm_catalog import QiskitFunctionsCatalog

    QiskitFunctionsCatalog.save_account(channel="ibm_quantum_platform", token="<your-token>", instance="<instance-crn>")

    Tape exit(). Désormais, chaque fois que tu devras t'authentifier au service, tu pourras charger tes identifiants avec

    from qiskit_ibm_catalog import QiskitFunctionsCatalog
    catalog = QiskitFunctionsCatalog()
# Load saved credentials
from qiskit_ibm_catalog import QiskitFunctionsCatalog

catalog = QiskitFunctionsCatalog(channel="ibm_quantum_platform")
  1. Évite d'exécuter du code sur une machine non fiable ou dans un environnement Python cloud externe pour minimiser les risques de sécurité. Si tu dois utiliser un environnement non fiable (par exemple, sur un ordinateur public), change ta clé API après chaque utilisation en la supprimant sur la page Clés API IBM Cloud pour réduire le risque. En savoir plus dans la rubrique Gestion des clés API utilisateur. Pour initialiser le service dans cette situation, développe la section suivante pour voir le code que tu peux utiliser :

    Initialiser le service dans un environnement non fiable
    from qiskit_ibm_catalog import QiskitFunctionsCatalog

    # After using the following code, delete your API key on the IBM Quantum Platform home dashboard
    catalog = QiskitFunctionsCatalog(token="<YOUR_API_KEY>") # Use the 44-character API_KEY you created and saved from the IBM Quantum Platform Home dashboard
    attention

    Protège ta clé API ! N'inclus jamais ta clé dans le code source, un script Python ou un fichier notebook. Lorsque tu partages du code avec d'autres personnes, assure-toi que ta clé API n'est pas intégrée directement dans le script Python. Partage plutôt le script sans la clé et fournis des instructions pour la configurer de manière sécurisée.

    Si tu as accidentellement partagé ta clé avec quelqu'un ou si tu l'as incluse dans un système de contrôle de version comme Git, révoque immédiatement ta clé en la supprimant sur la page Clés API IBM Cloud pour réduire le risque. En savoir plus dans la rubrique Gestion des clés API utilisateur.

  2. Après authentification, tu peux lister les fonctions du catalogue de fonctions Qiskit auxquelles tu as accès :

catalog.list()
[QiskitFunction(qunova/hivqe-chemistry),
QiskitFunction(global-data-quantum/quantum-portfolio-optimizer),
QiskitFunction(algorithmiq/tem),
QiskitFunction(qedma/qesem),
QiskitFunction(multiverse/singularity),
QiskitFunction(ibm/circuit-function),
QiskitFunction(q-ctrl/optimization-solver),
QiskitFunction(colibritd/quick-pde),
QiskitFunction(q-ctrl/performance-management),
QiskitFunction(kipu-quantum/iskay-quantum-optimizer)]

Exécuter les fonctions activées

Une fois qu'un objet catalog a été instancié, tu peux sélectionner une fonction avec catalog.load(provider/function-name) :

ibm_cf = catalog.load("ibm/circuit-function")

Chaque fonction Qiskit possède des entrées, options et sorties personnalisées. Consulte les pages de documentation spécifiques à la fonction que tu souhaites exécuter pour plus d'informations. Par défaut, tous les utilisateurs ne peuvent exécuter qu'un seul job de fonction à la fois :

# This cell is hidden from users
# It gets these details programmatically so we can test this notebook
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit.circuit.random import random_circuit

service = QiskitRuntimeService()
instance = service.active_account()["instance"]
backend_name = service.least_busy().name

circuit = random_circuit(num_qubits=2, depth=2, seed=42)
observable = "Z" * circuit.num_qubits
job = ibm_cf.run(
pubs=[(circuit, observable)],
instance=instance,
backend_name=backend_name, # E.g. "ibm_fez"
)

job.job_id
'7f08c9d5-471b-4da2-92e7-4f2cb94c23a8'

Vérifier le statut du job

conseil

Actuellement, le tableau des charges de travail IBM Quantum ne reflète que les charges de travail Qiskit Runtime. Utilise job.status() pour voir le statut actuel de ta charge de travail de fonction Qiskit.

Avec l'job_id de ta fonction Qiskit, tu peux vérifier le statut des jobs en cours d'exécution. Voici les statuts possibles :

  • QUEUED : Le programme distant est dans la file d'attente de la fonction Qiskit. La priorité de la file est basée sur ton utilisation des fonctions Qiskit.
  • INITIALIZING : Le programme distant démarre ; cela inclut la configuration de l'environnement distant et l'installation des dépendances.
  • RUNNING : Le programme est en cours d'exécution. Cela inclut également plusieurs statuts plus détaillés si pris en charge par des fonctions spécifiques :
    • RUNNING: MAPPING : La fonction est en train de mapper tes entrées classiques vers des entrées quantiques.
    • RUNNING: OPTIMIZING_FOR_HARDWARE : La fonction optimise pour le QPU sélectionné. Cela peut inclure la transpilation de circuits, la caractérisation du QPU, la rétropropagation d'observables, etc.
    • RUNNING: WAITING_FOR_QPU : La fonction a soumis un job à Qiskit Runtime et attend dans la file.
    • RUNNING: EXECUTING_QPU : La fonction a un job Qiskit Runtime actif.
    • RUNNING: POST_PROCESSING : La fonction est en train de post-traiter les résultats. Cela peut inclure la mitigation d'erreurs, le mapping des résultats quantiques vers le classique, etc.
  • DONE : Le programme est terminé et tu peux récupérer les données de résultat avec job.results().
  • ERROR : Le programme s'est arrêté en raison d'un problème. Utilise job.result() pour obtenir le message d'erreur.
  • CANCELED : Le programme a été annulé ; soit par un utilisateur, le service ou le serveur.
job.status()
'QUEUED'

Récupérer les résultats

Une fois qu'un programme est en statut DONE, tu peux utiliser job.results() pour récupérer le résultat. Ce format de sortie varie selon chaque fonction, alors assure-toi de consulter la documentation spécifique :

result = job.result()
print(result)
PrimitiveResult([PubResult(data=DataBin(evs=np.ndarray(<shape=(), dtype=float64>), stds=np.ndarray(<shape=(), dtype=float64>), ensemble_standard_error=np.ndarray(<shape=(), dtype=float64>)), metadata={'shots': 4096, 'target_precision': 0.015625, 'circuit_metadata': {}, 'resilience': {}, 'num_randomizations': 32})], metadata={'dynamical_decoupling': {'enable': True, 'sequence_type': 'XX', 'extra_slack_distribution': 'middle', 'scheduling_method': 'alap'}, 'twirling': {'enable_gates': False, 'enable_measure': True, 'num_randomizations': 'auto', 'shots_per_randomization': 'auto', 'interleave_randomizations': True, 'strategy': 'active-accum'}, 'resilience': {'measure_mitigation': True, 'zne_mitigation': False, 'pec_mitigation': False}, 'version': 2})

Tu peux également annuler un job à tout moment :

job.stop()
'Job has been stopped.'

Lister les jobs précédemment exécutés avec les fonctions Qiskit

Tu peux utiliser jobs() pour lister tous les jobs soumis aux fonctions Qiskit :

old_jobs = catalog.jobs()
old_jobs
[<Job | f6c29f49-4d5f-4fff-aca6-2e9a115b9763>,
<Job | 7f08c9d5-471b-4da2-92e7-4f2cb94c23a8>,
<Job | 62fe9176-d1e5-467e-b2bd-7a3f3c7be4e5>,
<Job | af525b2e-16b1-45a1-80bb-dbd94ce30258>,
<Job | b95a7a57-c1ad-4958-b7ac-953e4e1ee824>,
<Job | 7bfa33da-0f17-4e67-84b6-f556f7eeb436>,
<Job | ca46c191-9eb9-4de6-bfa7-b60d7eb29b5e>,
<Job | 6ac0ba93-3831-43fb-9fb9-760da2225e06>,
<Job | f0e38071-060d-47e8-988d-9cc1f69358e3>,
<Job | 629cf110-e490-4675-8a07-f6d298d166b0>]

Si tu as déjà l'ID d'un certain job, tu peux le récupérer avec catalog.get_job_by_id() :

# First, get the most recent job that has been executed.
latest_job = old_jobs[0]

# We can also get that same job with get_job_by_id
job_by_id = catalog.get_job_by_id(latest_job.job_id)

# Verify that the job is the same using both retrieval methods.
assert job_by_id.job_id == latest_job.job_id

# Print the job_id for this job.
print(job_by_id.job_id)
f6c29f49-4d5f-4fff-aca6-2e9a115b9763

Récupérer les messages d'erreur

Si le statut d'un programme est ERROR, utilise job.error_message() pour récupérer le message d'erreur comme suit :

job.error_message()
qiskit.exceptions.QiskitError: 'Workflow execution failed -- https://docs.quantum.ibm.com/errors#9999'

Étapes suivantes

Recommandations