שו”ת (FAQ)

להלן אוסף שאלות ותשובות נפוצות

איך מקבלים את המעבדים הכי קרובים לכרטיס גרפי?

לפקודות srun/sbatch נוסף הדגל  –gres-flags

דגל זה מקבל אחת משלושה ערכים הבאים:

enforce-binding – מבקש מעבדים הקרובים ביותר לGPU שהתבקש בלבד

disable-binding – לא מתייחס לסינון מעבדים עפ”י קרבה ל GPU המבוקש.

משמעויות

א. אם אני רץ עם GPU 1 או יותר מ GPU 1 אבל הם יושבים על אותו ה socket, ואני רוצה ביצועים מקסימליים, יש להשתמש בדגל הנ”ל ( כלומר –gres-flags=enforce-binding )
אם המעבדים לא פנויים, העבודה שלי תחכה בתור.

ב אם אני רץ עם 2 GPU ומעלה ולא כל ה GPU יושבים על אותו ה Socket הפעלת הדגל תגרום לעבודה שלי להדחות מיידית.

ג. אם אני לא מציין את הדגל הנ”ל, או שרשמתי disable-binding אני יכול לקבל כל מעבד פנוי ובהחלט לא בהכרח את הקרוב ביותר. אם כמות המעבדים הנדרשת פנויה העבודה שלי תתחיל לרוץ.

 

איך מבקשים גרטיס גרפי(GPU)?

כיוון שבצבר מחקר ישנם כמהסוגים של גרטיסים גרפיים, פותחה השיטה הבאה.ישנם שני פרמטרים באמצעותם אפשר לבקש כרטיס : type,constraint.

הפרמטר type מקבל את הערכים: new,old בלבד. כאשר new הכוונה כרטיסים מסוג פסקל ומעלה. ו old הכוונה מקסוואל

רשימת הערכים לפרמטר constratins מתקבלים ע”י הפקודה:

show nodes |grep 'Arch\|AvailableFeatures'

ונקראים features.

פלט לדוגמה:

NodeName=gaon1 Arch=x86_64 CoresPerSocket=8
AvailableFeatures=(null)
NodeName=gaon2 Arch=x86_64 CoresPerSocket=8
AvailableFeatures=1080ti
NodeName=gaon3 Arch=x86_64 CoresPerSocket=8
AvailableFeatures=1080
NodeName=gaon4 Arch=x86_64 CoresPerSocket=6
AvailableFeatures=titanx
NodeName=gaon5 Arch=x86_64 CoresPerSocket=1
AvailableFeatures=1080ti
NodeName=gaon6 Arch=x86_64 CoresPerSocket=1
AvailableFeatures=titanxp,titanx
NodeName=gaon7 Arch=x86_64 CoresPerSocket=1
AvailableFeatures=(null)

כלומר, לכל שרת הfeatures שונים. לחלק אין(גאון1,7) ולחלק יש אף יותר מאחד(גאון6).כמו כן הפרמטרים הם שונים לכל שרת.

התבנית הכללית היא

srun/sbatch --gres=gpu:TYPE:# --constraint='feature1|feature2...' my_prog

דוגמאות שימוש בשני הפרמטרים

כרטיס חדש בלבד (פסקל ומעלה)

srun --gres=gpu:new:1 --gres-flags=enforce-binding nvidia-smi

כרטיס ישן בלבד

srun --gres=gpu:old:1 nvidia-smi

כרטיס מסוג 1080 בלבד

srun --gres=gpu:new:1 --gres-flags=enforce-binding --constraint='1080' nvidia-smi

כרטיס titanxp או 1080ti בלבד

srun --gres=gpu:new:1 --constraint="titanxp|1080ti" --pty nvidia-smi

כרטיס מסוג titanx מקסוואל בלבד

srun --gres=gpu:old:1 --gres-flags=enforce-binding --constraint='titanx' nvidia-smi

 

איך מריצים עבודות בטור(זה אחר זה)?

הדוגמה הבאה מבקשת להריץ 3 עבודות בטור, כאשר כל עבודה מריצה את a.out 14 פעמים. סה”כ 42 פעמים.

seq.sh ———– #!/bin/bash #SBATCH -n 14 #SBATCH -p all #SBATCH -o slurm.%N.%j.out # stdout goes here #SBATCH -e slurm.%N.%j.out # stderr goes here srun -n 14 -c 2 ./a.out srun -n 14 -c 2 ./b.out srun -n 14 -c 2 ./c.out … ———– $sbatch seq.sh

איך מריצים עבודות במקביל?

 

par.sh ———– #!/bin/bash #SBATCH -p all #SBATCH -n 56 #SBATCH -o slurm.%N.%j.out # stdout goes here #SBATCH -e slurm.%N.%j.out # stderr goes here srun -n 14 ./a.out & srun -n 28 ./b.out & srun -n 14 ./c.out & … wait ———– $sbatch par.sh

שימו לב ל & בסוף כל שורה. כמו כן שימו לב לפקודת wait בסוף הגורמת לעבודת sbatch לחכות שכל עבודות הסתיימו.