Omówienie symulatorów kwantowych w kontekście QDK

Microsoft Quantum Development Kit (QDK) zawiera symulatory kwantowe, które uruchamiają programy kwantowe na maszynie lokalnej. Użyj tych lokalnych symulatorów do testowania i opracowywania programów przed przesłaniem ich do Azure Quantum targetów docelowych.

Moduł QDK udostępnia cztery podstawowe symulatory do uruchamiania programów kwantowych:

  • Symulator rzadkiego układu
  • Symulator stabilizatora
  • Symulator GPU
  • Symulator CPU

Symulator rzadkiego układu

Symulator rzadki reprezentuje stany kubitu jako wektory rzadkie i używa algebry rzadkich macierzy do szybkiego symulowania programów, które generują kilka niezerowych amplitud. Jest to domyślny symulator dla programów Q# i OpenQASM w rozszerzeniu QDK oraz dla interfejsów API qsharp.run i openqasm.runPython. Użyj rozrzednego symulatora, jeśli chcesz szybko symulować Q#programy , OpenQASMlub Qiskit , gdy chcesz wyświetlić stan kwantowy programu podczas symulacji.

Symulator rzadki jest dostępny zarówno w rozszerzeniu dla VS Code (Visual Studio Code), jak i w pakiecie QDKPython. Ten symulator jest jedynym symulatorem dostępnym QDK w rozszerzeniu, więc rozszerzenie automatycznie używa go podczas uruchamiania Q# i OpenQASM programów w programie VS Code. W VS Codesystemie użyj Q#DumpMachine funkcji lub debugera, aby wyświetlić wektory stanu kubitu w różnych punktach symulacji.

Zarówno rozszerzenie VS Code, jak i pakiet Python obsługują modele szumów dla rzadkich symulacji programów Q# i OpenQASM. Tylko pakiet Python obsługuje symulacje rzadkie programów Qiskit, ale nie obsługuje modeli szumu dla symulacji Qiskit.

Aby uzyskać więcej informacji na temat uruchamiania symulacji w QDK rozszerzeniu, zobacz Uruchamianie symulacji kwantowych w QDK rozszerzeniu dla programu Visual Studio Code.

Symulator stabilizatora

Symulator stabilizatora szybko i skutecznie symuluje programy zdominowane przez Clifford z tysiącami kubitów. Clifford bramki są typowymi składnikami obwodów korygowania błędów kwantowych. Clifford operacje nie zwiększają liczby gałęzi stabilizatora, więc symulator może je skutecznie stosować nawet w szerokich obwodach. Typowe Clifford operacje obejmują:

  • $X$, $Y$ i $Z$
  • $S$ i $S^\dagger$
  • $H$, lub Hadamard
  • $CX$, $CY$, i $CZ$
  • $SWAP$

Symulator stabilizatora używa również rozgałęziania stabilizatora do symulowania obwodów z ograniczoną liczbą operacji innych niż Clifford. Symulator obsługuje następujące operacje inne niż Clifford:

  • $T$ i $T^\dagger$
  • Obroty $R_X$, $R_Y$, $R_Z$, $R_{XX}$, $R_{YY}$ i $R_{ZZ}$ o dowolnym kącie

Każda operacja inna niż Clifford może zwiększyć liczbę gałęzi stabilizatora. Dodawanie operacji innych niż Clifford może wykładniczo zwiększyć użycie pamięci i czas wykonania. Użyj symulatora stabilizatora dla szerokich obwodów z głównie Clifford operacjami i skromną liczbą operacji innych niż Clifford. Użyj rzadkiego lub pełnego symulatora dla obwodów, które mają wiele operacji innych niż Clifford.

Symulator stabilizatora obsługuje adaptacyjne wykonywanie obwodu, Pauli szum i utratę kubitów. Jest on dostępny w pakiecie QDKPython dla Q#programów , OpenQASM, Qiskit, i QIR , ale nie jest dostępny w QDK rozszerzeniu dla programu VS Code.

W Python interfejsach API z selektorem symulatora użyj "stabilizer" lub "clifford", aby wybrać symulator stabilizera.

