Přeskočit na hlavní obsah

Výpočetní zdroje a správa zdrojů

Modely zdrojů a klasické zdroje

V této části poskytneme rámec pro uvažování o výpočetních prostředích, který lze uplatnit jak na notebook, tak po rozšíření i na superpočítače. Na konci této části budeš rozumět základním komponentám výpočetního prostředí a tomu, jak spolu souvisejí. To vše popisuje Iskandar Sitdikov v následujícím videu.

Model zdrojů

Každé klasické výpočetní prostředí je tvořeno několika vzájemně provázanými zdroji, které spolupracují, aby umožnily efektivní běh aplikací. Mezi klíčové zdroje obvykle patří:

  • CPU (Central Processing Unit, procesor): CPU je hlavní výpočetní jednotka, která interpretuje a vykonává instrukce programů. Provádí logické, aritmetické a řídicí operace a v podstatě funguje jako „mozek" systému.

  • Cache CPU (L1, L2, L3): Jedná se o nejrychlejší paměť v systému, zabudovanou přímo do jádra CPU nebo v jeho těsné blízkosti. Ukládá malé části dat a instrukcí, které CPU okamžitě potřebuje. Jednotlivé úrovně (L1, L2, L3) představují kompromis: L1 je nejmenší a nejrychlejší, zatímco L3 je největší a nejpomalejší, ale stále řádově rychlejší než RAM.

  • RAM (Random Access Memory, operační paměť): Energeticky závislá paměť, která poskytuje rozsáhlé dočasné úložiště pro instrukce programů a aktivně používaná data. Zajišťuje, že CPU může rychle přistupovat k informacím, které potřebuje během vykonávání, aniž by se neustále spoléhalo na pomalejší úložná zařízení.

  • Úložiště (lokální i síťové): Úložiště uchovává data a software i tehdy, když je systém vypnutý, a poskytuje dlouhodobou perzistenci pro velké datové sady a aplikace. Ve vysoce výkonných výpočtech musí úložná řešení zvládat obrovská množství vědeckých nebo analytických dat rychle a spolehlivě. Lokální úložiště zahrnuje SSD disky a HDD disky, přičemž SSD jsou upřednostňovány pro nižší latenci a vyšší propustnost. Pro práci s daty velkého rozsahu umožňují paralelní souborové systémy, sdílená síťová úložiště a objektově založené systémy rychlý přístup z mnoha výpočetních uzlů, zatímco cloudová a archivní úrovně úložišť podporují dlouhodobé uchovávání a škálovatelnost.

  • GPU (Graphics Processing Unit, grafický procesor): Ačkoliv byly původně navrženy pro vykreslování grafiky, moderní GPU jsou výkonné paralelní procesory. Široce se používají pro úlohy, které vyžadují mnoho současných výpočtů, jako je hluboké učení, fyzikální simulace a analýza velkých dat. Je důležité poznamenat, že GPU nenahrazují CPU; CPU řídí vyšší logiku programu a GPU urychlují vysoce paralelní kroky.

  • Spojení/sběrnice: Jedná se o komunikační cesty, které propojují CPU, paměť, úložiště a periferie. Sběrnice umožňují přenos dat a koordinaci mezi částmi systému a zajišťují plynulou komunikaci v rámci celého výpočetního prostředí. V HPC systémech jsou komponenty jako CPU, GPU a úložná zařízení propojeny vysokorychlostními propojeními, která umožňují rychlou výměnu dat. GPU se obvykle připojují k systému prostřednictvím PCIe, standardního rozhraní s několika datovými linkami pro efektivní komunikaci. Pro vyšší výkon poskytuje NVLink přímé spojení s vysokou šířkou pásma mezi GPU nebo mezi GPU a CPU, čímž snižuje latenci a urychluje paralelní výpočetní zátěž.

  • Souborový systém: Souborový systém organizuje data na úložných zařízeních. Poskytuje strukturu pro ukládání, načítání a správu souborů a umožňuje programům i uživatelům přistupovat k informacím konzistentním a logickým způsobem.

Každý typ zdroje má své vlastní výkonnostní jednotky měření. Například CPU se obvykle měří podle „jader" a „taktovací frekvence". Při nákupu notebooku jeho specifikace obvykle uvádějí počet jader. Podobný koncept platí i pro výpočetní uzly v datovém centru, kde je každý uzel spojen s konkrétním počtem jader. Výpočetní prostředí, která zahrnují více typů zdrojů (CPU, GPU, dokonce QPU), se označují jako heterogenní výpočetní prostředí. Tato uspořádání zvládají různorodou pracovní zátěž efektivněji díky využití silných stránek jednotlivých typů procesorů. Například CPU se používají pro obecné úlohy a GPU pro paralelní zpracování. V kontextu správy zdrojů a plánování – zejména u heterogenních výpočetních prostředí – mohou být kromě zde popsaných jednotek vyžadovány další jednotky měření.

U paměti je jednotkou měření Mega/Giga/Terabajt.

