انتقل إلى المحتوى الرئيسي

دليل مستخدم إضافة SPANK

تُستخدم إضافة SPANK الخاصة بـ واجهة إدارة الموارد الكمومية (QRMI) لضبط الوصول إلى الموارد الكمومية من مهام المستخدمين في بيئة حوسبة يديرها مدير عبء العمل Slurm. هذا الدليل موجّه لمستخدمي الإضافة لضبط تخصيص موارد QPU عند إنشاء مهام Slurm.

تحدّد تعريفات موارد QPU في Slurm الموارد المادية التي يمكن لمهام Slurm استخدامها في بيئات الحوسبة عالية الأداء (HPC). ينبغي أن يكون كود المستخدم المصدري مستقلًا عن نسخ Backend المحددة، وحتى عن أنواع Backend كلما أمكن ذلك. هذا يجعل الكود قابلًا للنقل بينما تكون معايير اختيار 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. يشير سمة الاسم إلى ما عرّفه مدير HPC. أثناء تشغيل مهمة Slurm، يمكن أن يستند اختيار Backend إلى معايير غير الاسم المحدد مسبقًا الذي يشير إلى Backend بعينها (مثلًا، بناءً على مؤشرات السعة ومعدل الخطأ، للمساعدة في تضييق نطاق الاختيار من بين مجموعة Backend المعرّفة).

قد تكون هناك متغيرات بيئة إضافية مطلوبة، حسب نوع Backend.

ستشير معاملات SBATCH إلى مورد QPU واحد أو أكثر مخصصة للتطبيق كموارد عامة. ستوفر متغيرات البيئة المقدَّمة عبر الإضافة المعلومات اللازمة للتطبيق (راجع قسم نطاق تطبيق HPC لمزيد من التفاصيل).

#SBATCH --time=100
#SBATCH --output=<LOGS_PATH>
#SBATCH --gres=qpu:1
#SBATCH --qpu=ibm_fez
#SBATCH --... # other options

srun ...

لاستخدام المزيد من موارد QPU، أضف المزيد من وحدات 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()))

راجع مجلد الأمثلة للاطلاع على ملفات مثال.

تفاصيل خاصة بـ Backend

IBM Direct Access API

نطاق المدير

يتضمن إعداد نقاط Backend الخاصة بـ Direct Access API (نطاق مدير HPC) نقاط النهاية وبيانات الاعتماد اللازمة لنقطة نهاية Direct Access وخدمات المصادقة، بالإضافة إلى نقطة نهاية S3. يشمل ذلك تحديدًا:

  • مفتاح API الخاص بـ IBM Cloud® لإنشاء رموز Bearer
  • نقطة نهاية Direct Access API
  • تفاصيل دلو S3 والوصول إليه

لا ينبغي أن تكون بيانات الاعتماد مرئية لمستخدمي HPC أو غيرهم من المستخدمين غير المخوّلين على النظام. لذلك، يمكن وضع البيانات الحساسة في ملفات منفصلة يمكن حمايتها بصلاحيات الوصول المناسبة.

لاحظ أن Slurm يملك وصولًا كاملًا إلى Backend. لهذا عدة تداعيات:

  • إضافة Slurm مسؤولة عن تعدد المستأجرين (ضمان ألا يرى المستخدمون نتائج مهام مستخدمين آخرين)
  • جانب عنقود HPC مسؤول عن التحقق من المستخدمين (من يُسمح له بالوصول إلى QPU) وضمان الوصول المناسب
  • تُدار سعة QPU وأولوية استخدامه حصريًا عبر Slurm؛ لا يوجد جدولة أخرى للمستخدمين خارج Slurm
نطاق المستخدم

لا تُكشف مسارات التنفيذ لمدير HPC أو المستخدم مباشرة. بدلًا من ذلك، أثناء وقت التشغيل، هناك وضعان مختلفان يمكن لمستخدمي HPC تحديدهما:

  • exclusive=true يحدد أنه لا يمكن لأي مهمة أخرى استخدام المورد في نفس الوقت. تحصل مهمة الوضع الحصري على جميع مسارات التنفيذ ولا يمكنها التشغيل في نفس وقت مهمة غير حصرية
  • exclusive=false يسمح لمهام أخرى بالتشغيل بالتوازي. في هذه الحالة، يمكن أن يكون هناك بقدر ما هناك من مسارات التنفيذ، تعمل جميعها في نفس الوقت، ويُخصص للمهمة مسار واحد

خدمة Qiskit Runtime

نطاق المستخدم

من المتوقع أن يحدد المستخدمون تفاصيل وصول إضافية في متغيرات البيئة. يشمل ذلك تحديدًا ما يلي:

  • نسخة خدمة Qiskit Runtime (CRN، اسم مورد السحابة)
  • نقطة نهاية Qiskit Runtime (ما لم يتم اكتشافها تلقائيًا من CRN)
  • مفتاح API الذي يملك وصولًا إلى CRN
  • نسخة S3 ودلو ورمز وصول/بيانات اعتماد لنقل البيانات

تحدد هذه التفاصيل المستخدمَ ونسخةَ الخدمة التي يُستخدم بموجبها Qiskit Runtime. وفقًا لذلك، تأخذ جدولة منصة IBM Quantum® بعين الاعتبار قدرات المستخدم ونسخة الخدمة للجدولة.

في الوقت الحالي، يتعين على المستخدمين توفير التفاصيل المذكورة أعلاه (لا يوجد وصول كمي مشترك على مستوى العنقود).

خدمات Pasqal السحابية

نطاق مدير HPC

لا يوجد إعداد محدد مطلوب من مديري HPC لاستخدام PCS.

نطاق مستخدم HPC

من المتوقع أن يحدد المستخدمون تفاصيل وصول إضافية في متغيرات البيئة. حاليًا، يشمل ذلك ما يلي:

  • مورد PCS المستهدف (FRESNEL، EMU_FRESNEL، EMU_MPS)
  • رمز التفويض