Panduan pengguna plugin SPANK
Plugin SPANK untuk Quantum Resource Management Interface (QRMI) digunakan untuk mengonfigurasi akses ke sumber daya kuantum dari job pengguna di lingkungan komputasi yang dikelola oleh workload manager Slurm. Ini adalah panduan bagi pengguna plugin untuk mengonfigurasi alokasi sumber daya QPU saat membuat job Slurm.
Definisi sumber daya QPU Slurm menentukan sumber daya fisik apa yang bisa digunakan oleh job Slurm di lingkungan high-performance compute (HPC). Source code pengguna sebaiknya tidak bergantung pada instance Backend tertentu, bahkan jenis Backend sekalipun bila memungkinkan. Ini menjaga portabilitas source code sementara kriteria pemilihan QPU menjadi bagian dari definisi sumber daya (yang dianggap sebagai konfigurasi, bukan source code).
Konfigurasi sumber daya QPU saat pembuatan job​
Perlu diperhatikan bahwa plugin ini masih dalam pengembangan aktif dan sintaks tepatnya bisa berubah.
Lingkup administrator​
Administrator HPC mengonfigurasi plugin SPANK untuk menentukan sumber daya fisik apa yang bisa disediakan untuk job Slurm. Konfigurasi ini berisi semua informasi yang diperlukan agar job Slurm bisa mengakses sumber daya fisik, seperti endpoint dan kredensial akses.
Baca qrmi_config.json.example untuk contoh konfigurasi yang komprehensif.
Di slurm.conf, sumber daya QPU bisa ditugaskan ke sebagian atau semua node untuk digunakan:
...
GresTypes=qpu,name
NodeName=node[1-5000] Gres=qpu,name:ibm_fez
...
Lingkup pengguna​
Pengguna HPC mengirimkan job menggunakan sumber daya QPU yang terikat ke sumber daya QPU Slurm. Atribut name merujuk pada apa yang telah didefinisikan oleh administrator HPC. Selama runtime job Slurm, pemilihan Backend bisa didasarkan pada kriteria selain nama yang telah ditentukan yang merujuk ke Backend tertentu (misalnya, berdasarkan kapasitas dan tingkat error, untuk membantu mempersempit pilihan di antara sekumpulan Backend yang telah didefinisikan).
Mungkin ada variabel lingkungan tambahan yang diperlukan, tergantung pada jenis Backend.
Parameter SBATCH akan menunjuk ke satu atau lebih sumber daya QPU yang ditugaskan ke aplikasi sebagai generic resource.
Variabel lingkungan yang disediakan melalui plugin akan memberikan informasi yang diperlukan ke aplikasi (lihat bagian Lingkup aplikasi HPC untuk detailnya).
#SBATCH --time=100
#SBATCH --output=<LOGS_PATH>
#SBATCH --gres=qpu:1
#SBATCH --qpu=ibm_fez
#SBATCH --... # other options
srun ...
Untuk menggunakan lebih banyak sumber daya QPU, tambahkan lebih banyak QPU ke parameter --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 ...
Lingkup aplikasi HPC​
Aplikasi HPC menggunakan sumber daya QPU Slurm yang ditugaskan ke job Slurm.
Variabel lingkungan menyediakan lebih banyak detail untuk digunakan oleh aplikasi; misalnya, SLURM_JOB_QPU_RESOURCES mencantumkan nama sumber daya kuantum (dipisahkan koma jika ada beberapa).
Variabel-variabel ini akan digunakan oleh QRMI. (Lihat file README di berbagai direktori QRMI (IBM, pasqal) untuk detail selengkapnya.)
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()))
Lihat direktori examples untuk file contoh.
Spesifikasi Backend​
IBM Direct Access API​
Lingkup administrator​
Konfigurasi Backend Direct Access API (lingkup admin HPC) mencakup endpoint dan kredensial ke endpoint Direct Access dan layanan autentikasi, serta ke endpoint S3. Secara khusus, ini mencakup:
- Kunci API IBM Cloud® untuk membuat bearer token
- Endpoint Direct Access API
- Bucket S3 dan detail akses
Kredensial akses tidak boleh terlihat oleh pengguna HPC atau pengguna non-privileged lainnya di sistem. Oleh karena itu, data sensitif bisa disimpan dalam file terpisah yang bisa dilindungi aksesnya sesuai kebutuhan.
Perlu diperhatikan bahwa Slurm memiliki akses penuh ke Backend. Ini memiliki beberapa implikasi:
- Plugin Slurm bertanggung jawab atas multi-tenancy (memastikan pengguna tidak melihat hasil job pengguna lain)
- Sisi klaster HPC bertanggung jawab untuk memverifikasi pengguna (siapa yang diizinkan mengakses QPU) dan memastikan akses yang sesuai
- Kapasitas dan prioritas penggunaan QPU dikelola sepenuhnya melalui Slurm; tidak ada penjadwalan pengguna lain di luar Slurm
Lingkup pengguna​
Execution lane tidak diekspos langsung ke administrator HPC atau pengguna. Sebaliknya, selama runtime, ada dua mode berbeda yang bisa ditentukan oleh pengguna HPC:
exclusive=truemenentukan bahwa tidak ada job lain yang bisa menggunakan sumber daya secara bersamaan. Job mode eksklusif mendapatkan semua execution lane dan tidak bisa berjalan bersamaan dengan job non-eksklusifexclusive=falsememungkinkan job lain berjalan secara paralel. Dalam kasus ini, bisa ada job sebanyak jumlah execution lane, semua berjalan secara bersamaan, dan job mendapat satu lane
Qiskit Runtime Service​
Lingkup pengguna​
Diharapkan pengguna menentukan detail akses tambahan dalam variabel lingkungan. Secara khusus, ini mencakup hal berikut:
- Instance layanan Qiskit Runtime (CRN, Cloud Resource Name)
- Endpoint untuk Qiskit Runtime (kecuali terdeteksi otomatis dari CRN)
- Kunci API yang memiliki akses ke CRN
- Instance S3, bucket, dan access token/kredensial untuk transfer data
Detail ini menentukan di bawah pengguna dan instance layanan mana Qiskit Runtime service digunakan. Sesuai dengan itu, penjadwalan IBM Quantum® Platform mempertimbangkan kemampuan pengguna dan instance layanan untuk penjadwalan.
Saat ini, pengguna harus menyediakan detail di atas (tidak ada akses kuantum bersama di seluruh klaster).
Pasqal Cloud Services​
Lingkup admin HPC​
Tidak ada pengaturan khusus yang diperlukan dari admin HPC untuk penggunaan PCS.
Lingkup pengguna HPC​
Diharapkan pengguna menentukan detail akses tambahan dalam variabel lingkungan. Saat ini, ini mencakup hal berikut:
- Sumber daya PCS yang dituju (FRESNEL, EMU_FRESNEL, EMU_MPS)
- Token otorisasi