U grafických karet a dalších akcelerátorů závisí jednotka měření na kontextu. Zatímco jejich skutečná výpočetní schopnost se měří jemnějšími metrikami – počtem výpočetních jader, velikostí paměti a šířkou paměťového pásma –, na vysoké úrovni diskuse o zdrojích clusteru nebo plánování úloh lze GPU a podobné akcelerátory kvantifikovat na úrovni zařízení podle počtu přidělených celých zařízení (například tři GPU).

Síť/konektivita/sběrnice jsou zásadním aspektem každé výpočetní infrastruktury, protože určují, jak rychle se data přenášejí mezi výpočetními komponentami. Od LPU do cache CPU, do RAM, do PCI karet, do zařízení připojených k síti; všechno je komunikace a je klíčové mít o ní přesný mentální model, aby se daly navrhovat vysoce optimalizované algoritmy pro HPC.

Obrázek znázorňující, že každý výpočetní uzel může obsahovat mnoho typů zdrojů.

Škálování klasických zdrojů

Vysoce výkonné výpočty (HPC) zahrnují škálování těchto klasických zdrojů s cílem dosáhnout rychlejších časů zpracování nebo zvýšit množství dat, která lze současně zpracovávat (například pro zvětšení velikosti prostorů řešení, které lze prohledávat). Toho lze dosáhnout prostřednictvím:

  • Vertikální škálování: Zvyšování výkonu jednotlivých zdrojů, například použitím výkonnějšího CPU nebo přidáním více paměti v rámci jednoho fyzického uzlu, kde uzel je jednotka výpočetního clusteru, která zahrnuje více výpočetních zdrojů.

  • Horizontální škálování: Přidávání více zdrojů, například více CPU nebo GPU, které spolupracují na jednom uzlu nebo, častěji, na více uzlech, čímž se umožňují distribuované výpočty.

Obrázek znázorňující vertikální škálování zdrojů prostřednictvím umístění více zdrojů, jako je paměť, do jednoho uzlu a horizontální škálování prostřednictvím zvýšení počtu propojených uzlů zahrnujících různé typy zdrojů.

Některé koncepty škálování z této části budou uplatnitelné v další části o kvantových výpočetních zdrojích. Některé další aspekty kvantových zdrojů budou kvantifikovány novými způsoby.

Ověř si své znalosti

Použij výše uvedené popisy k odvození některých výhod a nevýhod různých přístupů ke škálování: vertikálního a horizontálního?

Odpověď:

Správných odpovědí může být mnoho. Vertikální škálování je často jednodušší, zejména pokud máš předvídatelné zátěže, které budou potřebovat pevné množství zdrojů. Vertikální škálování však může být nákladnější na upgrade, protože základní výpočetní jednotku nelze tak snadno rozdělit jako u horizontálního škálování. Horizontální škálování je složitější na správu a někdy se vyskytují potíže nebo latence související s propojením mezi uzly. Je však mnohem lépe přizpůsobivé měnícím se požadavkům na zdroje a je modulární, když je potřeba provést upgrade.

Nový typ zdroje: QPU (Quantum Processing Unit)

V této části představíme nový typ zdroje – kvantový zdroj – a prozkoumáme jeho definici, měrné jednotky a propojení s klasickou infrastrukturou.

Definice QPU

  • Kvantová výpočetní jednotka (QPU): QPU zahrnuje veškerý hardware odpovědný za přijetí spustitelné sady kvantových instrukcí, neboli kvantového obvodu, a vrácení přesné odpovědi.

To znamená, že QPU zahrnuje jeden nebo více kvantových čipů (např. Heron), několik dalších komponent v rozpouštěcím chladiči, jako jsou kvantové zesilovače, řídicí elektronika a klasický výpočetní systém potřebný pro úkoly, jako je uchovávání instrukcí a průběhů signálů v paměti, akumulace výsledků a v budoucnu dekódování korekce chyb. Ačkoli je k provádění těchto úkolů nutný rozpouštěcí chladič, vylučujeme ho z této definice, abychom umožnili případ více QPU v jednom chladiči.

  • Kvantový počítač: Kvantový počítač se skládá z QPU plus klasického výpočetního systému, který hostí runtime prostředí.

  • Runtime prostředí: Kombinace hardwaru a softwaru, která umožňuje spuštění programu.

Vrstvy v kvantových obvodech

Jak v klasickém, tak v kvantovém výpočetnictví mohou být procesy prováděny sekvenčně nebo paralelně. Protože qubity mají bohatý stavový prostor v porovnání s klasickými bity, někdy má smysl provádět na qubitu více jednoqubitových hradel za sebou (jako hradlo R_x následované hradlem R_z). Vzhledem k tomu, že provázanost mezi qubity je pro kvantové výpočetnictví zásadní, je také běžné, že kvantový obvod obsahuje sadu provazujících hradel působících napříč mnoha qubity. Tyto a další faktory způsobují, že je běžné identifikovat procesy, které lze provádět paralelně na úrovni jednotlivých hradlových operací v kvantovém obvodu. V klasickém výpočetnictví je možná i bitová paralelizace, ale méně často se uvažuje na úrovni hradel; běžnější je odkazovat na paralelní a sekvenční procesy ve větším měřítku.

