Introduction aux fonctions Qiskit
- 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.
Les fonctions se présentent sous deux formes :
| Type | Que fait-elle ? | Exemples d'entrées et de sorties | Pour qui est-elle destinée ? |
|---|---|---|---|
| Fonction de circuit | Interface simplifiée pour exécuter des circuits. Abstrait la transpilation, la suppression d'erreurs et la mitigation d'erreurs | Entré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'application | Couvre 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 classiques | Entré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
| Nom | Fournisseur | Utilisation recommandée | Avantages uniques |
|---|---|---|---|
| Tensor-Network Error Mitigation | Algorithmiq | Charges 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'erreurs | Qedma | Charges 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 Management | Q-CTRL | Charges 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
| Nom | Fournisseur | Utilisation recommandée | Avantages uniques |
|---|---|---|---|
| QUICK-PDE | ColibriTD | Utiliser 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 Optimizer | Global Data Quantum | Charges 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 Chemistry | Qunova Computing | Charges 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 Optimizer | Kipu Quantum | Charges 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 Learning | Multiverse Computing | Flux 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 Solver | Q-CTRL | Problè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 :
- Accède à IBM Cloud IAM.
- 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.
- Change ton compte dans la barre supérieure vers un compte au format suivant :
- 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
-
Pour commencer à utiliser les fonctions Qiskit, installe le client IBM Qiskit Functions Catalog :
pip install qiskit-ibm-catalog -
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écutepythondans 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 avecfrom qiskit_ibm_catalog import QiskitFunctionsCatalog
catalog = QiskitFunctionsCatalog()
# Load saved credentials
from qiskit_ibm_catalog import QiskitFunctionsCatalog
catalog = QiskitFunctionsCatalog(channel="ibm_quantum_platform")
-
É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 dashboardattentionProtè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.
-
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
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 avecjob.results().ERROR: Le programme s'est arrêté en raison d'un problème. Utilisejob.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
- Explorer les fonctions de circuit pour créer de nouveaux algorithmes et applications, sans avoir à gérer la transpilation ou la gestion des erreurs.
- Explorer les fonctions d'application pour résoudre des tâches spécifiques à un domaine, avec des entrées et des sorties classiques.