Úvod do Qiskit Functions
- Qiskit Functions jsou experimentální funkce dostupné pouze uživatelům IBM Quantum® Premium Plan, Flex Plan a On-Prem (prostřednictvím IBM Quantum Platform API) Plan. Jsou ve stavu náhledu a mohou se změnit.
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 nebo novější verze.
qiskit[all]~=1.4.1
qiskit-ibm-runtime~=0.37.0
qiskit-ibm-catalog~=0.4
Qiskit Functions zjednodušují a urychlují objevování algoritmů a vývoj aplikací v měřítku utility tím, že abstrahují části pracovního postupu vývoje kvantového softwaru. Díky tomu Qiskit Functions uvolňují čas, který by jinak byl strávený ručním psaním kódu a jemným laděním experimentů.
Funkce existují ve dvou podobách:
| Typ | Co dělá? | Ukázkové vstupy a výstupy | Pro koho je určena? |
|---|---|---|---|
| Circuit function | Zjednodušené rozhraní pro spouštění Circuit. Abstrahuje transpilaci, potlačení chyb a zmírnění chyb | Vstup: Abstraktní objekty PUB Výstup: Zmírněné očekávané hodnoty | Výzkumníci používající Qiskit k objevování nových algoritmů a aplikací, aniž by se museli soustředit na optimalizaci pro hardware nebo na zpracování chyb. Circuit functions lze použít k vytváření vlastních application functions. |
| Application function | Pokrývá úkoly vyšší úrovně, například zkoumání algoritmů a případů použití specifických pro danou doménu. Abstrahuje kvantový pracovní postup pro řešení úkolů s klasickými vstupy a výstupy | Vstup: Molekuly, grafy Výstup: Energie základního a excitovaného stavu, optimální hodnoty pro účelovou funkci | Výzkumníci v nekvantových oblastech, kteří integrují kvantové výpočty do stávajících rozsáhlých klasických pracovních postupů, aniž by museli mapovat klasická data na kvantové Circuit. |
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-catalog qiskit-ibm-runtime
Funkce poskytují IBM® a partneři třetích stran. Každá je výkonná pro specifické charakteristiky pracovní zátěže a má jedinečné možnosti ladění výkonu.
Přehled dostupných funkcí
Circuit functions
| Název | Poskytovatel | Doporučené použití | Jedinečné výhody |
|---|---|---|---|
| Tensor-Network Error Mitigation | Algorithmiq | Pracovní zátěže s pozorovatelnými nízké váhy a Circuit bez smyček. | Snižuje měřicí overhead a rozptyl, čímž překonává standardní základní linie zmírnění chyb jako Zero Noise Extrapolation (ZNE) a Probabilistic Error Cancellation (PEC) pro příslušné třídy Circuit. |
| QESEM: Error Suppression and Error Mitigation | Qedma | Pracovní zátěže zahrnující Circuit se zlomkovými nebo parametrizovanými Gate, pozorovatelnými vysoké váhy a pracovní postupy vyžadující nezkreslené očekávané hodnoty a přesné odhady doby běhu. | Produkuje nezkreslené očekávané hodnoty s nižším rozptylem a nároky na zdroje, překonává ZNE a PEC pro příslušné třídy Circuit. |
| Performance Management | Q-CTRL | Pracovní zátěže obsahující parametrické Circuit, hluboké Circuit nebo vyžadující mnoho spuštění Circuit. | Automaticky aplikuje potlačení chyb řízené AI na kvantové algoritmy, maximalizuje výkon zařízení IBM pro dosažení přesných výsledků při snižování počtu snímků, výpočetního času a nákladů. Metoda s nulovým overhead, která zlepšuje přesnost spuštění pro primitivy Sampler a Estimator, kompatibilní s libovolnou váhou pozorovatelných. |
Application functions
| Název | Poskytovatel | Doporučené použití | Jedinečné výhody |
|---|---|---|---|
| QUICK-PDE | ColibriTD | Použití kvantových výpočtů pro víceúčelové PDR. Připrav simulační pracovní postupy pro kvantový hardware se zachováním plné kontroly nad kvantovými i fyzikálními modelovacími parametry. | Nabízí robustní hybridní VQA rámec, který poskytuje přesná a škálovatelná řešení PDE prostřednictvím pokročilého kódování řešení a spektrálních metod, takže je ideálním vstupním bodem pro týmy, které chtějí budovat kvantově připravené simulační schopnosti. |
| Quantum Portfolio Optimizer | Global Data Quantum | Pracovní zátěže pro finanční optimalizaci, hledání optimálních portfoliových strategií v čase při minimalizaci rizika a maximalizaci výnosů, umožňující zpětné testování obchodních strategií. | Řeší kombinatorické optimalizační problémy prostřednictvím vysoce specializované adaptace kvantového algoritmu VQE pro tento finanční případ použití, s využitím optimalizovaných strategií spouštění a optimalizátorů spolu s technikami zmírnění chyb zohledňujícími šum přizpůsobenými pro optimalizaci portfolia. |
| HI-VQE Chemistry | Qunova Computing | Pracovní zátěže v oblasti výpočetní chemie, molekulární simulace, materiálové vědy nebo jakékoli hamiltonské simulace vyžadující řešení problémů elektronické struktury mnoha těles. | Řeší elektronické struktury molekul pomocí rozšířeného SQD dosahujícího chemické přesnosti (1 kcal/mol, 1,6 mHa) pro problémy modelované s 40 až 60 Qubit, čímž překonává některá klasická řešení na superpočítačích nebo standardní SQD v rychlosti konvergence nebo přesnosti, resp. o řády velikosti. |
| Iskay Quantum Optimizer | Kipu Quantum | Optimalizační pracovní zátěže jako plánování, logistika, směrování a problémy QUBO/HUBO. | Integrované laditelné klasické metody před- a po-zpracování pro kvantovou optimalizační rutinu. Poskytuje runtime výhodu nad klasickými řešiči (CPLEX, simulované žíhání a tabu search) na vybraných HUBO benchmarcích. Market Split ms_5_100, náročná výzva, řešená během hodin (viz tento tutoriál). |
| Singularity Machine Learning | Multiverse Computing | Klasické pracovní postupy strojového učení pro klasifikaci, které by mohly těžit ze zlepšené přesnosti nebo výpočetní efektivity využitím kvantové optimalizace spouštěné na hardware IBM. | Dosahuje přesnosti srovnatelné s klasickými modely jako Random Forest nebo XGBoost nebo je překonává, přičemž pracuje s výrazně méně učiteli a kompaktnějším ansámblem. Pohání ho kvantově optimalizované hlasování, které vybírá nejinformativnější učitele a zpřesňuje rozhodovací hranice, výsledkem je větší efektivita, snížená složitost modelu a robustnější výkon. |
| Optimization Solver | Q-CTRL | Binární optimalizační problémy nebo jakýkoli kombinatorický problém, který lze mapovat na binární účelovou funkci. Jsou podporovány účelové funkce libovolného řádu a velikosti problémů až do maximálního rozsahu zařízení. | Kvantové optimalizační řešení na celý řetězec zohledňující šum, které umožňuje zadávat definice problémů na vysoké úrovni a automaticky nachází přesná řešení klasicky náročných kombinatorických problémů na kvantovém hardware v měřítku utility. Abstrahuje složitost tím, že se stará o potlačení chyb, efektivní mapování a hybridní kvantově-klasickou optimalizaci pro řešení optimalizačních úloh v plném rozsahu zařízení bez hlubokých znalostí kvantových výpočtů. |
Začínáme s Qiskit Functions
Uživatelé Premium, Flex a On-Prem (prostřednictvím IBM Quantum Platform API) Plan mohou začít používat IBM Qiskit Functions zdarma nebo si mohou zakoupit licenci od jednoho z partnerů, kteří přispěli funkcí do katalogu.
Požádej o bezplatnou zkušební verzi třetích stran Qiskit Functions
Chceš-li požádat o novou bezplatnou zkušební verzi, přejdi do Qiskit Functions Catalog a prozkoumej panel s podrobnostmi. Klikni na Request a free trial a vyplň informace požadované partnerem Functions, včetně IBM Cloud AccessGroupId:
- Přejdi na IBM Cloud IAM.
- Ověř způsobilost.
- Přepni svůj účet v horním panelu na ten s následujícím formátem:
XXXXXXX - [Název organizace] - Ujisti se, že organizace je stejná jako ta přidružená k tvému Premium účtu.
- Pokud vidíš „[Tvé jméno]'s Account", používáš svůj osobní účet, který nemá nárok na přístup premium.
- Přepni svůj účet v horním panelu na ten s následujícím formátem:
- Najdi ID své přístupové skupiny.
- Klikni na název skupiny.
- Klikni na Podrobnosti.
- Zkopíruj ID přístupové skupiny. Mělo by začínat
AccessGroup-.
Nainstaluj klienta Qiskit Functions Catalog
-
Chceš-li začít používat Qiskit Functions, nainstaluj klienta IBM Qiskit Functions Catalog:
pip install qiskit-ibm-catalog -
Získej svůj API klíč z IBM Quantum Platform dashboardu a aktivuj své virtuální prostředí Python. Podívej se na pokyny k instalaci, pokud ještě nemáš nastavené virtuální prostředí.
Pokud pracuješ v důvěryhodném prostředí Python (například na osobním notebooku nebo pracovní stanici), použij metodu
save_account()k místnímu uložení svých přihlašovacích údajů. (Přeskoč na další krok, pokud nepoužíváš důvěryhodné prostředí, například sdílený nebo veřejný počítač, k ověření na IBM Quantum Platform.)Chceš-li použít
save_account(), spusťpythonv shellu a zadej následující:from qiskit_ibm_catalog import QiskitFunctionsCatalog
QiskitFunctionsCatalog.save_account(channel="ibm_quantum_platform", token="<your-token>", instance="<instance-crn>")Zadej
exit(). Od nynějška, kdykoli se budeš potřebovat ověřit ke službě, můžeš načíst své přihlašovací údaje pomocífrom qiskit_ibm_catalog import QiskitFunctionsCatalog
catalog = QiskitFunctionsCatalog()
# Load saved credentials
from qiskit_ibm_catalog import QiskitFunctionsCatalog
catalog = QiskitFunctionsCatalog(channel="ibm_quantum_platform")
-
Vyhni se spouštění kódu na nedůvěryhodném počítači nebo v externím cloudovém prostředí Python, aby se minimalizovala bezpečnostní rizika. Pokud musíš použít nedůvěryhodné prostředí (například na veřejném počítači), po každém použití změň svůj API klíč jeho smazáním na stránce IBM Cloud API keys, aby se snížilo riziko. Více informací najdeš v tématu Správa uživatelských API klíčů. Pro inicializaci služby v této situaci rozbal následující část a zobraz kód, který můžeš použít:
Inicializuj službu v nedůvěryhodném prostředí
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 dashboardpozorChraň svůj API klíč! Nikdy nezahrnuj svůj klíč do zdrojového kódu, Python skriptu nebo souboru notebooku. Při sdílení kódu s ostatními se ujisti, že tvůj API klíč není vložen přímo do Python skriptu. Místo toho sdílej skript bez klíče a poskytni pokyny pro jeho bezpečné nastavení.
Pokud svůj klíč omylem sdílíš s někým nebo ho zahrnuješ do správy verzí jako Git, okamžitě zruš platnost klíče jeho smazáním na stránce IBM Cloud API keys, aby se snížilo riziko. Více informací najdeš v tématu Správa uživatelských API klíčů.
-
Po ověření můžeš zobrazit seznam funkcí z Qiskit Functions Catalog, ke kterým máš přístup:
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)]
Spuštění povolených funkcí
Po vytvoření objektu katalogu můžeš vybrat funkci pomocí catalog.load(provider/function-name):
ibm_cf = catalog.load("ibm/circuit-function")
Každá Qiskit Function má vlastní vstupy, možnosti a výstupy. Podrobnější informace najdeš v dokumentaci konkrétní funkce, kterou chceš spustit. Ve výchozím nastavení může každý uživatel spustit vždy pouze jednu úlohu funkce najednou:
# 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'
Kontrola stavu úlohy
V současnosti tabulka úloh IBM Quantum zobrazuje pouze úlohy Qiskit Runtime. Pro zobrazení aktuálního stavu své úlohy Qiskit Function použij job.status().
Pomocí job_id své Qiskit Function můžeš zkontrolovat stav běžících úloh. Možné stavy jsou:
QUEUED: Vzdálený program čeká ve frontě Qiskit Function. Priorita ve frontě se odvíjí od toho, jak moc jsi Qiskit Functions dosud využíval/a.INITIALIZING: Vzdálený program se spouští; zahrnuje přípravu vzdáleného prostředí a instalaci závislostí.RUNNING: Program běží. Tento stav může zahrnovat i podrobnější stavy, pokud je konkrétní funkce podporuje:RUNNING: MAPPING: Funkce právě mapuje tvé klasické vstupy na kvantové vstupy.RUNNING: OPTIMIZING_FOR_HARDWARE: Funkce optimalizuje pro vybraný QPU. Může zahrnovat transpilaci Circuit, charakterizaci QPU, zpětnou propagaci observabl a podobně.RUNNING: WAITING_FOR_QPU: Funkce odeslala úlohu do Qiskit Runtime a čeká ve frontě.RUNNING: EXECUTING_QPU: Funkce má aktivní úlohu v Qiskit Runtime.RUNNING: POST_PROCESSING: Funkce provádí post-processing výsledků. Může zahrnovat zmírnění chyb, mapování kvantových výsledků na klasické a podobně.
DONE: Program je dokončen a výsledná data můžeš načíst pomocíjob.results().ERROR: Program se zastavil kvůli chybě. Chybovou zprávu získáš pomocíjob.result().CANCELED: Program byl zrušen – buď uživatelem, službou, nebo serverem.
job.status()
'QUEUED'
Načtení výsledků
Jakmile je program ve stavu DONE, můžeš pomocí job.results() načíst výsledek. Formát výstupu se liší podle funkce, proto si nezapomeň prostudovat příslušnou dokumentaci:
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})
Úlohu můžeš kdykoli také zrušit:
job.stop()
'Job has been stopped.'
Výpis dříve spuštěných úloh Qiskit Functions
Pomocí jobs() můžeš zobrazit seznam všech úloh odeslaných do Qiskit Functions:
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>]
Pokud již máš ID konkrétní úlohy, můžeš ji načíst pomocí 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
Načtení chybových zpráv
Pokud je stav programu ERROR, použij job.error_message() k načtení chybové zprávy:
job.error_message()
qiskit.exceptions.QiskitError: 'Workflow execution failed -- https://docs.quantum.ibm.com/errors#9999'
Další kroky
- Prozkoumej Circuit functions pro tvorbu nových algoritmů a aplikací, aniž bys musel/a řešit transpilaci nebo ošetřování chyb.
- Prozkoumej application functions pro řešení úloh specifických pro danou doménu s klasickými vstupy a výstupy.