Przejdź do głównej treści

Wprowadzenie do Qiskit Functions

Uwagi
  • Qiskit Functions to funkcja eksperymentalna dostępna wyłącznie dla użytkowników planów IBM Quantum® Premium Plan, Flex Plan i On-Prem (za pośrednictwem IBM Quantum Platform API). Funkcje te są w statusie wydania podglądowego i mogą ulec zmianie.
Wersje pakietów

Kod na tej stronie został opracowany z użyciem poniższych wymagań. Zalecamy korzystanie z tych lub nowszych wersji.

qiskit[all]~=1.4.1
qiskit-ibm-runtime~=0.37.0
qiskit-ibm-catalog~=0.4

Qiskit Functions upraszczają i przyspieszają odkrywanie algorytmów w skali użytkowej oraz tworzenie aplikacji, abstrahując część przepływu pracy związanego z programowaniem oprogramowania kwantowego. Dzięki temu Qiskit Functions uwalniają czas zwykle poświęcany na ręczne pisanie kodu i dostrajanie eksperymentów.

Przegląd Qiskit Functions Functions występują w dwóch postaciach:

TypCo robi?Przykładowe wejścia i wyjściaDla kogo?
Circuit functionUproszczony interfejs do uruchamiania Circuit. Abstrahuje transpilację, tłumienie błędów i łagodzenie błędówWejście: Abstrakcyjne obiekty PUB
Wyjście: Łagodzone wartości oczekiwane
Badacze korzystający z Qiskit do odkrywania nowych algorytmów i aplikacji, bez konieczności skupiania się na optymalizacji pod kątem sprzętu czy obsłudze błędów. Circuit functions mogą służyć do tworzenia niestandardowych application functions.
Application functionObejmuje zadania wyższego poziomu, takie jak eksploracja algorytmów i przypadki użycia specyficzne dla danej dziedziny. Abstrahuje przepływ pracy kwantowej, aby rozwiązywać zadania z klasycznymi wejściami i wyjściamiWejście: Cząsteczki, grafy
Wyjście: Energia stanu podstawowego i wzbudzonego, optymalne wartości funkcji kosztu
Badacze z dziedzin niekwantowych, integrujący kwantowość z istniejącymi wielkoskalowymi przepływami pracy klasycznej, bez potrzeby mapowania danych klasycznych na Circuit kwantowe.
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-catalog qiskit-ibm-runtime

Functions są dostarczane przez IBM® i partnerów zewnętrznych. Każda z nich jest wydajna dla określonych charakterystyk obciążeń roboczych i posiada unikalne opcje dostrajania wydajności.

Przegląd dostępnych funkcji

Circuit functions

NazwaDostawcaZalecane zastosowanieUnikalne zalety
Tensor-Network Error MitigationAlgorithmiqObciążenia robocze z obserwablami o małej wadze i Circuit bez pętli.Zmniejsza narzut pomiarowy i wariancję, przewyższając standardowe metody łagodzenia błędów, takie jak Zero Noise Extrapolation (ZNE) i Probabilistic Error Cancellation (PEC) dla odpowiednich klas Circuit.
QESEM: Error Suppression and Error MitigationQedmaObciążenia robocze obejmujące Circuit z ułamkowymi lub sparametryzowanymi Gate, obserwablami o dużej wadze oraz przepływy pracy wymagające nieobciążonych wartości oczekiwanych i dokładnych szacunków czasu wykonania.Generuje nieobciążone wartości oczekiwane z mniejszą wariancją i narzutem zasobów, przewyższając ZNE i PEC dla odpowiednich klas Circuit.
Performance ManagementQ-CTRLObciążenia robocze zawierające Circuit parametryczne, głębokie Circuit lub wymagające wielu wykonań Circuit.Automatycznie stosuje tłumienie błędów oparte na AI do algorytmów kwantowych, maksymalizując wydajność urządzeń IBM w celu dostarczania dokładnych wyników przy jednoczesnym zmniejszeniu liczby strzałów, czasu obliczeń i wymaganych kosztów.

Metoda zerowego narzutu, która poprawia dokładność wykonania dla prymitywów Sampler i Estimator, kompatybilna z obserwablami o dowolnej wadze.

