Přeskočit na hlavní obsah

SQD a SKQD

V této kapitole prozkoumáme, jak kvantové a klasické počítače spolupracují při řešení jedné z nejdůležitějších výzev ve vědě: přesném odhadování energie molekul a materiálů.

Iskandar Sitdikov popisuje algoritmický přístup v následujícím videu.

Hamiltonián

Klíčem k tomuto problému je matematický operátor — hamiltonián, který představuje celkovou energii systému. Pro výpočetní účely si tento hamiltonián můžeme představit jako velkou matici. Řešení, která hledáme — konkrétně základní stav systému — jsou nejnižší vlastní hodnoty této matice. Problém však spočívá v tom, že pro praktické úlohy je tato hamiltonova matice velmi velká. S velikostí systému roste exponenciálně, přičemž rychle dosáhne rozměru (2n2^n, kde nn je počet qubitů) příliš velkého na to, aby ji dokázaly uložit nebo přímo vyřešit i ty nejvýkonnější superpočítače.

H=(H0,0H0,1H0,N1H1,0H1,1H1,N1HN1,0HN1,1HN1,N1)(N=2n)H = \begin{pmatrix} H_{0,0} & H_{0,1} & \cdots & H_{0,N-1} \\ H_{1,0} & H_{1,1} & \cdots & H_{1,N-1} \\ \vdots & \vdots & \ddots & \vdots \\ H_{N-1,0} & H_{N-1,1} & \cdots & H_{N-1,N-1} \end{pmatrix} \quad (N=2^n)

Abychom tento problém obešli, využíváme účinnou strategii známou jako metoda podprostoru. Namísto zpracování celé matice inteligentně vybereme malý, relevantní výsek — „podprostor" — o němž se domníváme, že obsahuje nejdůležitější informace o nízkoenergiovém řešení, které hledáme.

(Hi,j)Full HamiltonianProjectH~Projected Hamiltonian=(b1Hb1b1HbLbLHb1bLHbL)Diagonalize(E000EL1)Eigenvalues\underset{\text{Full Hamiltonian}}{\begin{pmatrix} \ddots & \vdots \\ \cdots & H_{i,j} & \cdots \\ & \vdots & \ddots \end{pmatrix}} \quad \xrightarrow{\text{Project}} \quad \underset{\text{Projected Hamiltonian}}{\tilde{H}} = \begin{pmatrix} \langle b_1 | H | b_1 \rangle & \cdots & \langle b_1 | H | b_L \rangle \\ \vdots & \ddots & \vdots \\ \langle b_L | H | b_1 \rangle & \cdots & \langle b_L | H | b_L \rangle \end{pmatrix} \quad \xrightarrow{\text{Diagonalize}} \quad \underset{\text{Eigenvalues}}{\begin{pmatrix} E_0 & & 0 \\ & \ddots & \\ 0 & & E_{L-1} \end{pmatrix}}

Jakmile je tento malý podprostor definován sadou bázových stavů {bi}\{|b_i\rangle\}, celý hamiltonián je na něj promítnut, čímž vznikne nová, menší matice H~\tilde{H}. Každý prvek této matice se vypočítá z bázových stavů podprostoru a původního hamiltoniánu jako biHbj\langle b_i | H | b_j \rangle. Tuto malou matici pak lze snadno diagonalizovat na klasickém počítači a výsledné vlastní hodnoty jsou naše odhadované energie.

Jak asi tušíš, úspěch celého tohoto přístupu silně závisí na volbě „dobrého" podprostoru. Pokud náš podprostor nepřesně reprezentuje skutečný základní stav, bude naše výsledná odpověď nesprávná. Právě zde přicházejí ke slovu kvantové počítače: umožňují nám připravit a vzorkovat komplexní kvantové stavy navržené k identifikaci těchto důležitých podprostorů. U skutečně rozsáhlých problémů, jako jsou komplexní chemické struktury nebo vazebná místa, může být i promítnutá matice náročná na diagonalizaci. Takové problémy jsou proto ideálně uzpůsobeny k využití silných stránek kvantových i klasických výpočetních prostředků.

V následujících částech prozkoumáme dva pokročilé algoritmy — SQD a SKQD — které využívají kvantovou mechaniku k nalezení a sestavení těchto podprostorů. Pro hlubší ponor existuje úplný kurz na IBM Quantum Learning věnovaný těmto tématům podrobně. Pro účely tohoto kurzu si vystačíme s vysvětlením na vysoké úrovni.

