Wprowadzenie do Qiskit Functions
- 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.
Functions występują w dwóch postaciach:
| Typ | Co robi? | Przykładowe wejścia i wyjścia | Dla kogo? |
|---|---|---|---|
| Circuit function | Uproszczony interfejs do uruchamiania Circuit. Abstrahuje transpilację, tłumienie błędów i łagodzenie błędów | Wejś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 function | Obejmuje 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ściami | Wejś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
| Nazwa | Dostawca | Zalecane zastosowanie | Unikalne zalety |
|---|---|---|---|
| Tensor-Network Error Mitigation | Algorithmiq | Obciąż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 Mitigation | Qedma | Obciąż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 Management | Q-CTRL | Obciąż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
| Nazwa | Dostawca | Zalecane zastosowanie | Unikalne zalety |
|---|---|---|---|
| QUICK-PDE | ColibriTD | Wykorzystanie 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 Optimizer | Global Data Quantum | Obciąż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 Chemistry | Qunova Computing | Obciąż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 Optimizer | Kipu Quantum | Obciąż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 Learning | Multiverse Computing | Klasyczne 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 Solver | Q-CTRL | Problemy 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:
- Przejdź do IBM Cloud IAM.
- 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.
- Przełącz swoje konto na pasku górnym na takie z następującym formatem:
- 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
-
Aby zacząć korzystać z Qiskit Functions, zainstaluj klienta IBM Qiskit Functions Catalog:
pip install qiskit-ibm-catalog -
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(), uruchompythonw 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")
-
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 dashboardostrożnieChroń 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.
-
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
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żyjjob.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
- Przeglądaj Circuit functions, aby tworzyć nowe algorytmy i aplikacje bez potrzeby zarządzania transpilacją ani obsługą błędów.
- Przeglądaj application functions, aby rozwiązywać zadania z konkretnych dziedzin, korzystając z klasycznych danych wejściowych i wyjściowych.