Application functions

NazwaDostawcaZalecane zastosowanieUnikalne zalety
QUICK-PDEColibriTDWykorzystanie obliczeń kwantowych do wielofizycznych równań różniczkowych cząstkowych (PDE).

Przygotowanie przepływów pracy symulacji dla sprzętu kwantowego, przy zachowaniu pełnej kontroli nad parametrami modelowania kwantowego i fizycznego.
Oferuje solidne hybrydowe środowisko VQA, które dostarcza precyzyjne i skalowalne rozwiązania PDE dzięki zaawansowanemu kodowaniu rozwiązań i metodom spektralnym, co czyni go idealnym punktem wejścia dla zespołów próbujących zbudować możliwości symulacji gotowe na kwantowość.
Quantum Portfolio OptimizerGlobal Data QuantumObciążenia robocze z zakresu optymalizacji finansowej, poszukujące optymalnych strategii portfelowych w czasie przy minimalizacji ryzyka i maksymalizacji zwrotów, umożliwiające testowanie wsteczne strategii handlowych.Rozwiązuje kombinatoryczne problemy optymalizacyjne poprzez wysoce wyspecjalizowaną adaptację algorytmu kwantowego VQE do tego finansowego przypadku użycia, przy użyciu zoptymalizowanych strategii wykonania i optymalizatorów, wraz z technikami łagodzenia błędów uwzględniającymi szumy, dostosowanymi do optymalizacji portfela.
HI-VQE ChemistryQunova ComputingObciążenia robocze w chemii obliczeniowej, symulacji molekularnej, nauce o materiałach lub dowolnej symulacji Hamiltonianu wymagającej rozwiązania problemów struktury elektronowej wielu ciał.Rozwiązuje molekularne struktury elektronowe, używając ulepszonego SQD z osiąganiem dokładności chemicznej (1 kcal/mol, 1,6 mHa) dla problemów modelowanych z 40 do 60 Qubit, przewyższając niektóre klasyczne rozwiązania na superkomputerach lub standardowe SQD pod względem szybkości zbieżności lub dokładności odpowiednio o rzędy wielkości.
Iskay Quantum OptimizerKipu QuantumObciążenia robocze z zakresu optymalizacji, takie jak harmonogramowanie, logistyka, routing i problemy QUBO/HUBO.

Zintegrowane, konfigurowalne klasyczne metody przetwarzania wstępnego i końcowego dla procedury optymalizacji kwantowej.

Zapewnia przewagę czasu wykonania nad klasycznymi solverami (CPLEX, symulowane wyżarzanie i przeszukiwanie tabu) na wybranych benchmarkach HUBO.

Market Split ms_5_100, trudne wyzwanie, rozwiązane w ciągu godzin (zob. ten samouczek).
Singularity Machine LearningMultiverse ComputingKlasyczne przepływy pracy klasyfikacji w uczeniu maszynowym, które mogłyby skorzystać na lepszej dokładności lub wydajności obliczeniowej dzięki wykorzystaniu optymalizacji kwantowej wykonywanej na sprzęcie IBM.Zapewnia dokładność porównywalną z klasycznymi modelami, takimi jak Random Forest lub XGBoost, lub je przewyższającą, działając przy znacznie mniejszej liczbie uczących się i bardziej zwartym zestawie.

Napędzany kwantowo zoptymalizowanym głosowaniem, wybiera najbardziej informatywnych uczących się i dopracowuje granice decyzyjne, co skutkuje większą wydajnością, zmniejszoną złożonością modelu i bardziej niezawodnym działaniem.
Optimization SolverQ-CTRLProblemy optymalizacji binarnej lub dowolny problem kombinatoryczny, który można odwzorować na binarną funkcję kosztu.

Obsługiwane są funkcje kosztu dowolnego rzędu i rozmiary problemów do maksymalnej skali urządzenia.
Uwzględniający szumy, kompleksowy kwantowy solver optymalizacyjny, który umożliwia podawanie definicji problemów wysokiego poziomu i automatycznie znajduje dokładne rozwiązania klasycznie trudnych problemów kombinatorycznych na kwantowym sprzęcie w skali użytkowej.

