Перейти до основного вмісту

Обчислювальні ресурси та управління ресурсами

Модель ресурсів та класичні ресурси

У цьому розділі ми надамо основу для розуміння обчислювальних середовищ, яку можна застосувати як до ноутбука, так і масштабувати до суперкомп'ютерів. Наприкінці цього розділу ви зрозумієте основні компоненти обчислювального середовища та їх взаємозв'язок. Усе це викладає Іскандар Сітдіков у наступному відео.

Модель ресурсів

Будь-яке класичне обчислювальне середовище побудовано з кількох взаємопов'язаних ресурсів, що працюють разом для ефективного виконання програм. Основні ресурси зазвичай включають:

  • ЦП (центральний процесор): ЦП є основним обчислювальним блоком, який інтерпретує та виконує інструкції програми. Він обробляє логічні, арифметичні та керуючі операції, по суті виступаючи "мозком" системи.

  • Кеш ЦП (L1, L2, L3): Це найшвидша пам'ять у системі, вбудована безпосередньо в ядро ЦП або розташована дуже близько до нього. Вона зберігає невеликі порції даних та інструкцій, які ЦП потребує негайно. Різні рівні (L1, L2, L3) являють собою компроміс: L1 є найменшим і найшвидшим, тоді як L3 є найбільшим і найповільнішим, але все одно на порядки швидшим за оперативну пам'ять.

  • Оперативна пам'ять (RAM): Енергозалежна пам'ять, що забезпечує великий тимчасовий простір для зберігання інструкцій програми та активно використовуваних даних. Вона гарантує, що ЦП може швидко отримати доступ до необхідної інформації під час виконання без постійної залежності від повільніших пристроїв зберігання.

  • Сховище (локальне та мережеве): Сховище зберігає дані та програмне забезпечення навіть коли система вимкнена, забезпечуючи довгострокове збереження великих наборів даних та програм. У високопродуктивних обчисленнях рішення для зберігання даних повинні обробляти величезні обсяги наукових або аналітичних даних зі швидкістю та надійністю. Локальне сховище включає твердотільні накопичувачі (SSD) та жорсткі диски (HDD), причому SSD є переважними завдяки меншій затримці та вищій пропускній здатності. Для масштабної обробки даних паралельні файлові системи, спільне мережеве сховище та об'єктні системи забезпечують швидкий доступ через безліч обчислювальних вузлів, тоді як хмарні та архівні рівні зберігання підтримують довгострокове збереження та масштабованість.

  • ГП (графічний процесор): Хоча спочатку ГП були розроблені для рендерингу графіки, сучасні ГП є потужними паралельними процесорами. Вони широко використовуються для завдань, що вимагають одночасного виконання багатьох обчислень, таких як глибоке навчання, фізичне моделювання та аналітика великих даних. Важливо зазначити, що ГП не замінюють ЦП; ЦП керують логікою програми вищого рівня, а ГП прискорюють високопаралельні кроки.

  • З'єднання/шини: Це комунікаційні канали, що з'єднують ЦП, пам'ять, сховище та периферійні пристрої. Шини забезпечують передачу даних та координацію між частинами системи, гарантуючи безперебійний зв'язок у обчислювальному середовищі. У системах HPC такі компоненти, як ЦП, ГП та пристрої зберігання, з'єднані високошвидкісними інтерконектами, що забезпечують швидкий обмін даними. ГП зазвичай підключаються до системи через PCIe — стандартний інтерфейс з кількома лініями даних для ефективного зв'язку. Для вищої продуктивності NVLink забезпечує пряме високопропускне з'єднання між ГП або між ГП та ЦП, зменшуючи затримку та прискорюючи паралельні навантаження.

  • Файлова система: Файлова система організовує дані на пристроях зберігання. Вона забезпечує структуру для зберігання, отримання та управління файлами, дозволяючи програмам і користувачам отримувати доступ до інформації послідовним і логічним чином.

Кожен тип ресурсу має власні одиниці вимірювання, пов'язані з продуктивністю. Наприклад, ЦП зазвичай вимірюються за кількістю "ядер" та "тактовою частотою". При купівлі ноутбука його характеристики зазвичай включають кількість ядер. Подібна концепція застосовується до обчислювальних вузлів у центрі обробки даних, де кожен вузол пов'язаний з певною кількістю ядер. Обчислювальні середовища, що включають кілька типів ресурсів (ЦП, ГП, навіть КПП), називаються гетерогенними обчислювальними середовищами. Ці конфігурації ефективніше обробляють різноманітні навантаження, використовуючи переваги кожного типу процесора. Наприклад, ЦП використовувалися б для загальних завдань, а ГП — для паралельної обробки. У контексті управління ресурсами та планування — особливо для гетерогенних обчислювальних середовищ — можуть знадобитися додаткові одиниці вимірювання, окрім описаних тут.