V kvantovém výpočetnictví se hovoří o „vrstvě" hradel, která mohou být všechna prováděna současně. V mnoha aplikacích je užitečné provést sadu rotací na všech qubitech a poté provazující hradla mezi páry qubitů. V těchto kontextech se hovoří o „rotační vrstvě" (vrstva hradel jako R_x, R-y a/nebo R_z) a „provazující vrstvě" (například s hradly CNOT). Počet vrstev v obvodu je „hloubka obvodu", což je důležitá míra, protože větší hloubka znamená více vrstev hromadícího se šumu a chyb.

Vizuálně může být obtížné identifikovat vrstvy hradel, když vrstvy nejsou zarovnány pomocí bariér. V Qiskitu slouží bariéra jako instrukce v kvantových obvodech, která funguje jako vizuální oddělovač a omezení během kompilace. Jak při kreslení obvodu, tak při jeho provádění nebudou žádná hradla přesunuta přes bariéru. To může být důležité v kontextech, jako je dynamické rozpojování, ve kterém záměrně implementuješ hradla, která se zjednoduší na identitu, abys potlačil určité typy chyb. Více o dynamickém rozpojování viz tento průvodce. Pro vizuální efekt bariér porovnej tyto dva obrázky stejného obvodu, první bez bariér a druhý s bariérami pro vynucení zarovnání vrstev.

Čtyřqubitový kvantový obvod bez bariér pro vynucení zarovnání vrstev; hradla se jeví poněkud náhodně zarovnaná.

Čtyřqubitový kvantový obvod s bariérami pro vynucení zarovnání vrstev. Počítání vrstev je nyní mnohem snazší.

Jedná se o stejný obvod, který má stejný počet vrstev. Ale ve druhém zarovnání umožňuje snadno vidět, že obvod má:

  • Dvě rotační vrstvy: jednu kolem osy Y o π/5\pi/5, jednu kolem osy Z o π/4\pi/4.
  • Tři provazující vrstvy. Všimni si, že každý CNOT lze označit za samostatnou „vrstvu", protože CNOTy nelze přeuspořádat tak, aby byly paralelní, aniž by se změnila logická operace.
  • Další dvě rotační vrstvy: jednu kolem osy Y o π/3\pi/3, jednu kolem osy Z o π/2\pi/2.
  • Další dvě provazující vrstvy. Všimni si, že tentokrát byla první vrstva o něco více paralelizována než v první sadě provazujících vrstev.

Hloubka každého obvodu je 9.

Měrné jednotky

V kvantovém výpočetnictví se schopnosti kvantového systému obvykle posuzují pomocí tří klíčových výkonnostních metrik: rozsah, kvalita a rychlost. Tyto metriky popisují nejen výpočetní potenciál kvantového zařízení, ale také určují, jak jsou prostředky spravovány a plánovány v praktických aplikacích.

  • Rozsah (scale) označuje počet kvantových bitů (qubitů) v systému a vyjadřuje, kolik kvantové informace zařízení dokáže udržet. Z hlediska správy zdrojů to přímo ovlivňuje šířku obvodu — počet qubitů potřebných ke spuštění dané kvantové úlohy. Kvantová jednotka musí mít dostatek qubitů, aby zvládla přidělenou úlohu.

  • Kvalita (quality) popisuje, jak přesně jsou kvantové operace prováděny. Často se kvantifikuje pomocí věrnosti vrstvy (layer fidelity), která měří přesnost provádění celé vrstvy kvantových hradel napříč všemi qubity. Z plánovacího hlediska umožňuje vyšší věrnost spolehlivě provádět hlubší obvody, což ovlivňuje potřebu zmírňování chyb nebo dekompozice úloh.

  • Rychlost (speed) se měří v CLOPS (Circuit Layer Operations Per Second), což udává, kolik vrstev kvantových operací dokáže systém provést za sekundu. To ovlivňuje propustnost a latenci při provádění úloh a pomáhá určit, jak rychle může kvantová jednotka dokončit danou pracovní zátěž. Tato rychlost je obzvlášť důležitá u kvantového počítače, protože qubity trpí šumem a chybami ve větší míře než jejich klasické protějšky. Doba, po kterou si dokážou užitečným způsobem uchovat svou kvantovou informaci, se popisuje jako doba koherence (coherence time), typicky řádově 200–300 μs\mu\text{s} pro procesory Heron r3.

Rozdíly mezi kvantovými a klasickými metrikami

Můžeš si představit CLOPS jako volnou kvantovou analogii FLOPS, ale s několika klíčovými rozdíly. CLOPS měří rychlost, jakou kvantový procesor dokáže provádět kvantové obvody, konkrétně vrstvy operací v rámci obvodů, včetně kvantových i potřebných klasických výpočtů spojených s během obvodů. Byla vyvinuta společností IBM Quantum jako komplexní míra rychlosti provádění kvantového počítače, pokrývající kvantovou dobu provádění a klasické zpracování v reálném čase potřebné pro aktualizace obvodů, na rozdíl od FLOPS, která čistě měří kapacitu aritmetiky s plovoucí desetinnou čárkou v klasických procesorech.