Sample-based Quantum Diagonalization

Sample-based Quantum Diagonalization (SQD) je výkonný variační algoritmus, který implementuje metodu podprostoru kvantovým způsobem. Vyhýbá se nákladným, složitým procedurám jako Hadamardovy testy tím, že využívá kvantový počítač k přípravě zkušebního stavu a vzorkování bitřetězců, které definují podprostor pro klasickou diagonalizaci.

A schematic of the workflow specific to sample-based quantum diagonalization. The steps include a variational quantum circuit, using measurements to project the Hamiltonian into a subspace, then using a classical optimizer to update variational parameters in the circuit and repeating.

Algoritmus SQD lze rozdělit do následujících kroků:

Krok 1: Příprava stavu ansatz

Nechť H=j=1QαjPjH = \sum_{j=1}^Q \alpha_j P_j je hamiltonián na nn qubitech. Ačkoliv může být skutečný základní stav rozprostřen přes všechny 2n2^n bázové stavy, SQD je nejúčinnější v případech, kdy lze základní stav dobře aproximovat řídkým podprostorem (polynomiálně velkou sadou bitřetězců).

K sestavení tohoto podprostoru začínáme vstupním stavem ϕ0|\phi_0\rangle, například stavem Hartreeho–Focka (HF) v chemii. Poté aplikujeme parametrizovaný kvantový obvod U(θ)U(\theta), který je znám jako ansatz.

A diagram showing the overlap of the computational basis states making up the ansatz and those making up the true ground state. Specifically, the image shows that the two regions will have some overlap, but might not perfectly match.

Tento diagram ilustruje cíl dobrého ansatzu. Ansatz připravuje kvantový stav, jehož nosič (sada bázových stavů, ze kterých se skládá) by měl ideálně mít velké překrytí s nosičem skutečného základního stavu. Tento obvod nám umožňuje rychle promítnout ansatz na výpočetní bázové stavy, které budou dále použity při klasické diagonalizaci. Jinak řečeno: nemusíme odhadovat ansatz, který je základním stavem; stačí, aby obsahoval stejné bázové stavy. Klasická diagonalizace promítnutého hamiltoniánu nám pak dá superpozici bázových stavů, která nejlépe aproximuje základní stav.

Krok 2: Vzorkování podprostoru

Vzorkováním z obvodu připraveného ansatzem získáme kolekci bitřetězců {bj}j=1L\{b_j\}_{j=1}^L. Tyto bitřetězce definují bázi našeho zvoleného podprostoru. Kvantový běhový čas pro tento krok je dán hloubkou obvodu a počtem odebraných vzorků.

Krok 3: Promítnutí a klasická diagonalizace

S využitím vzorkovaných bitřetězců promítneme hamiltonián do podprostoru, který rozpínají. Pro každou dvojici bitřetězců (j,k)(j, k) klasicky vypočítáme maticový prvek H~jk=bjHbk\tilde{H}_{jk} = \langle b_j | H | b_k \rangle. Protože Pauliho operátory jsou řídké, je tento krok klasicky efektivní pro fyzikální hamiltoniány. Výsledná malá matice H~\tilde{H} je pak diagonalizována na klasickém procesoru, čímž odhadneme základní stav a jeho energii.

Krok 4: Optimalizace ansatzu (volitelné)

Tento proces lze učinit iterativním. Tím, že odhadovanou energii základního stavu použijeme jako účelovou funkci, můžeme optimalizovat parametry obvodu (θ\theta) metodami jako gradient descent, abychom zlepšili ansatz a tím i aproximaci energie v další iteraci.

Klíčové výhody SQD

SQD nabízí několik výkonných vlastností, díky nimž je předním kandidátem pro demonstraci kvantové výhody:

  • Silná robustnost vůči šumu: Předpokládejme, že skutečný základní stav je rozprostřen pouze na dvou bitřetězcích. Pokud jsou tyto vzorkovány vůbec, i když je jejich překrytí s naším ansatzem malé, diagonalizace jim přiřadí odpovídající váhy a efektivně ignoruje všechny ostatní nadbytečné, zašuměné bitřetězce, které mohly být také vzorkovány. Toto inherentní filtrování činí SQD zvláště tolerantní vůči šumu.
  • Klasická ověřitelnost: Na rozdíl od QPE nebo VQA poskytuje SQD klasickou aproximaci základního stavu. To znamená, že kdokoli s přístupem k seznamu bitřetězců a jejich váhám může odhadovanou energii přímo přepočítat a ověřit na klasickém počítači.