Symulator GPU

Symulator GPU jest symulatorem pełnego stanu, który używa maszyny GPU do równoległego uruchamiania licznych wywołań programu kwantowego. Symulator obsługuje wszystkie typy bram, ale wymaga znaczących zasobów obliczeniowych. Symulator może modelować maksymalnie 27 kubitów. Moc maszyny GPU określa wydajność, ale wydajność jest optymalna dla programów, które mają około 20 kubitów i wiele zdjęć.

Symulator GPU akceptuje QIR lub Qiskit jako dane wejściowe za pośrednictwem niektórych QDKPython interfejsów API pakietu. Rozszerzenie VS Code nie obsługuje symulatora GPU . Istnieje również bogate wsparcie dla modeli szumów dla dowolnego typu wrot kwantowych lub operacji.

Symulator CPU

Podobnie jak symulator GPU, symulator CPU jest symulatorem pełnego stanu, który uruchamia programy z dowolnym typem bramy kwantowej. Ale jest wolniejsza, ponieważ nie może uruchamiać wielu uruchomień równolegle. Ten symulator skaluje się do około 25 kubitów, ale wraz ze wzrostem liczby kubitów spowalnia wykładniczo z powodu problemów z pamięcią. Użyj symulatora CPU, gdy maszyna nie ma GPU, lub gdy program ma kilka kubitów i nie wymaga wielu prób.

Symulator CPU akceptuje QIR lub Qiskit dane wejściowe. Można go używać za pośrednictwem niektórych QDKPython interfejsów API pakietów, ale nie za pośrednictwem VS Code rozszerzenia. Istnieje również bogata obsługa modeli szumów dla dowolnego typu bramy kwantowej lub operacji.

Jakiego symulatora należy używać?

Podczas wybierania symulatora należy wziąć pod uwagę następujące czynniki:

  • Środowisko projektowe (VS Code lub Python)
  • Struktura programowania kwantowego, której używasz
  • Złożoność programu i liczba zdjęć
  • Możliwości sprzętowe maszyny lokalnej
  • Obiekt docelowy Azure Quantum lub inny sprzęt kwantowy, na którym chcesz uruchamiać programy
  • Modele szumów, które chcesz skompilować

Poniższa tabela zawiera podsumowanie dostępności każdego QDK symulatora i obsługiwanych frameworków programowania kwantowego:

Symulator Availability Obsługiwane platformy
Rzadkie VS Code rozszerzenie i Python pakiet Q#, OpenQASM, Qiskit
Stabilizer Python Pakiet Q#, , OpenQASM, , QiskitQIR
GPU Python Pakiet Qiskit, QIR
CPU Python Pakiet Qiskit, QIR

Symulacje w QDK rozszerzeniu dla VS Code

Rozszerzenie QDK dla programu VS Code obsługuje tylko symulator rozrzedzony. Aby użyć symulatora rozrzedzonego, uruchom plik Q# lub OpenQASM w VS Code. Modele szumów można dodawać Pauli do symulacji rozrzedzonych Q# programów w VS Code programach, ale nie do OpenQASM programów.

Symulacje w pakiecie QDKPython

Pakiet QDKPython obsługuje wiele frameworków programowania kwantowego i wszystkie cztery symulatory QDK. Zgodność różni się w zależności od frameworku i interfejsu API.

W poniższej tabeli wymieniono symulatory i frameworki programistyczne obsługiwane przez każdy Python interfejs API:

Python Interfejs Programowania Aplikacji (API) Rzadkie Stabilizer GPU CPU Struktura programowania
qsharp.run Supported Supported Nieobsługiwane Nieobsługiwane Q#
openqasm.run Supported Supported Nieobsługiwane Nieobsługiwane OpenQASM
qiskit.QSharpBackend Supported Nieobsługiwane Nieobsługiwane Nieobsługiwane Qiskit
simulation.NeutralAtomDevice Nieobsługiwane Supported Supported Supported QIR
qiskit.NeutralAtomBackend Nieobsługiwane Supported Supported Supported Qiskit
simulation.run_qir Nieobsługiwane Supported Supported Supported QIR