CLOPS poskytuje měřitelnou výkonnostní metriku, kterou lze porovnávat na existujícím hardwaru. IBM Quantum použila CLOPS k benchmarkování různých kvantových procesorů a hodnoty lze nalézt na stránce Výpočetní zdroje na IBM Quantum Platform. Hodnoty CLOPS závisí na schopnostech hardwaru, rychlostech hradel, rychlosti klasického zpracování a jejich integraci.

Počet qubitů je pro daný QPU pevné číslo. CLOPS a kvalita závisí na pravidelné kalibraci a údržbě a mohou se v čase mírně lišit, a to i pro jeden QPU.

Společně tyto metriky určují, jak jsou kvantové systémy přidělovány a plánovány. V mnoha případech je celý kvantový systém považován za jedinou jednotku. Když však úloha přesáhne kapacitu jedné jednotky — ať už co do počtu qubitů, hloubky obvodu, nebo rychlosti provádění — lze použít techniky jako stříhání/spojování obvodů (circuit cutting/knitting). Stříhání obvodů je proces, kdy se velké kvantové úlohy rozkládají na menší, zvládnutelné dílčí úlohy, které lze rozdělit mezi více kvantových čipů, což umožňuje škálovatelné kvantové výpočty navzdory hardwarovým omezením. Spojování obvodů (circuit knitting) označuje proces, který následuje po stříhání obvodů — krok klasického následného zpracování, který „splétá" nebo kombinuje výsledky z menších dílčích obvodů zpět dohromady.

Kvantové počítače nemají tradiční paměť ve smyslu trvalého, adresovatelného úložiště, jako je RAM nebo paměť GPU. Klasické výpočetní zdroje mají diskrétní bity uložené v paměti, což umožňuje data ukládat, načítat a opakovaně používat během výpočtu. Kvantové zdroje používají qubity, které neukládají paměť v klasickém smyslu. Místo toho qubity existují v kvantových stavech, které představují superpozice 0 a 1 současně, čímž umožňují exponenciální paralelismus ve stavovém prostoru. Stavy qubitů jsou však křehké a nelze je klonovat ani deterministicky číst v mezikrocích bez kolapsu kvantového stavu, takže trvalé chování podobné paměti během výpočtu neexistuje. Qubity musí být udržovány v koherentním stavu po celou dobu provádění a „pamětí" je v podstatě sám kvantový stav. Klasická paměť může být použita pouze vedle kvantového procesoru, ne jako vnitřní kvantová paměť. To má významné důsledky: klasické výpočetní zdroje mohou volně opakovaně používat a ukládat mezivýsledky; kvantové zdroje to nemohou dělat bez měření, která narušují výpočet.

Konektivita ke klasické infrastruktuře

QPU mohou být připojeny ke klasické infrastruktuře prostřednictvím sítí a různých rozhraní pro programování aplikací (API), která vývojářům softwaru umožňují s QPU interagovat programově. Tato API jsou obvykle skryta za sadami pro vývoj softwaru (SDK) a knihovnami (jako Qiskit) a vystavena výpočetním vědcům ve formě programovacích abstrakcí (jako Qiskit Primitives, o kterých budeme mluvit v Kapitole 3: programovací modely).

Stojí za to rozlišovat mezi těsnou a volnou integrací kvantových a klasických zdrojů. V současnosti nejsou QPU na stejném uzlu jako klasické výpočetní zdroje. Ve skutečnosti nejsou QPU aktuálně připojeny přes PCIe, ale přes síť. To by se v budoucnu mohlo změnit, ale existují technické výzvy související s podmínkami prostředí optimálními pro QPU a klasické výpočetní zdroje.

Škálování kvantových zdrojů

Škálování kvantových zdrojů lze také kategorizovat na vertikální a horizontální.

  • Vertikální škálování by znamenalo zvýšení počtu qubitů na čipu nebo zlepšení věrnosti zařízení.
  • Horizontální škálování by znamenalo propojení čipů pomocí couplerů nebo klasického propojení.

Obrázek znázorňující vertikální škálování kvantových zdrojů jako více qubitů na čipu a horizontální škálování kvantových zdrojů jako propojení mnoha čipů dohromady pomocí couplerů.

Ověř si své znalosti

Jaké jsou kvantové analogie klasických (a) bitů informace a (b) rychlosti procesoru?

Odpověď:

(a) Kvantové bity neboli qubity — jednotky informace, které na rozdíl od svých klasických protějšků (jež mohou nabývat pouze stavu 0 nebo 1) mohou být v superpozici 0 a 1 současně.

(b) Operace vrstev obvodu za sekundu neboli CLOPS — počet sekvenčních operací, které QPU může provést každou sekundu, včetně určité interakce s klasickými výpočetními zdroji, jako je načítání parametrů z obvodu.

Správa zdrojů

HPC i kvantové zdroje jsou zároveň vzácné i složité; je třeba s nimi zacházet pečlivě. V této části vysvětlíme, jak spravovat zdroje pro uživatelské programy. Správa zdrojů ve výpočetní infrastruktuře označuje proces (1) plánování, (2) přidělování a (3) řízení/správy využití výpočetních zdrojů, jako jsou CPU, paměť, úložiště a síťová šířka pásma, s cílem zajistit efektivní a účelné využití zdrojů.

Plánování – odhadování zdrojů