SQD již bylo použito k odhadnutí disociační energie základního stavu N2_2 a elektronických vlastností klastrů [2Fe-2S] a [4Fe-4S] [2], s obvody o velikosti až 77 qubitů a 10 570 hradel.

Otestuj své znalosti

Pravda, nebo nepravda: SQD lze aplikovat na chemické systémy.

Odpověď:

Pravda

Otestuj své znalosti

Označme množinu všech stavů výpočetní báze, z nichž se skládá tvůj ansatz, jako AA. Označme množinu všech stavů výpočetní báze, z nichž se skládá skutečný základní stav tvého systému, jako GG. Která z následujících možností odpovídá „dobrému" ansatzu? Vyber vše, co platí.

(a) AGA \subset G \\ (b) AGA \subseteq G\\ (c) GAG \subset A\\ (d) GAG \subseteq A\\

Odpověď:

(c) a (d)

SKQD (Sample-based Krylov Quantum Diagonalization)

Sample-based Krylov Quantum Diagonalization (SKQD) je další výkonný kvantový algoritmus založený na vzorkování, který navazuje na principy SQD. Přestože jeho cíl je stejný — najít vhodný podprostor pro diagonalizaci — SKQD využívá strukturovanější metodu generování bitových řetězců, zejména pro problémy jako mřížkové hamiltoniány.

Základní myšlenkou SKQD je, že místo optimalizace parametrizovaného obvodu k nalezení dobrého ansatzu lze prokazatelně konvergovat k základnímu stavu vzorkováním ze sady stavů generovaných přirozenou časovou evolucí samotného systému — Krylovým podprostorem. Algoritmus SKQD lze rozložit do následujících kroků:

Krok 1: Zkonstruuj Krylovův podprostor pomocí časové evoluce

Proces začíná počátečním stavem ϕ0.|\phi_0\rangle. Důležité je, že tento počáteční stav nemusí mít „dobré" překrytí se základním stavem. Stačí, aby byl „polynomiálně velký", tedy popsaný polynomem ve velikosti systému. Samotný algoritmus pak bude stav postupně přibližovat základnímu stavu systému. SKQD aplikuje operátor časové evoluce eiHte^{-iHt} pro různé délky času. Tím vzniká sada dd různých kvantových stavů definovaných jako:

ϕj=eiδtjHϕ0,for j=0,1,,d1|\phi_j\rangle = e^{-i \,\delta t j H}|\phi_0\rangle, \quad \text{for } j = 0, 1, \dots, d-1 \quad \text{}

Tato kolekce časově vyvinutých stavů tvoří Krylovovu bázi. Tento krok je obzvláště účinný pro mřížkové hamiltoniány, kde počet členů hamiltoniánu není velký. U chemických problémů může tato časová evoluce vést k velmi hlubokým obvodům, a proto je pro tyto případy často doporučováno SQD.

Krok 2: Vzorkuj ze stavů Krylovovy báze

Dále jsou ze každého z dd různých stavů (ϕ0,ϕ1,,ϕd1|\phi_0\rangle, |\phi_1\rangle, \dots, |\phi_{d-1}\rangle) připravených v předchozím kroku shromážděny vzorky bitových řetězců. Všechny tyto bitové řetězce jsou pak sloučeny dohromady a tvoří bázi podprostoru.

Krok 3: Promítni a diagonalizuj klasicky

Tento krok je totožný s krokem v SQD. Shromážděné bitové řetězce jsou použity k promítnutí celého hamiltoniánu do podprostoru, který rozpínají. Výsledná malá matice H~\tilde{H} je pak diagonalizována na klasickém počítači za účelem nalezení energie základního stavu.

Klíčové výhody a záruky SKQD