Abstrahuje złożoność poprzez obsługę tłumienia błędów, wydajne mapowanie i hybrydową optymalizację kwantowo-klasyczną w celu rozwiązywania zadań optymalizacyjnych w pełnej skali urządzenia bez głębokiej wiedzy kwantowej.

Pierwsze kroki z Qiskit Functions

Użytkownicy planów Premium, Flex i On-Prem (za pośrednictwem IBM Quantum Platform API) mogą bezpłatnie rozpocząć korzystanie z IBM Qiskit Functions lub uzyskać licencję od jednego z partnerów, którzy dodali funkcję do katalogu.

Poproś o bezpłatny okres próbny dla zewnętrznych Qiskit Functions

Aby poprosić o nowy bezpłatny okres próbny, przejdź do Qiskit Functions Catalog i sprawdź panel szczegółów. Kliknij Request a free trial i wypełnij informacje wymagane przez partnera Functions, w tym IBM Cloud AccessGroupId:

  1. Przejdź do IBM Cloud IAM.
  2. Zweryfikuj uprawnienia.
    • Przełącz swoje konto na pasku górnym na takie z następującym formatem: XXXXXXX - [Organization Name]
    • Upewnij się, że organizacja jest taka sama jak ta powiązana z Twoim kontem Premium.
    • Jeśli widzisz „[Your Name]'s Account", używasz swojego konta osobistego, które nie kwalifikuje się do dostępu premium.
  3. Znajdź identyfikator swojej grupy dostępu.
    • Kliknij nazwę grupy.
    • Kliknij Details.
    • Skopiuj identyfikator grupy dostępu. Powinien zaczynać się od AccessGroup-.

Instalacja klienta Qiskit Functions Catalog

  1. Aby zacząć korzystać z Qiskit Functions, zainstaluj klienta IBM Qiskit Functions Catalog:

    pip install qiskit-ibm-catalog
  2. Pobierz swój klucz API z pulpitu nawigacyjnego IBM Quantum Platform i aktywuj wirtualne środowisko Python. Jeśli nie masz jeszcze skonfigurowanego środowiska wirtualnego, zapoznaj się z instrukcjami instalacji.

    Jeśli pracujesz w zaufanym środowisku Python (np. na swoim laptopie lub stacji roboczej), użyj metody save_account(), aby zapisać swoje dane uwierzytelniające lokalnie. (Przejdź do następnego kroku, jeśli nie korzystasz z zaufanego środowiska, takiego jak komputer współdzielony lub publiczny, do uwierzytelnienia w IBM Quantum Platform.)

    Aby użyć save_account(), uruchom python w swoim terminalu, a następnie wprowadź:

    from qiskit_ibm_catalog import QiskitFunctionsCatalog

    QiskitFunctionsCatalog.save_account(channel="ibm_quantum_platform", token="<your-token>", instance="<instance-crn>")

    Wpisz exit(). Od tej pory, gdy będziesz potrzebować uwierzytelnienia w serwisie, możesz załadować swoje dane uwierzytelniające za 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. Unikaj uruchamiania kodu na niezaufanej maszynie lub w zewnętrznym środowisku Python w chmurze, aby zminimalizować ryzyko bezpieczeństwa. Jeśli musisz użyć niezaufanego środowiska (np. na komputerze publicznym), zmień swój klucz API po każdym użyciu, usuwając go na stronie IBM Cloud API keys, aby ograniczyć ryzyko. Dowiedz się więcej w temacie Managing user API keys. Aby zainicjować serwis w tej sytuacji, rozwiń poniższą sekcję, aby zobaczyć kod, którego możesz użyć:

    Inicjalizacja serwisu w niezaufanym środowisku
    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
    ostrożnie

    Chroń swój klucz API! Nigdy nie umieszczaj klucza w kodzie źródłowym, skrypcie Python ani pliku notesu. Gdy udostępniasz kod innym, upewnij się, że Twój klucz API nie jest bezpośrednio osadzony w skrypcie Python. Zamiast tego udostępnij skrypt bez klucza i podaj instrukcje dotyczące jego bezpiecznej konfiguracji.

    Jeśli przypadkowo udostępnisz swój klucz komuś lub umieścisz go w systemie kontroli wersji, takim jak Git, natychmiast unieważnij klucz, usuwając go na stronie IBM Cloud API keys, aby ograniczyć ryzyko. Dowiedz się więcej w temacie Managing user API keys.

  2. Po uwierzytelnieniu możesz wyświetlić listę funkcji z Qiskit Functions Catalog, do których masz dostęp:

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)]

