להלן אוסף שאלות ותשובות נפוצות
איך להתקין גירסת tensorflow שתומכת בפקודות מכונה חדשות
pip install –user –ignore-installed –upgrade “Download URL”
The download url of the whl file can be found here https://github.com/lakshayg/tensorflow-build
לאובונטו 16.04 זה יוצא:
python3 -m pip install –user –ignore-installed –upgrade https://github.com/lakshayg/tensorflow-build/releases/download/tf1.12.0-macOS-mojave-ubuntu16.04-py2-py3/tensorflow-1.12.0-cp35-cp35m-linux_x86_64.whl
איך מקבלים את המעבדים הכי קרובים לכרטיס גרפי?
לפקודות 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 לחכות שכל עבודות הסתיימו.