Strukturovaný přístup SKQD přináší jedinečné výhody:

  • Prokazatelná konvergence: Klíčovou výhodou SKQD je jeho teoretická záruka konvergence za specifických, dobře definovaných podmínek. Pokud je skutečný základní stav řídký (lze jej dobře aproximovat polynomiálním počtem bitových řetězců) a energetická mezera k prvnímu excitovanému stavu není příliš malá, je prokázáno, že metoda funguje efektivně. Za těchto podmínek SKQD zaručuje, že nalezne klíčové bitové řetězce tvořící základní stav a dokáže s vysokou přesností aproximovat jeho energii. K tomu je zapotřebí pouze polynomiální počet kvantových experimentů a výstřelů. Tato záruka staví přístup založený na vzorkování na pevný teoretický základ, podobně jako zavedené metody jako kvantová fázová estimace.

  • Sdílené výhody se SQD: Podobně jako SQD má i SKQD vlastnost odolnosti vůči šumu. Jinými slovy, pokud jsou v sadě vzorkovaných bitových řetězců obsaženy všechny dobré bitové řetězce, přiřadí diagonalizace nesprávným bitovým řetězcům téměř nulovou váhu, čímž je postup odolný vůči šumu. Navíc, protože řešení je produkováno klasickým HPC, je energie řešení klasicky ověřitelná.

V experimentech bylo SKQD použito s až 70 qubity a tisíci hradel ke studiu základního stavu složitých 4-nečistotových Andersonových modelů, přičemž bylo dosaženo vynikající shody s nejmodernějšími klasickými metodami, jako je DMRG.[1]

Otestuj své znalosti

Která část algoritmu SKQD jej činí vhodnějším pro fyzikální problémy jako spinové mřížky než pro chemické problémy? Proč?

Odpověď:

Časová evoluce vyžaduje Trotterovy obvody, které jsou velmi hluboké pro hamiltoniány, jež jsou složité a nejsou řídké. Spinové mřížkové interakce se řídí spinovými maticemi ekvivalentními Pauliho maticím. Hamiltoniány pro spinové mřížky proto bývají kompaktněji vyjádřitelné pomocí Pauliho matic, zejména ty s interakcemi nejbližších sousedů.

SQD a SKQD jako heterogenní výpočty

Abychom vše shrnuli, můžeme algoritmy založené na vzorkování reprezentovat jako kombinaci různých programovacích modelů na sadě heterogenních prostředků. Například můžeme náš algoritmus reprezentovat jako pracovní postup úloh.

A schematic of the workflow specific to sample-based quantum diagonalization. The steps include a variational quantum circuit, using measurements to project the Hamiltonian into a subspace, then using a classical optimizer to update variational parameters in the circuit and repeating.

Tento obrázek ilustruje základní čtyřfázový pracovní postup. Nejprve bude provedena úloha přípravy kvantového obvodu s překrytím s cílovým stavem, po níž bude následovat úloha transpilace, která ke svému provedení vyžaduje pouze klasické prostředky. Dále bude provedena úloha využívající primitiva ke spuštění kvantového obvodu, která vyžaduje kvantové prostředky. Nakonec bude provedena úloha následného zpracování, která sama o sobě může být paralelním diagonalizačním algoritmem běžícím na více uzlech.

Navíc může být žádoucí spustit jeden z těchto algoritmů mnohokrát při různých variacích ansatzu, nebo je spustit zcela paralelně s různými populacemi.

A schematic of an SQD workload being split among several resources. It shows several processes running sequentially, using the results of one iteration to inform the next, but also performing many such processes in parallel.