Každý program spotřebovává zdroje a odhadování potřebných zdrojů je zásadní pro jejich efektivní správu. To zahrnuje odhadování množství CPU, paměti a dalších zdrojů potřebných ke spuštění programu. Totéž platí pro kvantové zdroje. Kvantové zdroje však existují na zcela jiné škále. Kvantové procesory IBM Quantum® Heron r3 mají 156 qubitů, ve srovnání s mnoha miliardami klasických bitů v běžném notebooku. Důležitými faktory jsou také čas a náklady. V současnosti nabízí IBM Quantum bezplatný plán, Open Plan, který uživatelům umožňuje prozkoumávat kvantové výpočty s 10 minutami času QPU za měsíc. Některé výzkumné organizace potřebují tolik času QPU, že mají vyhrazený kvantový počítač IBM přímo u sebe.

Jedním z kroků při odhadování zdrojů, který je specifický pro kvantové výpočty, je hloubka obvodu. Jak bylo zmíněno dříve, každá kvantová hradla a každá prodleva mezi operacemi přinášejí šum a určitou pravděpodobnost chyby. Čím hlubší je kvantový obvod, tím větší je šum. Zde jsou dvě jemnosti: dvoukubitová hradla mají mnohem vyšší míru chyb než jednokubitová hradla, takže jednokubitovou hloubku lze často zanedbat. Navíc ne všechny qubity na kvantovém čipu jsou přímo propojeny. Někdy je třeba přesouvat informace z qubitu na qubit, aby bylo možné provést požadované provázání, a tento proces přesouvání sám o sobě vyžaduje dvoukubitová hradla. Toto přesouvání je řešeno procesem zvaným „transpilace", což je složitý proces, který slouží i jiným účelům; podrobněji je popsán v další lekci. Relevantní omezující veličinou je tedy transpilovaná dvoukubitová hloubka. Přesná maximální hloubka, při níž lze dosáhnout výsledků s vysokou věrností, závisí na obvodu. Díky moderním technikám zmírňování chyb však lze dosáhnout výsledků s vysokou věrností při transpilovaných dvoukubitových hloubkách 80 a více.

Přidělování – plánování úloh

Plánování úloh je proces přidělování zdrojů programům a řízení jejich spuštění. Zahrnuje:

  • Odesílání úloh: Proces, při kterém uživatel odesílá požadavek (úlohu) do HPC systému a specifikuje, jaká výpočetní práce a zdroje jsou potřebné ke spuštění.
  • Přidělování zdrojů: Přiřazení dostupných zdrojů HPC systému (jako jsou uzly, CPU, paměť) odeslané úloze na základě jejích požadavků.
  • Spuštění úlohy: Skutečné provádění výpočetních úkolů definovaných úlohou na přidělených HPC zdrojích.

Pro kvantové počítače existují analogy všech těchto procesů.

  • Úlohy jsou odesílány uživatelem s využitím Qiskit Runtime, typicky pomocí primitiva Qiskit Runtime, jako je Sampler, Estimator nebo jiné.
  • Uživatel vybírá ze seznamu backendů, ke kterým má přístup. Úplný seznam dostupných backendů lze zobrazit na stránce Výpočetní zdroje na IBM Quantum Platform. Běžně se jednoduše používá nejméně vytížený kvantový počítač. Existují však případy, kdy může být důležité použít konkrétní počítač z důvodu uspořádání zařízení, replikace předchozích výpočtů apod.
  • Spuštění kvantových úloh je podobné případu HPC. Ačkoli byly některé rozdíly již popsány, několik z nich stojí za zopakování. QPU v současnosti obvykle nesídlí na stejném uzlu jako klasické výpočetní zdroje, ale jsou propojeny přes síť. To může mít dopady na plánování úloh. Kvantové počítače navíc mohou mít značné časy front, které se mění, což ztěžuje přesné řízení časování. Tato situace může být u vyhrazených systémů odlišná; záleží na interní správě kvantového počítače.

Řízení/Správa – správa pracovní zátěže

Správa pracovní zátěže, známá také jako orchestrace, je proces řízení více programů a jejich požadavků na zdroje. Zahrnuje:

  • Zajišťování zdrojů: Proces přípravy a zpřístupnění HPC zdrojů pro použití úlohami, včetně nastavení hardwaru a softwaru. Jak uvidíme později, QPU jsou výpočetní zdroje, které lze zajišťovat podobně jako klasické HPC zdroje, s výhradami z předchozí části.
  • Plánování úloh: Činnost plánovacího softwaru při rozhodování, které úlohy se spustí, kdy a na kterých zdrojích, s řízením priorit a front pro efektivní využití HPC systému. Ačkoli toto obecné tvrzení platí i pro kvantové zdroje, může být kontrola nad časováním menší než u jiných zdrojů.

Obrázek zobrazující pracovní zátěže (znázorněné jako boxy) organizované a uspořádané tak, aby optimálně zapadaly do dvourozměrné mřížky, kde jedna osa představuje čas a druhá zdroje. Příklad:

Uvažujme dobře známý úkol jako kontext pro pochopení správy zdrojů: hledání prvočísel dělitelů velkých čísel. Předpokládejme dále, že použitý algoritmus se spoléhá na hrubou sílu a kontroluje každého potenciálního dělitele. Ačkoli to často není nejefektivnější metoda, je snadné pochopit, jak by mohla být pracovní zátěž řízena.