Для пам'яті одиницею вимірювання є мега/гіга/терабайти.

Для графічних карт та інших прискорювачів одиниця вимірювання залежить від контексту. Хоча їхня справжня обчислювальна здатність вимірюється дрібними метриками — кількістю обчислювальних ядер, розміром пам'яті та пропускною здатністю пам'яті — у загальних обговореннях ресурсів кластера або планування завдань ГП та подібні прискорювачі можна оцінювати на рівні пристроїв за кількістю цілих пристроїв, що призначаються (наприклад, три ГП).

Мережа/з'єднання/шини є критичним аспектом будь-якої обчислювальної інфраструктури, оскільки вони визначають швидкість передачі даних між обчислювальними компонентами. Від ЛП до кешу ЦП, до оперативної пам'яті, до карт PCI, до пристроїв, підключених до мережі — все це є комунікацією, і важливо мати точну ментальну модель цього для розробки високооптимізованих алгоритмів для HPC.

Зображення, що показує, що кожен обчислювальний вузол може включати багато типів ресурсів.

Масштабування класичних ресурсів

Високопродуктивні обчислення (HPC) передбачають масштабування цих класичних ресурсів для досягнення швидшого часу обробки або збільшення обсягу даних, які можна обробляти одночасно (наприклад, для збільшення розміру просторів розв'язків, які можна обстежувати). Це може бути досягнуто через:

  • Вертикальне масштабування: Збільшення потужності окремих ресурсів, наприклад, використання потужнішого ЦП або додавання більше пам'яті в межах одного фізичного вузла, де вузол — це одиниця обчислювального кластера, що інкапсулює кілька обчислювальних ресурсів.

  • Горизонтальне масштабування: Додавання більшої кількості ресурсів, таких як кілька ЦП або ГП, для спільної роботи на одному вузлі або, частіше, на кількох вузлах, що забезпечує розподілені обчислення.

Зображення, що показує вертикальне масштабування ресурсів шляхом розміщення більшої кількості ресурсів, як-от пам'яті, в одному вузлі, та горизонтальне масштабування шляхом збільшення кількості з'єднаних вузлів, включаючи різні типи ресурсів.

Деякі концепції масштабування з цього розділу будуть застосовні до наступного розділу про квантові обчислювальні ресурси. Інші аспекти квантових ресурсів будуть описані новими способами.

Перевірте своє розуміння

Використовуючи наведені вище описи, визначте деякі переваги та недоліки різних підходів до масштабування: вертикального та горизонтального?

Відповідь:

Може бути багато правильних відповідей. Вертикальне масштабування часто є простішим, особливо якщо у вас є передбачувані навантаження, що потребують фіксованого обсягу ресурсів. Але вертикальне масштабування може бути дорожчим при оновленні, оскільки базову одиницю обчислень не можна так легко розділити, як при горизонтальному масштабуванні. Горизонтальне масштабування є складнішим в управлінні, і іноді виникають труднощі або затримки, пов'язані зі з'єднаннями між вузлами. Але воно значно краще адаптується до змінних вимог до ресурсів і є модульним при необхідності оновлення.

Новий тип ресурсу: КПП (квантовий процесор)

У цьому розділі ми представимо новий тип ресурсу — квантовий ресурс — та розглянемо його визначення, одиниці вимірювання та підключення до класичної інфраструктури.

Визначення КПП

  • Квантовий процесор (КПП): КПП включає все обладнання, відповідальне за прийняття виконуваного набору квантових інструкцій, або квантової схеми, та повернення точної відповіді.

Це означає, що КПП включає один або кілька квантових чипів (наприклад, Heron), численні додаткові компоненти в кріостаті розведення, такі як квантові підсилювачі, керуючу електроніку та класичні обчислення, необхідні для таких завдань, як зберігання інструкцій і хвильових форм у пам'яті, накопичення результатів та майбутнє декодування для виправлення помилок. Хоча кріостат розведення необхідний для виконання цих завдань, ми виключаємо його з цього визначення, щоб допустити можливість кількох КПП в одному кріостаті.

  • Квантовий комп'ютер: Квантовий комп'ютер складається з КПП та класичних обчислень, що забезпечують середовище виконання.

  • Середовище виконання: Комбінація апаратного та програмного забезпечення, що уможливлює запуск програми.

Шари у квантових схемах

Як у класичних, так і в квантових обчисленнях процеси можуть виконуватися послідовно або паралельно. Оскільки кубіти мають багатий простір станів порівняно з класичними бітами, іноді має сенс виконувати кілька однокубітних гейтів на кубіті послідовно (наприклад, гейт R_x, за яким слідує гейт R_z). Оскільки заплутаність між кубітами є критичною для квантових обчислень, також поширено, що квантова схема містить набір заплутуючих гейтів, що діють на багато кубітів. Ці та інші фактори роблять типовим виявлення процесів, які можна виконувати паралельно на масштабі окремих гейтових операцій у квантовій схемі. У класичних обчисленнях бітовий паралелізм також можливий, але рідше розглядається на рівні гейтів; більш поширеним є посилання на паралельні та послідовні процеси у більшому масштабі.

У квантових обчисленнях говорять про "шар" гейтів, які можуть виконуватися одночасно. У багатьох застосуваннях корисно виконати набір обертань на всіх кубітах, а потім заплутуючі гейти між парами кубітів. У цих контекстах говорять про "шар обертання" (шар гейтів типу R_x, R-y та/або R_z) та "заплутуючий шар" (наприклад, з гейтами CNOT). Кількість шарів у схемі — це "глибина схеми", важливий показник, оскільки більша глибина означає більше шарів накопичуваного шуму та помилок.

Може бути складно візуально ідентифікувати шари гейтів, коли вони не вирівняні за допомогою бар'єрів. У Qiskit бар'єр слугує інструкцією в квантових схемах, що діє як візуальний роздільник та обмеження під час компіляції. Як при малюванні схеми, так і при її виконанні, жоден гейт не буде переміщений через бар'єр. Це може бути важливим у контекстах, таких як динамічна розв'язка, коли навмисно реалізуються гейти, що спрощуються до тотожності для придушення певних типів помилок. Детальніше про динамічну розв'язку див. цей посібник. Щоб побачити візуальний ефект бар'єрів, порівняйте ці два зображення однієї схеми: перше — без бар'єрів, друге — з бар'єрами для примусового вирівнювання шарів.

Чотирикубітна квантова схема без бар'єрів для примусового вирівнювання шарів; гейти виглядають дещо випадково розташованими.

Чотирикубітна квантова схема з бар'єрами для примусового вирівнювання шарів. Підраховувати шари тепер значно легше.

Це та сама схема з однаковою кількістю шарів. Але у другому випадку вирівнювання дає чітко побачити, що схема має:

  • Два шари обертання: один навколо осі Y на π/5\pi/5, один навколо осі Z на π/4\pi/4.
  • Три заплутуючі шари. Зверніть увагу, що кожен CNOT можна назвати окремим "шаром", оскільки порядок CNOT не можна змінити для паралельного виконання без зміни логічної операції.
  • Ще два шари обертання: один навколо осі Y на π/3\pi/3, один навколо осі Z на π/2\pi/2.
  • Ще два заплутуючі шари. Зверніть увагу, що цього разу перший шар був дещо більше розпаралелений, ніж у першому наборі заплутуючих шарів.

Глибина кожної схеми дорівнює 9.

Одиниці вимірювання

У квантових обчисленнях можливості квантової системи зазвичай оцінюються за трьома ключовими метриками продуктивності: масштаб, якість та швидкість. Ці метрики не лише описують обчислювальний потенціал квантового пристрою, але й визначають, як ресурси управляються та плануються у практичних застосуваннях.

  • Масштаб означає кількість квантових бітів (кубітів) у системі, що відображає обсяг квантової інформації, яку пристрій може утримувати. В управлінні ресурсами це безпосередньо впливає на ширину схеми — кількість кубітів, необхідних для виконання заданого квантового завдання. Квантовий блок повинен мати достатню кількість кубітів для підтримки призначеного завдання.

  • Якість описує, наскільки точно виконуються квантові операції. Її часто визначають через вірність шару, яка вимірює точність виконання повного шару квантових гейтів на всіх кубітах. З точки зору планування, вища вірність дозволяє надійно виконувати глибші схеми, впливаючи на необхідність пом'якшення помилок або декомпозиції завдань.

  • Швидкість вимірюється показником CLOPS (операцій шарів схеми на секунду), що вказує, скільки шарів квантових операцій система може виконати за секунду. Це впливає на пропускну здатність та затримку при виконанні завдань і допомагає визначити, наскільки швидко квантовий блок може завершити задане навантаження. Ця швидкість особливо важлива для квантового комп'ютера, оскільки кубіти зазнають шуму та помилок значно більшою мірою, ніж їхні класичні аналоги. Час, протягом якого вони можуть зберігати свою квантову інформацію у корисному вигляді, описується часом когерентності, який зазвичай становить порядку 200-300 μs\mu\text{s} для процесорів Heron r3.

Відмінності між квантовими та класичними метриками

Можна розглядати CLOPS як приблизний квантовий аналог FLOPS, але з деякими ключовими відмінностями. CLOPS вимірює швидкість, з якою квантовий процесор може виконувати квантові схеми, зокрема шари операцій у схемах, включаючи як квантові, так і необхідні класичні обчислення, що беруть участь у виконанні схем. Він був розроблений IBM Quantum як комплексний показник швидкості виконання квантового комп'ютера, що охоплює час квантового виконання та обробку в реальному часі класичних обчислень, необхідних для оновлення схем, на відміну від FLOPS, який суто вимірює потужність арифметики з рухомою комою в класичних процесорах.

CLOPS забезпечує вимірювану метрику продуктивності, яку можна порівнювати на існуючому обладнанні. IBM Quantum використовує CLOPS для порівняння різних квантових процесорів, і ці значення можна знайти на сторінці Обчислювальні ресурси на платформі IBM Quantum. Значення CLOPS залежать від апаратних можливостей, швидкості гейтів, швидкості класичної обробки та їх інтеграції.

Кількість кубітів є фіксованим числом для даного КПП. CLOPS та якість залежать від регулярного калібрування та обслуговування і можуть дещо змінюватися з часом навіть для одного КПП.

Разом ці метрики визначають, як квантові системи розподіляються та плануються. У багатьох випадках вся квантова система розглядається як один блок. Однак, коли завдання перевищує можливості одного блоку — чи то за кількістю кубітів, глибиною схеми або швидкістю виконання — можна використовувати такі методи, як розрізання/зшивання схем. Розрізання схем — це процес розбиття великих квантових завдань на менші, керовані підзавдання, які можна розподілити між кількома квантовими чипами, забезпечуючи масштабовані квантові обчислення попри обмеження обладнання. Зшивання схем — це процес, що відбувається після розрізання — класичний етап постобробки, який "зшиває" або об'єднує результати менших підсхем назад.

Квантові комп'ютери не мають традиційної пам'яті у сенсі постійного, адресованого сховища, як оперативна пам'ять або пам'ять ГП. Класичні обчислювальні ресурси мають дискретні біти, що зберігаються у пам'яті, що дозволяє зберігати, отримувати та повторно використовувати дані під час обчислень. Квантові ресурси використовують кубіти, які не зберігають пам'ять у класичному сенсі. Натомість кубіти перебувають у квантових станах, що представляють суперпозиції 0 та 1 одночасно, забезпечуючи експоненціальний паралелізм у просторі станів. Однак стани кубітів є крихкими та не можуть бути клоновані або зчитані детерміновано на проміжних кроках без колапсу квантового стану, тому поведінка, подібна до постійної пам'яті під час обчислень, не існує. Кубіти повинні підтримуватися у когерентному стані протягом усього виконання, і "пам'ять" по суті є самим квантовим станом. Класична пам'ять може використовуватися лише разом з квантовим процесором, а не як внутрішня квантова пам'ять. Це має значні наслідки: класичні обчислювальні ресурси можуть вільно повторно використовувати та зберігати проміжні результати; квантові ресурси не можуть цього робити без вимірювань, які порушують обчислення.

Підключення до класичної інфраструктури

КПП можуть бути підключені до класичної інфраструктури через мережі та різні програмні інтерфейси (API), що дозволяють розробникам програмного забезпечення програмно взаємодіяти з КПП. Ці API зазвичай приховані за пакетами розробки (SDK) та бібліотеками (як-от Qiskit) і представлені обчислювальним науковцям у формі програмних абстракцій (як-от Qiskit Primitives, про які ми будемо говорити у Розділі 3: моделі програмування).

Варто провести розмежування між тісною та слабкою інтеграцією квантових та класичних ресурсів. Наразі КПП не знаходяться на одному вузлі з класичними обчислювальними ресурсами. Фактично, КПП зараз не підключені через PCIe, а через мережу. Це може змінитися у майбутньому, але існують інженерні виклики, пов'язані з умовами середовища, оптимальними для КПП та класичних обчислювальних ресурсів.

Масштабування квантових ресурсів

Масштабування квантових ресурсів також можна поділити на вертикальне та горизонтальне.

  • Вертикальне масштабування полягало б у збільшенні кількості кубітів на чипі або покращенні вірності пристроїв.
  • Горизонтальне масштабування полягало б у з'єднанні чипів за допомогою зв'язок або класичних інтерконектів.

Зображення, що показує вертикальне масштабування квантових ресурсів як збільшення кількості кубітів на чипі, та горизонтальне масштабування квантових ресурсів як з'єднання багатьох чипів за допомогою зв'язок.

Перевірте своє розуміння

Які квантові аналоги класичних (а) бітів інформації та (б) швидкості процесора?

Відповідь:

(а) Квантові біти або кубіти — одиниці інформації, які, на відміну від своїх класичних аналогів (які можуть приймати лише стан 0 або 1), можуть перебувати у суперпозиції 0 та 1 одночасно.

(б) Операції шарів схеми на секунду або CLOPS — кількість послідовних операцій, які КПП може виконати щосекунди, включаючи певну взаємодію з класичними обчислювальними ресурсами, як-от завантаження параметрів зі схеми.

Управління ресурсами

Як ресурси HPC, так і квантові ресурси є цінними та складними; ними потрібно ретельно керувати. У цьому розділі ми пояснимо, як управляти ресурсами для користувацьких програм. Управління ресурсами в обчислювальній інфраструктурі — це процес (1) планування, (2) розподілу та (3) контролю/управління використанням обчислювальних ресурсів, таких як ЦП, пам'ять, сховище та пропускна здатність мережі, для забезпечення ефективного використання ресурсів.

Планування — оцінка ресурсів

Будь-яка програма споживає ресурси, і оцінка необхідних ресурсів є критичною для ефективного управління ресурсами. Це включає оцінку обсягу ЦП, пам'яті та інших ресурсів, необхідних для виконання програми. Те саме стосується квантових ресурсів. Однак квантові ресурси існують у зовсім іншому масштабі. Квантові процесори IBM Quantum® Heron r3 мають 156 кубітів, порівняно з мільярдами класичних бітів у звичайному ноутбуці. Час та вартість також є важливими факторами. Наразі IBM Quantum має безкоштовний план, Open Plan, що дозволяє користувачам досліджувати квантові обчислення, використовуючи 10 хвилин часу КПП на місяць. Деякі дослідницькі організації потребують настільки багато часу КПП, що мають виділений квантовий комп'ютер IBM на своїй території.

Один крок в оцінці ресурсів, унікальний для квантових обчислень, — це глибина схеми. Як згадувалося раніше, кожен квантовий гейт та кожна затримка між операціями супроводжується шумом та певною ймовірністю помилки. Чим глибша квантова схема, тим більше шуму. Тут є дві тонкощі: двокубітні гейти мають значно вищі частоти помилок, ніж однокубітні, тому часто можна ігнорувати однокубітну глибину. Крім того, не всі кубіти на квантовому чипі безпосередньо з'єднані. Іноді інформацію потрібно переміщувати від кубіта до кубіта для виконання необхідних заплутувань, і цей процес переміщення сам по собі вимагає двокубітних гейтів. Це переміщення обробляється у процесі, який називається "транспіляція" — складний процес, що має й інші цілі; це обговорюється детальніше у наступному уроці. Відповідна обмежувальна величина — це транспільована двокубітна глибина. Точна максимальна глибина, при якій можна отримати високоточні результати, залежить від схеми. Але завдяки сучасним методам пом'якшення помилок можна отримати високоточні результати при транспільованій двокубітній глибині 80 і більше.

Розподіл — планування

Планування — це процес розподілу ресурсів між програмами та управління їх виконанням. Це включає:

  • Подання завдання: Процес, за якого користувач надсилає запит (завдання) до системи HPC, вказуючи, яка обчислювальна робота та ресурси потрібні для виконання.
  • Розподіл ресурсів: Призначення доступних ресурсів системи HPC (таких як вузли, ЦП, пам'ять) поданому завданню на основі його вимог.
  • Виконання завдання: Фактичний запуск обчислювальних задач, визначених завданням, на виділених ресурсах HPC.

Існують аналоги всіх цих процесів для квантових комп'ютерів.

  • Завдання подаються користувачем за допомогою Qiskit Runtime, зазвичай використовуючи примітив Qiskit Runtime, як-от Sampler, Estimator або інші.
  • Користувач обирає зі списку бекендів, до яких має доступ. Повний список доступних бекендів можна переглянути на сторінці Обчислювальні ресурси на платформі IBM Quantum. Зазвичай просто використовують найменш завантажений квантовий комп'ютер. Але є випадки, коли може бути важливо використовувати конкретний через особливості розташування пристрою, відтворення попередніх обчислень тощо.
  • Виконання квантових завдань подібне до випадку HPC. Хоча деякі відмінності вже були окреслені, кілька з них варто повторити тут. КПП наразі зазвичай не розташовані на тому ж вузлі, що й класичні обчислювальні ресурси, а підключені через мережу. Це може мати наслідки для планування. Крім того, квантові комп'ютери можуть мати значний час очікування в черзі, і цей час очікування варіюється, що ускладнює точний контроль часу. Ситуація може відрізнятися для виділених систем; це залежить від внутрішнього адміністрування квантового комп'ютера.

Контроль/Управління — управління навантаженням

Управління навантаженням, також відоме як оркестрація, — це процес управління кількома програмами та їхніми вимогами до ресурсів. Це включає:

  • Підготовка ресурсів: Процес підготовки та забезпечення доступності ресурсів HPC для використання завданнями, включаючи налаштування апаратного та програмного забезпечення. Як ми побачимо далі, КПП є обчислювальними ресурсами, які можна підготувати подібно до класичних ресурсів HPC, з урахуванням застережень з попереднього розділу.
  • Планування завдань: Діяльність програмного забезпечення-планувальника, що вирішує, які завдання виконуються, коли і на яких ресурсах, управляючи пріоритетами та чергами для ефективного використання системи HPC. Хоча це широке твердження стосується квантових ресурсів, контроль над часом може бути меншим, ніж з іншими ресурсами.

Зображення, що показує навантаження (зображені як блоки), які організовуються та розташовуються оптимально у двовимірній сітці, де одна вісь представляє час, а інша — ресурси. Приклад:

Розглянемо відоме завдання як контекст для розуміння управління ресурсами: знаходження простих множників великих чисел. Припустимо також, що використовуваний алгоритм покладається на перебір усіх потенційних дільників. Хоча це часто не найефективніший метод, легко зрозуміти, як можна управляти навантаженням.

Планування — оцінка ресурсів

  • Оцініть, скільки часу ЦП та пам'яті може знадобитися для факторизації.
  • Сплануйте паралелізацію вашого завдання — скільки ЦП/ядер ви використаєте?

Розподіл — планування

  • При поданні завдання планувальник призначає ядра ЦП та пам'ять для завдання факторизації. Наприклад, він може розподілити всі потенційні дільники, що закінчуються на цифри 1, 3, 7, 9, між чотирма ядрами відповідно.
  • Виконання завдання: Алгоритм факторизації виконується, здійснюючи ділення або інші кроки факторизації на виділених ресурсах до завершення завдання.

Контроль/Управління — управління навантаженням

  • Система оркеструє порядок та час виконання завдань факторизації для оптимізації пропускної здатності.
  • Найпростіший випадок — коли одне з ядер знаходить цільовий простий множник. Це має зупинити обчислення на інших ядрах, щоб вони могли бути використані для наступного завдання.

Високопродуктивні обчислювальні середовища використовують спеціальне програмне забезпечення для виконання цих кроків та управління ресурсами. У наступному розділі ми дізнаємося про широко поширену систему управління ресурсами: Slurm.

Приклад з квантовими ресурсами:

Робочий процес, який буде предметом інших уроків цього курсу, — це визначення хімічних основних станів та енергій за допомогою квантової діагоналізації на основі вибірок (SQD). Це детальніше розглядається в Уроці 4, і ви також можете відвідати цей курс про SQD та суміжні методи на IBM Quantum Learning. Все, що нам потрібно знати для цього обговорення, — це те, що робочий процес включає наступне:

  • Підготовка квантової схеми
  • Вимірювання квантової схеми
  • Використання результатів вимірювання для проєкції задачі у корисний підпростір
  • Діагоналізація меншої, проєкованої матриці за допомогою класичних обчислювальних ресурсів
  • Ітерація — як для забезпечення самоузгодженості через такі міркування, як збереження заряду, так і можливі ітерації квантової схеми, якщо вона має варіаційні параметри.

Планування — оцінка ресурсів

  • Зіставте електронні орбіталі з кубітами, щоб визначити необхідну кількість кубітів.
  • Об'єднайте зіставлений гамільтоніан системи та (можливо варіаційний) стан у квантову схему та перевірте транспільовану двокубітну глибину. Переконайтеся, що вона є прийнятною.
  • Оцініть розмір підпростору, в який ви будете проєктувати; на цій основі оцініть, скільки часу ЦП та пам'яті може знадобитися для діагоналізації.
  • Сплануйте паралелізацію вашого завдання — скільки ЦП/ядер ви використаєте?

Розподіл — планування

  • Користувач обирає КПП; процес транспіляції автоматично зіставляє кубіти у вашій абстрактній квантовій схемі з фізичними кубітами на КПП. Це важливо, оскільки абстрактна схема може передбачати пряме з'єднання, яке не існує на чипі, серед інших причин.
  • При поданні завдання через Qiskit Runtime завдання потрапляє в чергу обраного КПП. Користувач не може контролювати час очікування в черзі, хоча для виділених систем це може бути інакше.
  • Класичні обчислювальні ресурси очікують квантових результатів.
  • Завдання діагоналізації подається до ресурсів HPC; при поданні завдання планувальник призначає ядра ЦП та пам'ять для завдання діагоналізації.
  • Виконання завдання: Алгоритм діагоналізації виконується, діагоналізуючи меншу проєковану матрицю до завершення завдання.

Контроль/Управління — управління навантаженням

  • Система оркеструє порядок та час квантових і класичних кроків протягом усього процесу. Наприклад, після діагоналізації проєкованої матриці та отримання енергії основного стану, залежно від критеріїв збіжності, робочий процес може повернутися до нової квантової схеми (з новим варіаційним параметром).
  • Коли критерії збіжності для енергії основного стану досягнуті, обчислення на всіх ядрах припиняється.

Високопродуктивні обчислювальні середовища використовують спеціальне програмне забезпечення для виконання цих кроків та управління ресурсами. У наступному розділі ми дізнаємося про широко поширену систему управління ресурсами: Slurm. Важливо зазначити, що Slurm не має інструментів для всіх описаних вище кроків. Slurm не забезпечує підтримку планування завдань і детального управління навантаженням, такого як комунікація між компонентами навантаження. Це добре відповідає поточному стану квантових обчислень у HPC, оскільки КПП зазвичай доступні через мережу.

Перевірте своє розуміння

Припустімо, ви намагаєтесь шукати в несортованій базі даних, щоб знайти елемент, який ми назвемо "ціль". Для кожної з наведених дій вкажіть, якому етапу управління ресурсами вона відповідає: (а) Оцінка розміру бази даних та часу, необхідного для перевірки кожного елемента (б) Забезпечення того, що знаходження цілі на одному ГП зупиняє процес на інших ГП для їх вивільнення для наступної задачі (в) Розподіл простору пошуку на регіони для кожного з ваших (скажімо, 10) ГП

Відповідь:

(а) Планування (б) Контроль/управління (в) Розподіл/планування

Програмне забезпечення: Slurm

У цьому розділі ми застосуємо концепції, вивчені в цій главі, для практики використання популярної системи управління ресурсами Slurm.

Вступ до Slurm

Slurm — це система управління ресурсами з відкритим вихідним кодом, яка широко використовується в середовищах високопродуктивних обчислень. Вона надає комплексний набір інструментів для управління ресурсами, планування завдань та моніторингу продуктивності системи.

Ми розглянемо основи використання Slurm, зокрема:

  • Подання завдань
  • Розподіл ресурсів
  • Моніторинг завдань

Оскільки надати ресурси HPC кожному студенту цього курсу дуже складно, ми трохи схитруємо і надамо вам репозиторій з образами Docker, які імітують реальний HPC-кластер зі Slurm, але в малому масштабі. Це допоможе нам практикувати вивчені концепції в безпечних, відтворюваних середовищах.

Зверніть увагу, що наразі всі квантові та класичні ресурси виділяються на весь час проведення експерименту. Наразі не існує черезрядкового розподілу змішаних ресурсів. Ще одне застереження полягає в тому, що навіть після запуску завдання квантова система не буде керуватися безпосередньо, як може очікувати досвідчений користувач HPC. Завдання запускається на довільному x86-вузлі, який виконує сервіс Qiskit Runtime, і цей сервіс підключається до іншого планувальника, над яким користувач не має прямого контролю. Цей робочий процес та пов'язані з ним проблеми можуть бути знайомі користувачам HPC, які мали ранній досвід отримання ексклюзивного доступу до GPU-вузлів (початкове використання gres).

Інструкції з встановлення та огляд налаштування

Для практики поєднання квантових та HPC-ресурсів вам знадобиться або доступ до реального середовища HPC, або імітація середовища HPC на вашому локальному комп'ютері. Посібник зі встановлення для локального налаштування за допомогою Docker можна знайти в цьому репозиторії. Посібник містить посилання на підтримку для налаштування облікового запису IBM Cloud® та встановлення плагіна SPANK для QRMI. Також у цьому репозиторії є кілька файлів Python для тестування вашого середовища.

Після завершення встановлення скористайтеся наведеною нижче командою, щоб перевірити обчислювальні ресурси Slurm у вашому терміналі. Якщо встановлення пройшло успішно, ви зможете підтвердити наявність загалом трьох віртуальних вузлів.

$ 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
...

У нас є два розділи або групи вузлів: normal та quantum. Розділ normal складається з вузлів, які мають доступ лише до класичних ресурсів. Розділ quantum має доступ до квантових ресурсів. Ви можете переглянути деталі кожного вузла, виконавши scontrol show nodes.

Запуск простого прикладу hello world у Slurm

Спочатку запустимо простий класичний приклад hello world за допомогою Slurm. Для прикладів ми будемо використовувати Python. Створімо hello_world.py, який не потребує пояснень.

$ vim hello_world.py

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

Тепер нам потрібно повідомити менеджеру ресурсів, які ресурси нам потрібні для виконання цієї програми. Slurm надає спосіб вказати всі метадані для завдання через скрипт подання, який є звичайним shell-скриптом з анотаціями, специфічними для Slurm. Ці анотації дозволяють вказати вимоги до ресурсів, параметри розкладу та інше. Створімо shell-скрипт 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
~

Розглянемо файл подання та подивимось, що тут відбувається.

Директиви #SBATCH — це спеціальні анотації, які повідомляють про вимоги до виконання програми. Тут ви можете вказати обсяг ресурсів — кількість вузлів, кількість завдань на вузол, кількість завдань та процесорів на вузол і завдання — та інші параметри, як-от назву вихідного файлу. Повний перелік параметрів доступний у документації Slurm.

Тепер час запустити наше завдання Slurm. sbatch — це команда, яка приймає файл подання та ставить завдання в чергу на виконання в Slurm.

$ sbatch hello_world.sh

Submitted batch job 63

Перевіримо стан нашої програми за допомогою команди squeue.

$ squeue

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

Після завершення завдання ми можемо перевірити результат, переглянувши вихідний файл.

$ cat hello_world_logs.txt
Hello, World!

Перевірте своє розуміння

Враховуючи наведений нижче shell-скрипт Slurm, що є (a) назвою завдання, (b) назвою файлу Python та (c) назвою вихідного файлу? (d) Нарешті, чи може це використовувати квантові ресурси чи ні?

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

Відповідь:

(a) hello-learner (b) hello-learner_qm.py (c) hello-learner.out (d) Так, може. Використовується розділ quantum.

Запуск простого прикладу Qiskit hello world у Slurm

Далі спробуємо використати також квантові ресурси. Створімо та запустимо просту програму "Hello, Qiskit", яка використовує квантові ресурси.

$ 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)

Тут ми використаємо інтерфейс управління квантовими ресурсами (QRMI) — плагін Slurm SPANK для підтримки квантових ресурсів та завдань, який був розроблений спільно IBM, Pasqal, Центром Хартрі та RPI. Ми створили просту схему pauli-2-design з випадковими початковими значеннями та простим спостережуваним і запустимо її за допомогою Estimator, щоб отримати математичне сподівання. Для запуску нам знову знадобиться скрипт подання hello_qiskit.sh, який матиме квантові ресурси як вимогу.

$ 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
~

Розглянемо файл подання та подивимось, що там відбувається. У нас є один новий параметр — gres. gres — це параметр Slurm для визначення додаткових обчислювальних ресурсів. У нашому випадку цим новим ресурсом буде наш квантовий ресурс. Оскільки ми вказали ресурси та розділ нашого кластера, де доступні квантові ресурси, наші примітиви Qiskit використовуватимуть ці виділені ресурси для виконання квантового навантаження.

Тепер час запустити наше завдання Slurm.

$ sbatch hello_qiskit.sh

Потім перевіримо стан нашої програми за допомогою команди squeue.

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

Ми можемо переглянути логи та результати після завершення завдання.

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

Підсумок

Ми вже дізналися, що таке обчислювальні ресурси та як їх використовувати для запуску програм у гетерогенних середовищах. Ми також створили та виконали дві прості програми "Hello World": одну для класичного ресурсу, а іншу для квантового ресурсу, і навчилися створювати shell-скрипти для подання завдань та перегляду результатів.

У наступному уроці ми розширимо ці знання про управління ресурсами, щоб застосувати моделі програмування до ресурсів, які ми отримали під час виконання завдань.

Весь код та скрипти, використані в цій главі, доступні для вас у нашому репозиторії GitHub.