Jak je znázorněno výše, můžeš spouštět více pracovních postupů současně a přitom provádět následující:

  • Měnit parametry nebo strukturu ansatzu za účelem nalezení nejúčinnějšího.
  • Začínat s různými počátečními stavy nebo konfiguracemi („populacemi"), abys předešel lokálním minimům a zajistil robustnější výsledek.

Tento vícevrstvý přístup, kombinující úlohovou heterogenitu s paralelismem na úrovni pracovního postupu, je klíčem k odemčení plného potenciálu těchto algoritmů.

Programátorská praxe

Pojďme procvičit algoritmus SKQD a demonstrovat heterogenní pracovní postup popsaný výše. Proces je rozdělen do čtyř různých fází, každá s vlastním skriptem v Pythonu a odpovídajícím shellovým skriptem pro odesílání úloh.

Mapping (mapping.py a mapping.sh)

Prvním krokem v našem pracovním postupu je definovat fyzikální problém a namapovat ho na sadu kvantových obvodů.

Soubor mapping.py definuje parametry konkrétního fyzikálního problému – v tomto případě Andersonův model příměsi se sedmi lázňovými místy (n_bath = 7). Konstruuje jednočásticové (h1e) a dvočásticové (h2e) integrály, které reprezentují Hamiltonián systému.


...

n_bath = 7 # number of bath sites

...

# One body matrix elements in the "position" basis
h1e = -t * np.diag(np.ones(n_bath), k=1) - t * np.diag(np.ones(n_bath), k=-1)
h1e[impurity_index, impurity_index + 1] = -V
h1e[impurity_index + 1, impurity_index] = -V
h1e[impurity_index, impurity_index] = eps

# Two body matrix elements in the "position" basis
h2e = np.zeros((n_bath + 1, n_bath + 1, n_bath + 1, n_bath + 1))
h2e[impurity_index, impurity_index, impurity_index, impurity_index] = U

...

# The one-body time evolution
free_fermion_evolution = ffsim.qiskit.OrbitalRotationJW(n_modes, Utar)

# The two-body time evolution
def append_diagonal_evolution(dt, U, impurity_qubit, num_orb, q_circuit):
"""Append two-body time evolution to a quantum circuit."""
if U != 0:
q_circuit.append(
CPhaseGate(-dt / 2 * U),
[impurity_qubit, impurity_qubit + num_orb],
)

Skript poté generuje kvantové obvody potřebné pro algoritmus SKQD. Začíná vytvořením počátečního stavu (initial_state) a následně aplikuje operátory časového vývoje pro různý počet kroků (d = 8), čímž generuje různé bázové stavy Krylovova prostoru, ϕj=(eiHt)jϕ0|\phi_j\rangle = (e^{-iHt})^j |\phi_0\rangle.


# The reference state
def initial_state(q_circuit, norb, nocc):
"""Prepare an initial state."""
for i in range(nocc):
q_circuit.append(XGate(), [i])
q_circuit.append(XGate(), [norb + i])
rot = XXPlusYYGate(np.pi / 2, -np.pi / 2)

for i in range(3):
for j in range(nocc - i - 1, nocc + i, 2):
q_circuit.append(rot, [j, j + 1])
q_circuit.append(rot, [norb + j, norb + j + 1])
q_circuit.append(rot, [j + 1, j + 2])
q_circuit.append(rot, [norb + j + 1, norb + j + 2])

...

# Generate the initial state
qubits = QuantumRegister(2 * n_modes, name="q")
init_state = QuantumCircuit(qubits)
initial_state(init_state, n_modes, n_modes // 2)

...

d = 8 # Number of Krylov basis states
circuits = []
for i in range(d):
circ = init_state.copy()
circuits.append(circ)
for _ in range(i):
append_diagonal_evolution(dt, U, impurity_index, n_modes, circ)
circ.append(free_fermion_evolution, qubits)
append_diagonal_evolution(dt, U, impurity_index, n_modes, circ)
circ.measure_all()

print(circuits[0].draw(scale=0.4, fold=-1))

Skript uloží seznam 8 vygenerovaných obvodů (každý s připojenými měřeními) do souboru s názvem circuits.qpy.

Soubor mapping.sh je dávkový skript Slurm sloužící k odeslání úlohy mapping.py. Protože jde o klasický výpočet, požaduje prostředky ze standardního CPU oddílu (--partition=normal).

#!/bin/bash
#
#SBATCH --job-name=sqd-mapping
#SBATCH --output=sqd-mapping.out
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=1
#SBATCH --partition=normal

srun python /data/ch4/sqd/mapping.py

Optimalizace (optimization.py a optimization.sh)

Jakmile máme připravené obvody, je třeba je optimalizovat a zkompilovat, aby efektivně běžely na cílovém kvantovém hardwaru.

Skript optimization.py nejprve načte soubor circuits.qpy vytvořený ve fázi mapování a získá informace o kvantových zdrojích prostřednictvím QRMI(), správce kvantových zdrojů. Poté využívá Qiskitovu funkci generate_preset_pass_manager s vysokou úrovní optimalizace (optimization_level=3) k převodu abstraktních logických obvodů na obvody v architektuře instrukční sady (ISA). Tento proces přepíše obvody pomocí nativních hradel daného hardwaru a optimalizuje je tak, aby se snížila hloubka a minimalizovaly chyby.


...
qrmi = QRMI()
resources = qrmi.resources()
quantum_resource = resources[0]
target = quantum_resource.target

pass_manager = generate_preset_pass_manager(
optimization_level=3,
target=target
)
isa_circuits = pass_manager.run(circuits)

Přeložené obvody připravené pro hardware jsou uloženy do nového souboru isa_circuits.qpy.

Podobně jako skript pro mapování i tato úloha Slurm běží na klasické CPU partici (--partition=normal), protože transpilace je klasický úkol.

#!/bin/bash
#
#SBATCH --job-name=sqd-mapping
#SBATCH --output=sqd-mapping.out
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=1
#SBATCH --partition=normal

srun python /data/ch4/sqd/mapping.py

Spuštění (execution.py a execution.sh)

Toto je jediná fáze, ve které se používá kvantový počítač. Zde spouštíme optimalizované obvody a sbíráme vzorky měření.

Skript execution.py načte optimalizovaný soubor isa_circuits.qpy, poté inicializuje primitiv SamplerV2 připojený ke kvantovému zdroji. Následně zavolá sampler.run(), aby spustil obvody na QPU pro zadaný počet výstřelů (shots=500).


...

qrmi = QRMI()
resources = qrmi.resources()
quantum_resource = resources[0]

# Sample from the circuits
noisy_sampler = Sampler(quantum_resource)
job = noisy_sampler.run(isa_circuits, shots=500)

Na konci spuštění jsou naměřené výsledky (bitové řetězce) ze všech obvodů shromážděny a sloučeny a jejich počty jsou uloženy do souboru counts.json.

Slurm skript execution.sh se od ostatních v této fázi liší. Žádá o spuštění na kvantové partici (--partition=quantum) a výslovně požaduje jeden QPU (--gres=qpu:1).

#!/bin/bash
#
#SBATCH --job-name=sqd-execution
#SBATCH --output=sqd-execution.out
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=1
#SBATCH --partition=quantum
#SBATCH --gres=qpu:1

srun python /data/ch4/sqd/execution.py

Post-processing (postprocessing.py a postprocessing.sh)

V posledním kroku se vracíme ke klasickému počítači, abychom analyzovali data z kvantového experimentu a vypočítali konečný výsledek: energii základního stavu našeho cílového systému.

Program postprocessing.py nejprve načte soubor counts.json obsahující výsledky měření. Poté rekonstruuje hamiltonián Andersonova modelu (se stejnými parametry jako v mapping.py). Naměřené bitové řetězce a definici hamiltoniánu pak předá funkci diagonalize_fermionic_hamiltonian. Tato funkce provádí jádro logiky SKQD: pomocí bitových řetězců sestaví projektovaný hamiltonián H~\tilde{H} a diagonalizuje ho, aby našla energii základního stavu.


...

def callback(results: list[SCIResult]):
result_history.append(results)
iteration = len(result_history)
print(f"Iteration {iteration}")
for i, result in enumerate(results):
print(f"\tSubsample {i}")
print(f"\t\tEnergy: {result.energy}")
print(f"\t\tSubspace dimension: {np.prod(result.sci_state.amplitudes.shape)}")

rng = np.random.default_rng(24)
result = diagonalize_fermionic_hamiltonian(
h1e,
h2e,
bit_array,
samples_per_batch=300,
norb=n_modes,
nelec=nelec,
num_batches=3,
max_iterations=10,
symmetrize_spin=True,
callback=callback,
seed=rng,
)

Na závěr se vypíše vypočítaná energie SKQD a porovná se se známou přesnou energií daného problému, čímž se zobrazí výsledná absolutní chyba výpočtu.

Poslední skript úlohy běží na klasické partici (--partition=normal), protože veškerá analýza je klasická. Pro velké podprostory může tento krok vyžadovat více klasických HPC zdrojů.

#!/bin/bash
#
#SBATCH --job-name=sqd-postprocessing
#SBATCH --output=sqd-postprocessing.out
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=1
#SBATCH --partition=normal

srun python /data/ch4/sqd/postprocessing.py

Shrnutí

A to je vše! Prošli jsme si několik konceptů a příkladů, které ti pomohou začít se správou složitých hybridních programů. Samozřejmě, toto je teprve začátek toho, co lze s kombinací kvantových a klasických HPC zdrojů dělat.

Chceš-li prozkoumat další případy použití a algoritmy, procházej naši dokumentaci a tutoriály na IBM Quantum Platform a nezapomeň navštívit zdroje sdílené v příští lekci pro více informací o algoritmech a softwaru jak pro výpočetní vědce, tak pro správce datových center.

Reference

[1] Quantum-Centric Algorithm for Sample-Based Krylov Diagonalization. https://arxiv.org/abs/2501.09702