Plánování – odhadování zdrojů

  • Odhadni, kolik času CPU a paměti může prvočíselná faktorizace vyžadovat.
  • Naplánuj paralelizaci svého úkolu – kolik CPU/jader použiješ?

Přidělování – plánování úloh

  • Po odeslání úlohy přiřadí plánovač jádra CPU a paměť úloze prvočíselné faktorizace. Například může přiřadit všechny potenciální dělitele končící číslicemi 1, 3, 7, 9 jednomu ze čtyř jader.
  • Spuštění úlohy: Algoritmus prvočíselné faktorizace běží, provádí dělení nebo jiné kroky faktorizace na přidělených zdrojích, dokud úloha nedokončí.

Řízení/Správa – správa pracovní zátěže

  • Systém orchestruje pořadí a časování úloh prvočíselné faktorizace za účelem optimalizace propustnosti.
  • Nejjednodušší případ, který si lze představit, je, že jedno z jader najde hledaný prvočíselný dělitel. To by mělo zastavit výpočet na ostatních jádrech, aby mohla být použita pro další úlohu.

Prostředí pro vysokovýkonné výpočty používají speciální software k provádění těchto kroků a správě zdrojů. V další části se dozvíme o široce používaném systému správy zdrojů: Slurm.

Příklad s kvantovými zdroji:

Pracovní postup, který bude předmětem dalších lekcí v tomto kurzu, je určování chemických základních stavů a energií pomocí vzorkové kvantové diagonalizace (SQD). Toto je podrobněji popsáno v lekci 4 a můžeš také navštívit tento kurz o SQD a související metody na IBM Quantum Learning. Pro tuto diskusi stačí vědět, že pracovní postup zahrnuje:

  • Přípravu kvantového obvodu
  • Měření kvantového obvodu
  • Využití výsledků měření k promítnutí problému do užitečného podprostoru
  • Diagonalizaci menší, promítnuté matice pomocí klasických výpočetních zdrojů
  • Iteraci, buď k zajištění vlastní konzistence prostřednictvím úvah jako je zachování náboje, a případné iterace kvantového obvodu, pokud má variační parametry.

Plánování – odhadování zdrojů

  • Namapuj elektronické orbitaly na qubity a urči potřebný počet qubitů.
  • Zkombinuj namapovaný Hamiltonián systému a (případně variační) stav do kvantového obvodu a zkontroluj transpilovanou dvoukubitovou hloubku. Ujisti se, že je přiměřená.
  • Odhadni velikost podprostoru, do něhož budeš promítat; z toho odhadni, kolik času CPU a paměti může diagonalizace vyžadovat.
  • Naplánuj paralelizaci svého úkolu – kolik CPU/jader použiješ?

Přidělování – plánování úloh

  • Uživatel vybere QPU; proces transpilace automaticky mapuje qubity ve tvém abstraktním kvantovém obvodu na fyzické qubity na QPU. To je důležité mimo jiné proto, že abstraktní obvod může předpokládat přímé propojení, které na čipu neexistuje.
  • Po odeslání úlohy prostřednictvím Qiskit Runtime úloha vstupuje do fronty pro vybranou QPU. Uživatel nemá kontrolu nad časem čekání ve frontě, ačkoli to může být u vyhrazených systémů odlišné.
  • Klasické výpočetní zdroje čekají na kvantové výsledky.
  • Úloha diagonalizace je odeslána do HPC zdrojů; po odeslání úlohy přiřadí plánovač jádra CPU a paměť úloze diagonalizace.
  • Spuštění úlohy: Algoritmus diagonalizace běží a diagonalizuje menší promítnutou matici, dokud úloha nedokončí.

Řízení/Správa – správa pracovní zátěže

  • Systém orchestruje pořadí a časování kvantových a klasických kroků v celém procesu. Například po diagonalizaci promítnuté matice a získání energie základního stavu se může pracovní postup v závislosti na kritériích konvergence vrátit zpět k novému kvantovému obvodu (s novým variačním parametrem).
  • Jakmile jsou kritéria konvergence pro energii základního stavu splněna, výpočet na všech jádrech se zastaví.

Prostředí pro vysokovýkonné výpočty používají speciální software k provádění těchto kroků a správě zdrojů. V další části se dozvíme o široce používaném systému správy zdrojů: Slurm. Je důležité poznamenat, že Slurm nemá nástroje pro všechny výše popsané kroky. Slurm neposkytuje podporu pro plánování úloh ani podrobnou správu pracovní zátěže, jako je komunikace mezi komponentami pracovní zátěže. To odpovídá současnému stavu kvantových výpočtů v HPC, kdy jsou QPU typicky přístupné přes síť.

Ověř si své znalosti

Předpokládejme, že se pokoušíš prohledat neseřazenou databázi, abys nalezl(a) prvek, který budeme nazývat „cíl". U každé z následujících akcí uveď, které fázi správy zdrojů odpovídá: (a) Odhadování velikosti databáze a doby potřebné ke kontrole každého prvku (b) Zajištění toho, aby nalezení cíle na jednom GPU zastavilo proces na ostatních GPU a uvolnilo je pro další problém. (c) Rozdělení prohledávaného prostoru na oblasti pro každou z tvých (řekněme 10) GPU

