Exécutez votre première charge de travail d' Qiskit Serverless s à distance
Le code de cette page a été développé en tenant compte des exigences suivantes. Nous recommandons d'utiliser ces versions ou des versions plus récentes.
qiskit[all]~=1.4.0 qiskit-ibm-runtime~=0.36.1 qiskit-ibm-catalog~=0.4
Qiskit Serverless est en cours de mise à niveau et ses fonctionnalités évoluent rapidement. Pendant cette phase de développement, vous trouverez les notes de mise à jour et la documentation la plus récente sur la page Qiskit ServerlessGitHub.
Cette section explore comment utiliser qiskit-ibm-catalog pour lister les programmes disponibles dans Qiskit Serverless, passer des entrées dans ces programmes, les exécuter à distance, vérifier leur état, et récupérer les résultats et les journaux.
Assurez-vous d'avoir suivi la procédure décrite dans la section « Écrire votre premier programme Qiskit Serverless » avant de commencer.
Liste des programmes disponibles
Vous pouvez utiliser QiskitServerless.list() pour afficher la liste des programmes disponibles avec Qiskit Serverless. Cela inclut les fichiers précédemment téléchargés transpile_remote_serverless.
from qiskit_ibm_catalog import QiskitServerless
serverless = QiskitServerless()
next(
program
for program in serverless.list()
if program.title == "transpile_remote_serverless"
)Output:
QiskitFunction(transpile_remote_serverless)
Exécutez un programme téléchargé et transmettez les entrées
Tout d'abord, configurez vos entrées. Votre programme a trois entrées : circuits, backend, et optimization_level. Vous pouvez utiliser random_circuit pour créer 30 circuits aléatoires :
from qiskit.circuit.random import random_circuit
qc_random = [(random_circuit(4, 4, measure=True, seed=i)) for i in range(10)]
qc_random[0].draw(output="mpl", idle_wires=False)Output:
Ensuite, utilisez QiskitRuntimeService et least_busy pour sélectionner un backend:
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
print(backend.name)Définissez votre niveau d'optimisation :
optimization_level = 3Sélectionnez votre programme à l'aide de serverless.load('PROGRAM_NAME'):
transpile_remote_serverless = serverless.load("transpile_remote_serverless")Ensuite, passez vos données d'entrée et exécutez le programme de manière pythonique comme suit :
job = transpile_remote_serverless.run(
circuits=qc_random,
backend=backend.name,
optimization_level=optimization_level,
)job.job_idOutput:
'118256c5-bbb0-4ea8-9e9f-51aac2220aef'
Vérifier le statut d'un emploi
Avec votre Qiskit Serverless job_id, vous pouvez vérifier l'état des travaux en cours. Il s'agit des statuts suivants :
QUEUED: Le programme distant est dans la file d'attente Qiskit Serverless. La priorité de la file d'attente est actuellement basée sur la quantité d'utilisation de Qiskit ServerlessINITIALIZING: Le programme distant démarre; il s'agit notamment de configurer l'environnement distant et d'installer les dépendancesRUNNING: Le programme est en cours d'exécution. À ce stade, si vous avez des sortiesprint()dans votre programme, vous pouvez récupérer les journaux à l'aide dejob.logs()DONE: Le programme est terminé et vous pouvez récupérer les données stockées danssave_result()avecjob.results()
Vous pouvez également définir des statuts de travail plus détaillés dans Gérer les ressources de calcul et de données Qiskit Serverless.
job.status()Output:
'QUEUED'
À l'heure actuelle, le tableau des charges de travail d' IBM Quantum ne prend en compte que celles du service de calcul d' IBM Quantum. Utilisez job.status() pour consulter l'état actuel de votre charge de travail « Qiskit Serverless ».
Vous avez exécuté avec succès votre premier programme Qiskit Serverless!
Récupérer les journaux et les résultats
Comme indiqué précédemment, une fois qu'un programme est RUNNING, vous pouvez utiliser job.logs() pour récupérer les journaux créés à partir des sorties print() :
logs = job.logs()
print(logs)Output:
No logs yet.
Vous pouvez également annuler un travail à tout moment :
job.stop()Output:
'Job has been stopped.'
Une fois qu'un programme est DONE, vous pouvez utiliser job.results() pour récupérer le résultat stocké dans save_result():
# We can't get results from a cancelled job, so we'll fetch a completed one instead
completed_job = next(
job for job in serverless.jobs() if job.status() == "DONE"
)
completed_job.result()Output:
{'transpiled_circuits': [<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93eca64810>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec5e5310>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec5d5310>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec58b490>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec57d310>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec535950>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec523c90>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec60a990>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec5527d0>,
<qiskit.circuit.quantumcircuit.QuantumCircuit at 0x7f93ec4152d0>]}
Liste des tâches précédemment exécutées avec Qiskit Serverless
Vous pouvez utiliser jobs() pour lister tous les travaux soumis à Qiskit Serverless :
old_jobs = serverless.jobs()
old_jobsOutput:
[<Job | 118256c5-bbb0-4ea8-9e9f-51aac2220aef>,
<Job | e9a36469-7d6b-4f00-bf91-78709ebdbbff>,
<Job | 4efd601b-8f61-4c8e-b14a-0b8a9c649dc0>,
<Job | 87cd22c7-8eb9-4606-bdb4-befe946e9e9b>,
<Job | be9a6dfd-0830-4250-aa60-acdd05bb8818>,
<Job | 479513dd-6a76-4c3e-ba49-bb21351b9a05>,
<Job | f9c20c31-be46-41b3-97ac-99f7be61f89e>,
<Job | 37fa2489-4449-4bfb-974e-9d9a9ec3cc21>,
<Job | b754c4e8-6817-48db-9bb9-74c151d6349a>,
<Job | 78bc6744-b417-48cb-8e01-59bb63bcc2be>]
Etapes suivantes
- Découvrez les outils de calcul et de gestion des données mis à la disposition de votre programme, y compris ceux liés à la parallélisation.