Přeskočit na hlavní obsah

Úvod do Qiskit Functions

Poznámky
  • 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ů.

Přehled Qiskit Functions Funkce existují ve dvou podobách:

TypCo dělá?Ukázkové vstupy a výstupyPro koho je určena?
Circuit functionZjednodušené rozhraní pro spouštění Circuit. Abstrahuje transpilaci, potlačení chyb a zmírnění chybVstup: 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 functionPokrý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ýstupyVstup: 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ázevPoskytovatelDoporučené použitíJedinečné výhody
Tensor-Network Error MitigationAlgorithmiqPracovní 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 MitigationQedmaPracovní 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 ManagementQ-CTRLPracovní 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ázevPoskytovatelDoporučené použitíJedinečné výhody
QUICK-PDEColibriTDPouž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 OptimizerGlobal Data QuantumPracovní 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 ChemistryQunova ComputingPracovní 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 OptimizerKipu QuantumOptimalizač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 LearningMultiverse ComputingKlasické 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 SolverQ-CTRLBiná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:

  1. Přejdi na IBM Cloud IAM.
  2. 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.
  3. 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

  1. Chceš-li začít používat Qiskit Functions, nainstaluj klienta IBM Qiskit Functions Catalog:

    pip install qiskit-ibm-catalog
  2. 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ť python v 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")
  1. 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 dashboard
    pozor

    Chraň 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íčů.

  2. 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

tip

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

Doporučení