IBM Circuit function
- Qiskit Functions to funkcja eksperymentalna dostępna wyłącznie dla użytkowników planów IBM Quantum® Premium Plan, Flex Plan i On-Prem (przez IBM Quantum Platform API). Są one w fazie podglądu i mogą ulec zmianie.
Przegląd
IBM® Circuit function przyjmuje abstrakcyjne PUBs jako dane wejściowe i zwraca złagodzone wartości oczekiwane jako dane wyjściowe. Ta Circuit function obejmuje zautomatyzowany i dostosowany potok, który pozwala badaczom skupić się na odkrywaniu algorytmów i zastosowań.
Opis
Po przesłaniu swojego PUB, twoje abstrakcyjne Circuit i obserwowalności są automatycznie transpilowane, wykonywane na sprzęcie i poddawane post-processingu w celu zwrócenia złagodzonych wartości oczekiwanych. W tym celu łączy następujące narzędzia:
- Qiskit Transpiler Service, w tym automatyczny dobór opartych na AI i heurystycznych przejść Transpiler do tłumaczenia abstrakcyjnych Circuit na zoptymalizowane pod kątem sprzętu Circuit ISA
- Tłumienie i łagodzenie błędów wymagane do obliczeń na skalę użytkową, w tym skręcanie pomiarów i bramek, dynamiczne rozłączanie, Twirled Readout Error eXtinction (TREX), Zero-Noise Extrapolation (ZNE) i Probabilistic Error Amplification (PEA)
- Qiskit Runtime Estimator, do wykonywania PUBs ISA na sprzęcie i zwracania złagodzonych wartości oczekiwanych
Pierwsze kroki
Uwierzytelnij się przy użyciu swojego klucza API i wybierz Qiskit Function w następujący sposób. (Ten fragment kodu zakłada, że masz już zapisane konto w swoim lokalnym środowisku.)
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-catalog qiskit-ibm-runtime
from qiskit_ibm_catalog import QiskitFunctionsCatalog
catalog = QiskitFunctionsCatalog(channel="ibm_quantum_platform")
function = catalog.load("ibm/circuit-function")
Przykład
Aby zacząć, wypróbuj ten podstawowy przykład:
from qiskit.circuit.random import random_circuit
from qiskit_ibm_runtime import QiskitRuntimeService
# You can skip this step if you have a target backend, e.g.
# backend_name = "ibm_brisbane"
# You'll need to specify the credentials when initializing QiskitRuntimeService, if they were not previously saved.
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
circuit = random_circuit(num_qubits=2, depth=2, seed=42)
observable = "Z" * circuit.num_qubits
pubs = [(circuit, observable)]
job = function.run(
# Use `backend_name=backend_name` if you didn't initialize a backend object
backend_name=backend.name,
pubs=pubs,
)
Sprawdź status swojego zadania Qiskit Function lub pobierz wyniki w następujący sposób:
print(job.status())
result = job.result()
QUEUED
Wyniki mają taki sam format jak wynik Estimator:
print(f"The result of the submitted job had {len(result)} PUB\n")
print(
f"The associated PubResult of this job has the following DataBins:\n {result[0].data}\n"
)
print(f"And this DataBin has attributes: {result[0].data.keys()}")
print(
f"The expectation values measured from this PUB are: \n{result[0].data.evs}"
)
The result of the submitted job had 1 PUB
The associated PubResult of this job has the following DataBins:
DataBin(evs=np.ndarray(<shape=(), dtype=float64>), stds=np.ndarray(<shape=(), dtype=float64>), ensemble_standard_error=np.ndarray(<shape=(), dtype=float64>))
And this DataBin has attributes: dict_keys(['evs', 'stds', 'ensemble_standard_error'])
The expectation values measured from this PUB are:
1.02116704805492
Dane wejściowe
Poniższa tabela zawiera wszystkie parametry wejściowe akceptowane przez IBM Circuit function. Kolejna sekcja Opcje zawiera więcej szczegółów na temat dostępnych options.
| Nazwa | Typ | Opis | Wymagany | Domyślnie | Przykład |
|---|---|---|---|---|---|
| backend_name | str | Nazwa Backend, do którego ma być skierowane zapytanie. | Tak | N/A | ibm_fez |
| pubs | Iterable[EstimatorPubLike] | Iterowalny zbiór abstrakcyjnych obiektów PUB-like (primitive unified bloc), takich jak krotki (circuit, observables) lub (circuit, observables, parameter_values). Więcej informacji znajdziesz w Przeglądzie PUBs. Circuit mogą być abstrakcyjne (non-ISA). | Tak | N/A | (circuit, observables, parameter_values) |
| options | dict | Opcje wejściowe. Więcej szczegółów znajdziesz w sekcji Opcje. | Nie | Szczegóły w sekcji Opcje. | {"optimization_level": 3} |
| instance | str | Nazwa zasobu chmury instancji do użycia w tym formacie. | Nie | Jedna jest losowo wybierana, jeśli twoje konto ma dostęp do wielu instancji. | CRN |
Opcje
Struktura
Podobnie jak w przypadku prymitywów Qiskit Runtime, opcje dla IBM Circuit function można określić jako zagnieżdżony słownik. Powszechnie używane opcje, takie jak optimization_level i mitigation_level, znajdują się na pierwszym poziomie. Inne, bardziej zaawansowane opcje są pogrupowane w różne kategorie, takie jak resilience.
Wartości domyślne
Jeśli nie określisz wartości dla opcji, używana jest wartość domyślna określona przez usługę.
Poziom mitigacji
IBM Circuit function obsługuje również mitigation_level. Poziom mitigacji określa, ile tłumienia i łagodzenia błędów zastosować do zadania. Wyższe poziomy generują dokładniejsze wyniki kosztem dłuższego czasu przetwarzania. Stopień redukcji błędów zależy od zastosowanej metody. Poziom mitigacji abstrahuje szczegółowy dobór metod łagodzenia i tłumienia błędów, aby umożliwić użytkownikom rozumowanie o kompromisie między kosztem a dokładnością odpowiednim dla ich zastosowania. Poniższa tabela pokazuje odpowiednie metody dla każdego poziomu.
Mimo że nazwy są podobne, mitigation_level stosuje inne techniki niż te używane przez resilience_level Estimator.
Podobnie jak resilience_level w Qiskit Runtime Estimator, mitigation_level określa podstawowy zestaw starannie dobranych opcji. Wszelkie opcje ręcznie określone oprócz poziomu mitigacji są stosowane na wierzchu podstawowego zestawu opcji zdefiniowanych przez poziom mitigacji. Dlatego w zasadzie można ustawić poziom mitigacji na 1, ale wyłączyć mitigację pomiarów, choć nie jest to zalecane.
| Poziom mitigacji | Technika |
|---|---|
| 1 [Domyślny] | Dynamical decoupling + skręcanie pomiarów + TREX |
| 2 | Poziom 1 + skręcanie bramek + ZNE przez fałdowanie bramek |
| 3 | Poziom 1 + skręcanie bramek + ZNE przez PEA |
Poniższy przykład demonstruje ustawianie poziomu mitigacji:
options = {"mitigation_level": 2}
job = function.run(backend_name=backend.name, pubs=pubs, options=options)
Wszystkie dostępne opcje
Oprócz mitigation_level, IBM Circuit function udostępnia również wybraną liczbę zaawansowanych opcji, które pozwalają dostroić kompromis między kosztem a dokładnością. Poniższa tabela pokazuje wszystkie dostępne opcje:
| Opcja | Podopcja | Pod-podopcja | Opis | Wybory | Domyślnie |
|---|---|---|---|---|---|
| default_precision | Domyślna precyzja do użycia dla dowolnego PUB lub wywołania run(),które jej nie określa. Każdy wejściowy PUB może określić własną precyzję. Jeśli metoda run() otrzyma precyzję, ta wartość jest używana dla wszystkich PUBs w wywołaniu run(), które nie określają własnej. | float > 0 | 0.015625 | ||
| max_execution_time | Maksymalny czas wykonania w sekundach, oparty na użyciu QPU (nie czasie zegarowym). Użycie QPU to czas, przez który QPU jest dedykowany do przetwarzania twojego zadania. Jeśli zadanie przekroczy ten limit czasu, zostanie przymusowo anulowane. | Liczba całkowita sekund w zakresie [1, 10800] | |||
| mitigation_level | Ile tłumienia i łagodzenia błędów zastosować. Więcej informacji o metodach używanych na każdym poziomie znajdziesz w sekcji Poziom mitigacji. | 1 / 2 / 3 | 1 | ||
| optimization_level | Ile optymalizacji przeprowadzić na Circuit. Wyższe poziomy generują bardziej zoptymalizowane Circuit kosztem dłuższego czasu transpilacji. | 1 / 2 / 3 | 2 | ||
| dynamical_decoupling | enable | Czy włączyć dynamical decoupling. Opis metody znajdziesz w Technikach tłumienia i łagodzenia błędów. | True/False | True | |
| sequence_type | Której sekwencji dynamical decoupling użyć. * XX: użyj sekwencji tau/2 - (+X) - tau - (+X) - tau/2* XpXm: użyj sekwencji tau/2 - (+X) - tau - (-X) - tau/2* XY4: użyj sekwencjitau/2 - (+X) - tau - (+Y) - tau (-X) - tau - (-Y) - tau/2 | 'XX'/'XpXm'/'XY4' | 'XX' | ||
| twirling | enable_gates | Czy stosować skręcanie Gate 2-Qubitowych Clifford. | True/False | False | |
| enable_measure | Czy włączyć skręcanie pomiarów. | True/False | True | ||
| resilience | measure_mitigation | Czy włączyć metodę mitigacji błędów pomiarowych TREX. Opis metody znajdziesz w Technikach tłumienia i łagodzenia błędów. | True/False | True | |
| zne_mitigation | Czy włączyć metodę mitigacji błędów Zero Noise Extrapolation. Opis metody znajdziesz w Technikach tłumienia i łagodzenia błędów. | True/False | False | ||
| zne | amplifier | Której techniki użyć do wzmacniania szumu. Jedna z: - gate_folding (domyślna) używa fałdowania Gate 2-Qubitowych do wzmacniania szumu. Jeśli współczynnik szumu wymaga wzmocnienia tylko podzbioru Gate, są one wybierane losowo.- gate_folding_front używa fałdowania Gate 2-Qubitowych do wzmacniania szumu. Jeśli współczynnik szumu wymaga wzmocnienia tylko podzbioru Gate, są one wybierane z przodu topologicznie uporządkowanego obwodu DAG.- gate_folding_back używa fałdowania Gate 2-Qubitowych do wzmacniania szumu. Jeśli współczynnik szumu wymaga wzmocnienia tylko podzbioru Gate, są one wybierane z tyłu topologicznie uporządkowanego obwodu DAG.- pea używa techniki zwanej Probabilistic error amplification (PEA) do wzmacniania szumu. Opis metody znajdziesz w Technikach tłumienia i łagodzenia błędów. | gate_folding / gate_folding_front / gate_folding_back / pea | gate_folding | |
| noise_factors | Współczynniki szumu do użycia przy wzmacnianiu szumu. | lista liczb zmiennoprzecinkowych; każda >= 1 | (1, 1.5, 2) dla PEA i (1, 3, 5) w pozostałych przypadkach. | ||
| extrapolator | Współczynniki szumu, w których oceniać modele ekstrapolacji dopasowania. Ta opcja nie ma wpływu na wykonanie ani dopasowanie modelu w żaden sposób; określa jedynie punkty, w których obiekty extrapolator są oceniane i zwracane w polach danych o nazwach evs_extrapolated i stds_extrapolated. | jeden lub więcej z exponential,linear, double_exponential,polynomial_degree_(1 <= k <= 7) | (exponential, linear) | ||
| pec_mitigation | Czy włączyć metodę mitigacji błędów Probabilistic Error Cancellation. Opis metody znajdziesz w Technikach tłumienia i łagodzenia błędów. | True/False | False | ||
| pec | max_overhead | Maksymalne dopuszczalne narzuty próbkowania Circuit lub None bez maksimum. | None / liczba całkowita > 1 | 100 |
W poniższym przykładzie ustawienie poziomu mitigacji na 1 początkowo wyłącza mitigację ZNE, ale ustawienie zne_mitigation na True nadpisuje odpowiednią konfigurację z mitigation_level.
options = {"mitigation_level": 1, "resilience": {"zne_mitigation": True}}
Dane wyjściowe
Wyjście Circuit function to PrimitiveResult, który zawiera dwa pola:
-
Jeden lub więcej obiektów PubResult. Można się do nich odwoływać bezpośrednio z
PrimitiveResult. -
Metadane na poziomie zadania.
Każdy PubResult zawiera pole data i metadata.
-
Pole
datazawiera co najmniej tablicę wartości oczekiwanych (PubResult.data.evs) i tablicę błędów standardowych (PubResult.data.stds). Może też zawierać więcej danych, w zależności od użytych opcji. -
Pole
metadatazawiera metadane na poziomie PUB (PubResult.metadata).
Poniższy fragment kodu opisuje format PrimitiveResult (i powiązanego PubResult).
print(f"The result of the submitted job had {len(result)} PUB")
print(
f"The expectation values measured from this PUB are: \n{result[0].data.evs}"
)
print(f"And the associated metadata is: \n{result[0].metadata}")
The result of the submitted job had 1 PUB
The expectation values measured from this PUB are:
1.02116704805492
And the associated metadata is:
{'shots': 4096, 'target_precision': 0.015625, 'circuit_metadata': {}, 'resilience': {}, 'num_randomizations': 32}
Pobieranie komunikatów o błędach
Jeśli status twojego obciążenia to ERROR, użyj job.result(), aby pobrać komunikat o błędzie pomocny przy debugowaniu:
job = function.run(
backend_name="bad_backend_name", pubs=pubs, options=options
)
print(job.result())
Uzyskaj wsparcie
Skontaktuj się z pomocą techniczną IBM Quantum i podaj następujące informacje:
- ID zadania Qiskit Function (
qiskit-ibm-catalog),job.job_id - Szczegółowy opis problemu
- Wszelkie istotne komunikaty lub kody błędów
- Kroki do odtworzenia problemu
Następne kroki
- Wypróbuj samouczek Mitigacja błędów z IBM Circuit function.