Przejdź do głównej treści

IBM Circuit function

Uwaga
  • 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:

IBM Circuit function

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.

NazwaTypOpisWymaganyDomyślniePrzykład
backend_namestrNazwa Backend, do którego ma być skierowane zapytanie.TakN/Aibm_fez
pubsIterable[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).TakN/A(circuit, observables, parameter_values)
optionsdictOpcje wejściowe. Więcej szczegółów znajdziesz w sekcji Opcje.NieSzczegóły w sekcji Opcje.{"optimization_level": 3}
instancestrNazwa zasobu chmury instancji do użycia w tym formacie.NieJedna 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.

uwaga

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 mitigacjiTechnika
1 [Domyślny]Dynamical decoupling + skręcanie pomiarów + TREX
2Poziom 1 + skręcanie bramek + ZNE przez fałdowanie bramek
3Poziom 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:

OpcjaPodopcjaPod-podopcjaOpisWyboryDomyślnie
default_precisionDomyś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 > 00.015625
max_execution_timeMaksymalny 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_levelIle 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 / 31
optimization_levelIle optymalizacji przeprowadzić na Circuit. Wyższe poziomy generują bardziej zoptymalizowane Circuit kosztem dłuższego czasu transpilacji.1 / 2 / 32
dynamical_decouplingenableCzy włączyć dynamical decoupling. Opis metody znajdziesz w Technikach tłumienia i łagodzenia błędów.True/FalseTrue
sequence_typeKtó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 sekwencji
tau/2 - (+X) - tau - (+Y) - tau (-X) - tau - (-Y) - tau/2
'XX'/'XpXm'/'XY4''XX'
twirlingenable_gatesCzy stosować skręcanie Gate 2-Qubitowych Clifford.True/FalseFalse
enable_measureCzy włączyć skręcanie pomiarów.True/FalseTrue
resiliencemeasure_mitigationCzy włączyć metodę mitigacji błędów pomiarowych TREX. Opis metody znajdziesz w Technikach tłumienia i łagodzenia błędów.True/FalseTrue
zne_mitigationCzy włączyć metodę mitigacji błędów Zero Noise Extrapolation. Opis metody znajdziesz w Technikach tłumienia i łagodzenia błędów.True/FalseFalse
zneamplifierKtó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 / peagate_folding
noise_factorsWspół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.
extrapolatorWspół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_mitigationCzy włączyć metodę mitigacji błędów Probabilistic Error Cancellation. Opis metody znajdziesz w Technikach tłumienia i łagodzenia błędów.True/FalseFalse
pecmax_overheadMaksymalne dopuszczalne narzuty próbkowania Circuit lub None bez maksimum.None / liczba całkowita > 1100

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 data zawiera 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 metadata zawiera 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

Rekomendacje