Посібник користувача SPANK-плагіна
SPANK-плагін для Quantum Resource Management Interface (QRMI) використовується для налаштування доступу до квантових ресурсів у завданнях користувача в обчислювальному середовищі, що адмініструється менеджером навантаження Slurm. Це посібник для користувачів плагіна щодо налаштування виділення ресурсів QPU при створенні завдань Slurm.
Визначення ресурсів QPU у Slurm визначають, які фізичні ресурси можуть використовуватися завданнями Slurm у середовищах високопродуктивних обчислень (HPC). Вихідний код користувача має бути незалежним від конкретних екземплярів бекенду і навіть від типів бекенду за можливості. Це робить вихідний код портативним, тоді як критерії вибору QPU є частиною визначення ресурсу (що вважається конфігурацією, а не вихідним кодом).
Налаштування ресурсів QPU під час створення завдань
Зверни увагу, що цей плагін перебуває в активній розробці, і точний синтаксис може змінюватися.
Область відповідальності адміністратора
Адміністратори HPC налаштовують SPANK-плагін для визначення фізичних ресурсів, що можуть бути надані завданням Slurm. Ця конфігурація містить усю інформацію, необхідну для надання завданням Slurm доступу до фізичних ресурсів, як-от кінцеві точки та облікові дані.
Прочитай qrmi_config.json.example для повного прикладу конфігурації.
У slurm.conf ресурси QPU можна призначити деяким або всім вузлам для використання:
...
GresTypes=qpu,name
NodeName=node[1-5000] Gres=qpu,name:ibm_fez
...
Область відповідальності користувача
Користувачі HPC надсилають завдання з використанням ресурсів QPU, прив'язаних до ресурсів QPU у Slurm. Атрибут name посилається на те, що визначив адміністратор HPC. Під час виконання завдання Slurm вибір бекенду може базуватися на критеріях, відмінних від попередньо визначеної назви конкретного бекенду (наприклад, за показниками пропускної здатності та рівня помилок, щоб виконати попередній відбір серед визначеного набору бекендів).
Залежно від типу бекенду можуть знадобитися додаткові з мінні середовища.
Параметри SBATCH вказуватимуть на один або декілька ресурсів QPU, призначених застосунку як загальні ресурси.
Змінні середовища, надані через плагін, забезпечать необхідну інформацію для застосунку (докладніше див. розділ Область застосунку HPC).
#SBATCH --time=100
#SBATCH --output=<LOGS_PATH>
#SBATCH --gres=qpu:1
#SBATCH --qpu=ibm_fez
#SBATCH --... # other options
srun ...
Щоб використовувати більше ресурсів QPU, додай їх до параметра --qpu:
#SBATCH --time=100
#SBATCH --output=<LOGS_PATH>
#SBATCH --gres=qpu:3
#SBATCH --qpu=my_local_qpu,ibm_fez,ibm_marrakesh
#SBATCH --... # other options
srun ...
Область застосунку HPC
Застосунки HPC використовують ресурси QPU Slurm, призначені завданню Slurm.
Змінні середовища надають докладнішу інформацію для використання застосунком; наприклад, SLURM_JOB_QPU_RESOURCES містить список імен квантових ресурсів (розділених комами, якщо їх декілька).
Ці змінні використовуватимуться QRMI. (Докладніші відомості дивись у README-файлах у відповідних директоріях QRMI (IBM, pasqal).)
from qiskit import QuantumCircuit
# Using an IBM QRMI flavor:
from qrmi.primitives import QRMIService
from qrmi.primitives.ibm import SamplerV2, get_backend
# define circuit
circuit = QuantumCircuit(2)
circuit.h(0)
circuit.cx(0, 1)
circuit.measure_all()
# instantiate QRMI service and get quantum resource (we'll take the first one should there be several of them)
# inject credentials needed for accessing the service at this point
load_dotenv()
service = QRMIService()
resources = service.resources()
qrmi = resources[0]
# Generate transpiler target from backend configuration & properties and transpile
backend = get_backend(qrmi)
pm = generate_preset_pass_manager(
optimization_level=1,
backend=backend,
)
isa_circuit = pm.run(circuit)
# Run the circuit
options = {}
sampler = SamplerV2(qrmi, options=options)
job = sampler.run([(isa_circuit, isa_observable, param_values)])
print(f">>> Job ID: {job.job_id()}")
result = job.result()
if job.done():
pub_result = result[0]
print(f"Counts for the 'meas' output register: {pub_result.data.meas.get_counts()}")
elif job.cancelled():
print("Cancelled")
elif job.errored():
print(qrmi.task_logs(job.job_id()))
Дивись директорію прикладів для прикладових файлів.
Специфіка бекендів
IBM Direct Access API
Область відповідальності адміністратора
Конфігурація бекендів Direct Access API (область відповідальності адміністратора HPC) включає кінцеві точки та облікові дані для кінцевої точки Direct Access і сервісів автентифікації, а також для кінцевої точки S3. Зокрема, це включає:
- API-ключ IBM Cloud® для створення токенів носія
- Кінцева точка Direct Access API
- Кошик S3 та деталі доступу
Облікові дані доступу не повинні бути видимі для користувачів HPC або інших непривілейованих користувачів системи. Тому конфіденційні дані можна розміщувати в окремих файлах, які можна відповідним чином захистити від доступу.
Зверни увагу, що Slurm має повний доступ до бекенду. Це має кілька наслідків:
- SPANK-плагін відповідає за мультиорендність (забезпечення того, щоб користувачі не бачили результатів завдань інш их користувачів)
- Сторона HPC-кластера відповідає за перевірку користувачів (кому дозволено отримати доступ до QPU) та забезпечення відповідного доступу
- Пропускна здатність і пріоритет використання QPU повністю керуються через Slurm; немає жодного іншого планування користувачів поза Slurm
Область відповідальності користувача
Смуги виконання не надаються безпосередньо адміністратору або користувачу HPC. Натомість під час виконання можуть бути два різних режими, які можуть вказати користувачі HPC:
exclusive=trueвказує, що жодне інше завдання не може використовувати ресурс одночасно. Завдання в ексклюзивному режимі отримує всі смуги виконання і не може виконуватися одночасно з неексклюзивним завданнямexclusive=falseдозволяє паралельне виконання інших завдань. У цьому випадку може бути стільки завдань, скільки є смуг виконання — усі виконуються одночасно, і з авданню призначається одна смуга
Qiskit Runtime Service
Область відповідальності користувача
Передбачається, що користувачі вказують додаткові деталі доступу в змінних середовища. Зокрема, це включає таке:
- Екземпляр сервісу Qiskit Runtime (CRN, Cloud Resource Name)
- Кінцева точка для Qiskit Runtime (якщо вона не визначається автоматично з CRN)
- API-ключ із доступом до CRN
- Екземпляр S3, кошик та токен/облікові дані доступу для передачі даних
Ці деталі визначають, під яким користувачем і екземпляром сервісу використовується Qiskit Runtime. Відповідно планування IBM Quantum® Platform враховує можливості користувача та екземпляра сервісу для планування.
Наразі користувачі повинні надати зазначені вище деталі (спільного квантового доступу на рівні кластера немає).
Pasqal Cloud Services
Область відповідальності адміністратора HPC
Для використання PCS адміністраторам HPC не потрібне жодне спеціальне налаштування.
Область відповідальності користувача HPC
Передбачається, що користувачі вказують додаткові деталі доступу в змінних середовища. Наразі це включає таке:
- Ресурс PCS для цілі (FRESNEL, EMU_FRESNEL, EMU_MPS)
- Токен авторизації