Odpověď:

(a) Plánování (b) Řízení/správa (c) Přidělování/plánování úloh,

Software: Slurm

V této části využijeme koncepty naučené v této kapitole k procvičení práce s populárním systémem pro správu zdrojů – Slurm.

Úvod do Slurmu

Slurm je open-source systém pro správu zdrojů hojně využívaný ve vysoce výkonných výpočetních prostředích. Poskytuje komplexní sadu nástrojů pro správu zdrojů, plánování úloh a sledování výkonu systému.

Probereme základy používání Slurmu, včetně:

  • Odesílání úloh
  • Alokace zdrojů
  • Sledování úloh

Jelikož je prakticky nemožné poskytnout HPC zdroje každému studentovi tohoto kurzu, trochu podvedeme a dáme ti k dispozici repozitář s Docker obrazy, které napodobují skutečný HPC cluster se Slurm, ale v menším měřítku. Pomůže nám to procvičit naučené koncepty v bezpečném a reprodukovatelném prostředí.

Vezmi na vědomí, že momentálně jsou všechny kvantové i klasické zdroje alokovány po celou dobu experimentu. V současné době neexistuje prokládaná alokace smíšených zdrojů. Poslední výhrada je, že i po spuštění úlohy nebude kvantový systém přímo řízen tak, jak by mohl očekávat zkušený uživatel HPC. Úloha se spustí na libovolném x86 uzlu, který vykonává službu Qiskit Runtime, a tato služba se pak připojuje k dalšímu plánovači, nad nímž uživatel nemá přímou kontrolu. Tento pracovní postup a s ním spojené problémy mohou být známé uživatelům HPC, kteří měli ranou zkušenost se získáváním výhradního přístupu k GPU uzlům (původní použití gres).

Instrukce k instalaci a přehled nastavení

Abys mohl/a procvičovat kombinování kvantových a HPC zdrojů, budeš potřebovat přístup k reálnému HPC prostředí nebo si budeš muset simulovat HPC prostředí na svém lokálním počítači. Průvodce instalací pro lokální nastavení pomocí Dockeru najdeš v tomto repozitáři. Průvodce odkazuje na podporu pro nastavení účtu IBM Cloud® a instalaci pluginu SPANK pro QRMI. Ve stejném repozitáři se nachází také několik Python souborů pro otestování tvého prostředí.

Po dokončení instalace použijme níže uvedený příkaz ke kontrole výpočetních zdrojů Slurmu v tvém terminálu. Pokud byla instalace úspěšná, měl/a bys být schopen/schopna potvrdit celkem tři virtuální uzly.

$ sinfo

PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
normal up 5-00:00:00 2 idle c[1-2]
quantum* up infinite 1 idle q1
$ scontrol show node

NodeNAME=q1 Arch=x86_64 CoresPerSocket=1
CPUAlloc=0 CPUTot=1 CPULoad=0.34
AvailableFeatures=(null)
ActiveFeatures=(null)
Gres=qpu:1
NodeAddr=q1 NodeHostName=q1 Version=21.08.6
...

Máme dvě partitions neboli skupiny uzlů: normal a quantum. Partition normal se skládá z uzlů, které mají přístup pouze ke klasickým zdrojům. Partition quantum má přístup ke kvantovým zdrojům. Podrobnosti o každém uzlu zobrazíš spuštěním příkazu scontrol show nodes.

Spuštění jednoduchého příkladu hello world v Slurmu

Nejprve si spustíme jednoduchý klasický příklad hello world pomocí Slurmu. Pro příklady budeme používat Python. Vytvoříme soubor hello_world.py, který je samovysvětlující.

$ vim hello_world.py

import time
time.sleep(10)
print("Hello, World!")
~

Nyní musíme správci zdrojů sdělit, jaké zdroje potřebujeme ke spuštění tohoto programu. Slurm poskytuje způsob, jak specifikovat veškerá metadata pro úlohu pomocí skriptu pro odeslání, což je jen shellový skript se specifickými anotacemi Slurmu. Tyto anotace ti umožňují specifikovat požadavky na zdroje, parametry plánování a další. Vytvořme si k tomu shellový skript hello_world.sh.

$ vim hello_world.sh

#SBATCH --job-name=hello-world
#SBATCH --output=hello-world.out
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=1
#SBATCH --partition=normal

srun hello_world.py
~

Pojďme si projít soubor pro odeslání úlohy a podívat se, co se zde děje.

Direktivy #SBATCH jsou specifické anotace, které sdělují, jaké máme požadavky pro provedení programu. Zde můžeš specifikovat množství zdrojů – počet uzlů, počet úloh na uzel, počet úloh a CPU na uzel a úlohu – a další volby, jako je název výstupního souboru. Úplný seznam voleb je k dispozici v dokumentaci pro Slurm.

Teď je čas spustit naši úlohu v Slurmu. sbatch je příkaz, který přijímá soubor pro odeslání a zařazuje úlohu do fronty pro spuštění v Slurmu.

