واجهة المكتبة وخط الأوامر لدعم التفاعل مع مجموعات HPC متعددة
يوفر القدرة على التفاعل مع أنظمة جدولة الوظائف HPC الأكثر شعبية باستخدام واجهة واحدة وتمكين إنشاء برامج نصية لتقديم الوظائف.
تم اختباره مع SGE و LSF و SLURM (دعم PBS/عزم الدوران قيد التطوير)
يمكن تثبيت myCluster من Pypi.
pip install mycluster
ستقوم MyCluster بكتابة عنوان بريدك الإلكتروني في أي ملفات تقديم حتى تتمكن من تلقي التحديثات من المجدولين. يمكنك توفير هذا على سطر الأوامر أو تخزينه في ملف التكوين. لتخزين بريدك الإلكتروني في ملف التكوين:
mycluster configure
بشكل افتراضي ، سيحاول MyCluster اكتشاف الجدولة الأساسية ولكن يمكن تجاوز هذا من خلال تعيين متغير البيئة MyCluster_sched. يجب ضبط هذا على اسم سلسلة من فئة Python التي تنفذ mycluster.schedulers.base.Scheduler فئة.
في بعض الحالات ، قد ترغب في تجاوز قوالب التقديم ، على سبيل المثال إذا كنت ترغب في تضمين معلمات إضافية أو أوامر جدولة. للقيام بذلك ، قم بتعيين متغير البيئة myCluster_Template على قالب Jinja الذي ترغب في استخدامه. انظر MyCluster/المجدول/القوالب للقوالب الأساسية.
يقوم MyClusyter بتثبيت أمر "myCluster" CLI للتفاعل مع الجدولة المحلية عبر سطر الأوامر.
طباعة مساعدة الأمر
mycluster <command> --help
قائمة جميع قوائم الانتظار
mycluster queues
قائمة الوظائف
mycluster list
قم بإنشاء ملف إرسال جديد ، انظر -help لمزيد من خيارات التقديم.
mycluster create JOBFILE QUEUE RUNSCRIPT
إرسال ملف وظيفة
mycluster submit JOBFILE
إلغاء الوظيفة
mycluster cancel JOBID
يمكن أن يتم تنفيذ Runscript بواسطة Job_Script الاستفادة من متغيرات البيئة المحددة مسبقًا التالية
export NUM_TASKS=
export TASKS_PER_NODE=
export THREADS_PER_TASK=
export NUM_NODES=
# OpenMP configuration
export OMP_NUM_THREADS= $THREADS_PER_TASK
# Default mpiexec commnads for each flavour of mpi
export OMPI_CMD= " mpiexec -n $NUM_TASKS -npernode $TASKS_PER_NODE -bysocket -bind-to-socket "
export MVAPICH_CMD= " mpiexec -n $NUM_TASKS -ppn $TASKS_PER_NODE -bind-to-socket "
export IMPI_CMD= " mpiexec -n $NUM_TASKS -ppn $TASKS_PER_NODE " يمكن استخدام myCluster برمجيًا باستخدام وحدة MyCluster. جميع المجدولين ينفذون mycluster.schedulers.base.Scheduler فئة.
import mycluster
# Detect the local scheduler
scheduler = mycluster . detect_scheduling_sys ()
print ( f"Scheduler loaded: { scheduler . scheduler_type () } " )
# Create a batch script to submit a 48 task run of script.sh to the skylake queue
script = scheduler . create ( "skylake" , 48 , "my_job" , "script.sh" , "01:00:00" , tasks_per_node = 24 )
# Write to a file
with open ( "mysub.job" , "w" ) as f :
f . write ( script )
# Submit the batch script
job_id = scheduler . submit ( "mysub.job" )
# Check the status of the job
print ( scheduler . get_job_details ( job_id ))
# Cancel the job
scheduler . delete ( job_id )