Uruchamianie włączonych funkcji

Po utworzeniu obiektu katalogu możesz wybrać funkcję za pomocą catalog.load(provider/function-name):

ibm_cf = catalog.load("ibm/circuit-function")

Każda funkcja Qiskit ma własne dane wejściowe, opcje i wyniki. Sprawdź odpowiednie strony dokumentacji dla funkcji, którą chcesz uruchomić, aby uzyskać więcej informacji. Domyślnie wszyscy użytkownicy mogą uruchamiać tylko jedno zadanie funkcji naraz:

# 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'

Sprawdzanie statusu zadania

wskazówka

Obecnie tabela obciążeń IBM Quantum odzwierciedla jedynie obciążenia Qiskit Runtime. Użyj job.status(), aby sprawdzić bieżący status obciążenia funkcji Qiskit.

Mając job_id swojej funkcji Qiskit, możesz sprawdzić status uruchomionych zadań. Obejmuje to następujące statusy:

  • QUEUED: Program zdalny znajduje się w kolejce funkcji Qiskit. Priorytet kolejki zależy od tego, jak intensywnie korzystasz z funkcji Qiskit.
  • INITIALIZING: Program zdalny jest uruchamiany; obejmuje to konfigurację środowiska zdalnego oraz instalację zależności.
  • RUNNING: Program jest uruchomiony. Obejmuje to również kilka bardziej szczegółowych statusów, jeśli są obsługiwane przez konkretne funkcje:
    • RUNNING: MAPPING: Funkcja aktualnie mapuje twoje klasyczne dane wejściowe na kwantowe dane wejściowe.
    • RUNNING: OPTIMIZING_FOR_HARDWARE: Funkcja optymalizuje pod kątem wybranego QPU. Może to obejmować transpilację Circuit, charakteryzację QPU, propagację wsteczną obserwowalnych i tym podobne.
    • RUNNING: WAITING_FOR_QPU: Funkcja przesłała zadanie do Qiskit Runtime i oczekuje w kolejce.
    • RUNNING: EXECUTING_QPU: Funkcja ma aktywne zadanie Qiskit Runtime.
    • RUNNING: POST_PROCESSING: Funkcja przetwarza wyniki. Może to obejmować mitygację błędów, mapowanie wyników kwantowych na klasyczne i tym podobne.
  • DONE: Program zakończył działanie i możesz pobrać dane wynikowe za pomocą job.results().
  • ERROR: Program przestał działać z powodu problemu. Użyj job.result(), aby uzyskać komunikat o błędzie.
  • CANCELED: Program został anulowany — przez użytkownika, usługę lub serwer.
job.status()
'QUEUED'

Pobieranie wyników

Gdy program ma status DONE, możesz użyć job.results(), aby pobrać wynik. Format danych wyjściowych różni się w zależności od funkcji, więc pamiętaj o zapoznaniu się z odpowiednią dokumentacją:

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})

Możesz też w dowolnym momencie anulować zadanie:

job.stop()
'Job has been stopped.'

Wyświetlanie poprzednich zadań uruchomionych za pomocą funkcji Qiskit

Możesz użyć jobs(), aby wyświetlić listę wszystkich zadań przesłanych do funkcji Qiskit:

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>]

Jeśli masz już identyfikator zadania dla określonego zadania, możesz je pobrać za 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

Pobieranie komunikatów o błędach

Jeśli status programu to ERROR, użyj job.error_message(), aby pobrać komunikat o błędzie w następujący sposób:

job.error_message()
qiskit.exceptions.QiskitError: 'Workflow execution failed -- https://docs.quantum.ibm.com/errors#9999'

Następne kroki

Rekomendacje