Découvrez « Qiskit Functions »
Les utilisateurs des formules Premium, Flex et « On-Prem » (via l'API IBM Quantum Platform ) peuvent commencer à utiliser gratuitement « IBM » ( Qiskit Functions ) ou se procurer une licence auprès de l'un des partenaires ayant contribué à l'enrichissement du catalogue.
Demandez un essai gratuit de l' Qiskit Functions tiers
Pour demander un essai gratuit, rendez-vous sur la page « Qiskit Functions Catalog » et consultez l'onglet « Détails ». Cliquez Request a free trial ici et renseignez les informations demandées par le partenaire Functions, notamment l' IBM Cloud AccessGroupId:
- Accédez à IBM Cloud IAM.
- Vérifier les conditions d'éligibilité.
- Dans la barre de menu située en haut de la page, sélectionnez un compte au format suivant :
XXXXXXX - [Organization Name] - Assurez-vous que l'organisation correspond bien à celle associée à votre compte Premium.
- Si vous voyez « Compte [de [votre nom] ] », cela signifie que vous utilisez votre compte personnel, qui ne donne pas droit à l'accès premium.
- Dans la barre de menu située en haut de la page, sélectionnez un compte au format suivant :
- Recherchez l'identifiant de votre groupe d'accès.
- Cliquez sur le nom d'un groupe.
- Cliquez sur «** Détails** ».
- Copiez l'identifiant du groupe d'accès. Ça devrait commencer par
AccessGroup-.
Installez le client « Qiskit Functions Catalog »
-
Pour commencer à utiliser Qiskit Functions, installez le client IBM Qiskit Functions Catalog :
pip install qiskit-ibm-catalog -
Récupérez votre clé API depuis le tableau de bord d' IBM Quantum Platform, puis activez votre environnement virtuel Python. Si vous n'avez pas encore configuré d'environnement virtuel, consultez les instructions d'installation.
Si vous travaillez dans un environnement « Python » de confiance (par exemple sur un ordinateur portable personnel ou un poste de travail), utilisez la
save_account()méthode pour enregistrer vos identifiants localement. ( Passez à l'étape suivante si vous n'utilisez pas un environnement sécurisé, tel qu'un ordinateur partagé ou public, pour vous authentifier sur IBM Quantum Platform.)save_account()Pour l'utiliser, lancezpythondans votre terminal, puis saisissez ce qui suit :from qiskit_ibm_catalog import QiskitFunctionsCatalog QiskitFunctionsCatalog.save_account(channel="ibm_quantum_platform", token="<your-token>", instance="<instance-crn>")Tapez
exit(). Désormais, chaque fois que vous devrez vous authentifier auprès du service, vous pourrez charger vos identifiants en procédant comme suit :from qiskit_ibm_catalog import QiskitFunctionsCatalog catalog = QiskitFunctionsCatalog()Par exemple :
# Load saved credentials from qiskit_ibm_catalog import QiskitFunctionsCatalog catalog = QiskitFunctionsCatalog(channel="ibm_quantum_platform") -
Évitez d'exécuter du code sur une machine non fiable ou dans un environnement cloud externe de type « Python » afin de minimiser les risques de sécurité. Si vous devez utiliser un environnement non sécurisé (par exemple, un ordinateur public), modifiez votre clé API après chaque utilisation en la supprimant sur la page des clés API IBM Cloud afin de réduire les risques. Pour en savoir plus, consultez la rubrique « Gestion des clés API des utilisateurs ». Pour initialiser le service dans ce cas, utilisez le code suivant :
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 dashboardProtégez votre clé APIN'incluez jamais votre clé dans le code source, les scripts
Pythonou les fichiers de notebook. Lorsque vous partagez du code avec d'autres personnes, veillez à ce que votre clé API ne soit pas intégrée directement dans le script Python. Partagez plutôt le script sans la clé et fournissez des instructions pour le configurer en toute sécurité.Si vous partagez accidentellement votre clé avec quelqu'un ou si vous l'incluez dans un système de contrôle de version comme Git, révoquez-la immédiatement en la supprimant sur la page des clés API IBM Cloud afin de réduire les risques. Pour en savoir plus, consultez la rubrique « Gestion des clés API des utilisateurs ».
Énumérez les fonctions auxquelles vous avez accès
Une fois connecté, vous pouvez afficher la liste des fonctions de l' Qiskit Functions Catalog auxquelles vous avez accès :
catalog.list()Output:
[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 de catalogue a été instancié, vous pouvez sélectionner une fonction à l'aide de catalog.load("<provider/function-name>"):
ibm_cf = catalog.load("ibm/circuit-function")Chaque fonction Qiskit dispose d'entrées, d'options et de sorties personnalisées. Pour plus d'informations, consultez les pages de documentation spécifiques à la fonction que vous souhaitez exécuter. Par défaut, tous les utilisateurs ne peuvent exécuter qu'une seule tâche de fonction à la fois :
job = ibm_cf.run(
pubs=[(circuit, observable)],
instance=instance,
backend_name=backend_name, # E.g. "ibm_fez"
)
job.job_idOutput:
'7f08c9d5-471b-4da2-92e7-4f2cb94c23a8'
run() vérifie la capacité restante et l'accès au serveur avant d'envoyer la tâche. Si votre instance est saturée ou si le backend que vous avez spécifié n'est pas accessible, run() le système génère immédiatement une erreur au lieu de laisser la tâche échouer dans la file d'attente. Lorsque la capacité est faible, run() le système émet un avertissement. Appuyez sur suppress_low_usage_warning=True pour le mettre en sourdine.
job = ibm_cf.run(
pubs=[(circuit, observable)],
instance=instance,
backend_name=backend_name, # E.g. "ibm_fez"
suppress_low_usage_warning=True,
)Vérifier l'état d'avancement d'une mission
job_idGrâce à votre fonction Qiskit, vous pouvez vérifier l'état des tâches en cours d'exécution. Cela comprend les statuts suivants :
-
QUEUED: Le programme distant se trouve dans la file d'attente des fonctions de Qiskit. La priorité dans la file d'attente dépend de votre niveau d'utilisation d' Qiskit Functions. -
INITIALIZING: Le programme distant est en cours de lancement; cela comprend 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 ceux-ci sont pris en charge par des fonctions spécifiques.RUNNING: MAPPING: La fonction effectue actuellement la conversion de vos entrées classiques en entrées quantiques.RUNNING: OPTIMIZING_FOR_HARDWARE: La fonction est optimisée pour le QPU sélectionné. Cela pourrait inclure la transpilation de circuits, la caractérisation des QPU, la rétropropagation des observables, etc.RUNNING: WAITING_FOR_QPU: La fonction a soumis une tâche au service de calcul d' IBM Quantum, et celle-ci est en attente dans la file d'attente.RUNNING: EXECUTING_QPU: La fonction dispose d'une tâche de calcul quantique en cours d'exécution.RUNNING: POST_PROCESSING: Cette fonction consiste à traiter les résultats a posteriori, ce qui peut inclure la correction des erreurs, la conversion des résultats quantiques en résultats classiques, etc.
-
DONE: Le programme est terminé, et vous pouvez récupérer les données de résultat à l'aide dejob.result(). -
ERROR: Le programme s'est arrêté en raison d'un problème. Utilisezjob.result()pour afficher le message d'erreur. -
CANCELED: Le programme a été annulé par un utilisateur, le service ou le serveur.job.status()Output:
'QUEUED'
Afficher les résultats
Une fois qu'un programme est DONE, vous pouvez utiliser job.result() pour récupérer le résultat. Ce format de sortie varie selon les fonctions; veillez donc à suivre les instructions fournies dans la documentation correspondante :
result = job.result()
print(result)Output:
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})
Vous pouvez également annuler une mission à tout moment :
job.cancel()Output:
'Job has been stopped.'
Accéder aux tâches de calcul quantique associées
Une fonction Qiskit peut soumettre un ou plusieurs tâches de calcul quantique à une QPU pendant son exécution. Pour récupérer les identifiants de ces tâches d'exécution, utilisez job.runtime_jobs(). Vous pouvez utiliser ces identifiants pour récupérer les objets de tâche en cours d'exécution à partir d'une instance QiskitRuntimeService , ou pour localiser les charges de travail sur le tableau de bord « IBM Quantum® Platform ».
runtime_job_ids = job.runtime_jobs()
runtime_job_idsSi une fonction regroupe ses tâches d'exécution en sessions ou en lots, utilisez job.runtime_sessions() pour afficher la liste des identifiants de session. Transmettez un identifiant de session à job.runtime_jobs() pour n'afficher que les tâches en cours d'exécution dans cette session :
sessions = job.runtime_sessions()
if sessions:
session_runtime_jobs = job.runtime_jobs(runtime_session=sessions[0])
print(session_runtime_jobs)
else:
print("No runtime sessions for this job.")La liste renvoyée peut être vide. Une fonction ne signale ses tâches d'exécution que lorsqu'elle les soumet via le service d'exécution dont elle dispose au moment de l'exécution; or, certaines fonctions ne soumettent pas directement leurs tâches d'exécution.
Affichage des journaux de travail
Utilisez job.logs() pour récupérer les informations de journalisation générées par une fonction lors de son exécution. Les journaux sont utiles pour suivre la progression et pour déboguer une tâche qui se termine par un état ERROR .
print(job.logs().splitlines())Pour une tâche qui s'exécute depuis longtemps et qui génère de nombreuses lignes de journal, utilisez job.filtered_logs() pour n'afficher que les lignes qui vous intéressent. Passez une expression régulière à include pour conserver les lignes correspondantes, ou à exclude pour les supprimer :
print(job.filtered_logs(include="iteration"))Afficher la liste des tâches « Qiskit Functions » déjà exécutées
Vous pouvez utiliser jobs() pour afficher la liste de toutes les tâches soumises à Qiskit Functions :
old_jobs = catalog.jobs()
old_jobsOutput:
[<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>]
Pour affiner les résultats, appliquez des filtres. Filtrer par fonction à l'aide de function, par statut à l'aide de status, et par date de soumission à l'aide de created_after. Parcourez les résultats à l'aide des touches et limit offset:
recent_errors = catalog.jobs(
function=ibm_cf,
status="ERROR",
created_after="2024-01-01T00:00:00Z",
limit=5,
)
recent_errorsSi vous disposez déjà de l'identifiant d'un travail donné, vous pouvez récupérer ce travail à l'aide de la commande suivante catalog.job():
# First, get the most recent job that has been executed.
latest_job = old_jobs[0]
# We can also get that same job with `catalog.job`
job_by_id = catalog.job(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)Output:
f6c29f49-4d5f-4fff-aca6-2e9a115b9763
Récupérer les messages d'erreur
Si l'état d'un programme est ERROR, utilisez job.error_message() pour récupérer le message d'erreur comme suit :
job.error_message()Output:
qiskit.exceptions.QiskitError: 'Workflow execution failed -- https://docs.quantum.ibm.com/errors#9999'
Etapes suivantes
- Découvrez les fonctions de circuit pour créer de nouveaux algorithmes et applications, sans avoir à vous soucier de la transcompilation ni de la gestion des erreurs.
- Découvrez les fonctionnalités de l'application permettant de résoudre des tâches spécifiques à un domaine, avec des entrées et des sorties classiques.
- Consultez la documentation de référence de l'API sur Qiskit Functions.
- Pour acquérir une expérience pratique, essayez quelques tutoriels qui présentent l' Qiskit Functions.