$ sbatch hello_world.sh

Submitted batch job 63

Zkontrolujme stav našeho programu pomocí příkazu squeue.

$ squeue

# JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
# 1 main hello_world root R 0:01 1 c1

Jakmile úloha skončí, můžeme zkontrolovat výsledek pohledem na výstupní soubor.

$ cat hello_world_logs.txt
Hello, World!

Ověř si své znalosti

Na základě níže uvedeného shellového skriptu pro Slurm, jaký je (a) název úlohy, (b) název souboru Pythonu a (c) název výstupního souboru? (d) A konečně, mohla by tato úloha využívat kvantové zdroje, nebo ne?

vim hello_learner.sh

#SBATCH --job-name=hello-learner
#SBATCH --output=hello-learner.out
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=1
#SBATCH --partition=quantum

srun hello_learner_qm.py

Odpověď:

(a) hello-learner (b) hello-learner_qm.py (c) hello-learner.out (d) Ano, mohla. Používá kvantovou partici.

Spuštění jednoduchého Qiskit hello world příkladu ve Slurmu

Dále si zkusíme použít i kvantové prostředky. Vytvořme a spusťme jednoduchý program „Hello, Qiskit", který používá kvantové prostředky.

$ vim hello_qiskit.py

# hello_qiskit.py
from qiskit import QuantumCircuit
from qiskit.quantum_info import SparsePauliOp
from qiskit.transpiler import generate_preset_pass_manager
from qiskit_ibm_runtime import EstimatorV2 as Estimator

# Create a new circuit with two qubits
qc = QuantumCircuit(2)

# Add a Hadamard gate to qubit 0
qc.h(0)

# Perform a controlled-X gate on qubit 1, controlled by qubit 0
qc.cx(0, 1)

observables_labels = ["IZ", "IX", "ZI", "XI", "ZZ", "XX"]
observables = [SparsePauliOp(label) for label in observables_labels]

# switch to QRMI service
from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService()

backend = service.backend("...")

# Convert to an ISA circuit and layout-mapped observables.
pm = generate_preset_pass_manager(backend=backend, optimization_level=1)
isa_circuit = pm.run(qc)

# Construct the Estimator instance.

estimator = Estimator(mode=backend)
estimator.options.resilience_level = 1
estimator.options.default_shots = 5000

mapped_observables = [
observable.apply_layout(isa_circuit.layout) for observable in observables
]

# One pub, with one circuit to run against five different observables.
job = estimator.run([(isa_circuit, mapped_observables)])

job_result = job.result()

pub_result = job.result()[0]

print("Result", pub_result)

Zde použijeme rozhraní pro správu kvantových prostředků (QRMI), Slurm SPANK plugin pro podporu kvantových prostředků a úloh, který byl společně vyvinut firmami IBM, Pasqal, The Hartree Center a RPI. Vytvořili jsme jednoduchý pauli-2-design obvod s náhodnými počátečními hodnotami a jednoduchý pozorovatelný operátor a spustíme ho pomocí Estimatoru, abychom získali střední hodnotu. Ke spuštění opět budeme potřebovat skript pro odeslání hello_qiskit.sh, který bude mít kvantové prostředky jako požadavek.

$ vim hello_qiskit.sh

#SBATCH --job-name=hello-qiskit
#SBATCH --output=hello_qiskit.out
#SBATCH --nodes=1
#SBATCH --ntasks-per-nodes=1
#SBATCH --cpus-per-task=1
#SBATCH --partition=quantum
#SBATCH --gres=qpu:1

srun python /data/ch2/hello_qiskit/hello_qiskit.py
~

Pojďme si projít soubor pro odeslání a podívat se, co se v něm děje. Máme jednu novou volbu, kterou je gres. gres je volba Slurmu, která slouží k definování dalších výpočetních prostředků. V našem případě by tímto novým prostředkem byl náš kvantový prostředek. Protože jsme specifikovali prostředky a oddíl našeho clusteru, kde jsou kvantové prostředky k dispozici, naše Qiskit primitiva použijí tyto alokované prostředky k provedení kvantové úlohy.

Nyní je čas spustit naši úlohu ve Slurmu.

$ sbatch hello_qiskit.sh

Potom si zkontrolujeme stav našeho programu pomocí příkazu squeue.

$ squeue
# JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
# 1 main hello_qiskit root R 0:01 1 q1

Po dokončení úlohy si můžeme prohlédnout logy a výsledky.

$ cat hello_qiskit.out | grep Exp
Expectation Value: 0.8372900070983516

Shrnutí

Doposud jsme se naučili, co jsou výpočetní prostředky a jak je používat ke spouštění programů v heterogenních prostředích. Také jsme vytvořili a spustili dva jednoduché programy „Hello World": jeden pro klasický prostředek a druhý pro kvantový prostředek, a naučili jsme se vytvářet shell skripty pro odesílání úloh a prohlížení výsledků.

V následující lekci budeme na těchto znalostech o řízení prostředků stavět a aplikovat programovací modely na prostředky, které jsme získali během vykonávání úlohy.

Veškerý kód a skripty použité v této kapitole jsou pro tebe k dispozici v našem GitHub repozitáři.