Spusť svou první úlohu Qiskit Serverless vzdáleně
Verze balíčků
Kód na této stránce byl vyvinut s použitím následujících požadavků. Doporučujeme používat tyto verze nebo novější.
qiskit[all]~=1.4.0
qiskit-ibm-runtime~=0.36.1
qiskit-ibm-catalog~=0.4
Tato část popisuje, jak pomocí qiskit-ibm-catalog zobrazit seznam programů dostupných v Qiskit Serverless, předat vstupní data těmto programům, spustit je vzdáleně, zkontrolovat jejich stav a získat výsledky a logy.
Ujisti se, že ses autentizoval/a v Qiskit Serverless pomocí svého API klíče (viz Nasazení na IBM Quantum Platform pro pokyny).
Seznam dostupných programů
Pomocí QiskitServerless.list() můžeš načíst seznam dostupných programů ke spuštění v Qiskit Serverless. Zahrnuje to dříve nahraný transpile_remote_serverless.
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-catalog qiskit-ibm-runtime
from qiskit_ibm_catalog import QiskitServerless
serverless = QiskitServerless()
next(
program
for program in serverless.list()
if program.title == "transpile_remote_serverless"
)
QiskitFunction(transpile_remote_serverless)
Spuštění nahraného programu a předání vstupů
Nejprve nastav své vstupy. Tvůj program má tři vstupy: circuits, backend a optimization_level. Pomocí random_circuit můžeš vytvořit 30 náhodných Circuit:
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)
Dále použij QiskitRuntimeService a least_busy k výběru Backend:
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
print(backend.name)
Nastav úroveň optimalizace:
optimization_level = 3
Vyber svůj program pomocí serverless.load('PROGRAM_NAME'):
transpile_remote_serverless = serverless.load("transpile_remote_serverless")
Dále předej své vstupy a spusť program pythonovským způsobem takto:
job = transpile_remote_serverless.run(
circuits=qc_random,
backend=backend.name,
optimization_level=optimization_level,
)
job.job_id
'118256c5-bbb0-4ea8-9e9f-51aac2220aef'
Zkontrolování stavu úlohy
S pomocí job_id z Qiskit Serverless můžeš zkontrolovat stav běžících úloh. Zahrnuje to tyto stavy:
QUEUED: Vzdálený program je ve frontě Qiskit Serverless. Priorita fronty je momentálně založena na tom, jak moc jsi Qiskit Serverless využíval/aINITIALIZING: Vzdálený program se spouští; zahrnuje to nastavení vzdáleného prostředí a instalaci závislostíRUNNING: Program běží. V této fázi, pokud máš ve svém programu výstupyprint(), můžeš načíst logy pomocíjob.logs()DONE: Program je dokončen a můžeš načíst data uložená vsave_result()pomocíjob.results()
Podrobnější stavy úloh můžeš nastavit také v části Správa výpočetních prostředků a dat Qiskit Serverless.
job.status()
'QUEUED'
# This cell is hidden from users, it checks the job status
assert _ in ["QUEUED", "INITIALIZING", "RUNNING", "DONE"] # noqa: F821
V současné době tabulka úloh IBM Quantum zobrazuje pouze úlohy Qiskit Runtime. Ke zjištění aktuálního stavu své úlohy Qiskit Serverless použij job.status().
Úspěšně jsi spustil/a svůj první program Qiskit Serverless!
Načtení logů a výsledků
Jak bylo zmíněno dříve, jakmile program běží ve stavu RUNNING, můžeš pomocí job.logs() načíst logy vytvořené výstupy print():
logs = job.logs()
print(logs)
No logs yet.
Kdykoli můžeš také úlohu zrušit:
job.stop()
'Job has been stopped.'
Jakmile je program ve stavu DONE, můžeš pomocí job.results() načíst výsledky uložené v 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()
{'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>]}
Seznam úloh dříve spuštěných v Qiskit Serverless
Pomocí jobs() můžeš zobrazit seznam všech úloh odeslaných do Qiskit Serverless:
old_jobs = serverless.jobs()
old_jobs
[<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>]
Další kroky
- Prozkoumej nástroje pro správu výpočetních prostředků a dat dostupné pro tvůj program, včetně paralelizace.