הקדמה
מערכת מנ”ע היא מערכת המשדכת בין משאבים שהוקצו לרשותה ובין דרישות המשתמשים.בהקשר שלנו המשאבים הם יחידות חישוב(cores) וכרטיסים גרפיים(gpu).
צורת העבודה עם מנ”ע היא ע”י הגשת עבודות לביצוע לתור נדרש. המערכת דואגת לתזמן כל עבודה עפי מס’ רב של קריטריונים הכוללים איכות שירות(QOS) יחסיות (fair share) ועוד. עפ”י שיקלול זה כל עבודה מקבלת עדיפות וממוקמת בתור.
ישנה אפשרות לעבוד לזמן קצר בצורה אינטראקטיבית כך שמקבלים shell למכונה המבוקשת לצורכי דיבוג שגיאות או בדיקות קצרות. זמן מקסימלי לעבוד בצורה זו הוא 30 דקות.
רכיבי המערכת
שרת כניסה – זהו השרת שאליו המשתמשים נגשים עם החשבון שלהם. ממנו יש גישה לכל התורים הרלוונטים וממנו משתמשים שולחים עבודות לביצוע.
שם השרת: rishon.cs.technion.ac.il או בקיצור rishon
שרתי עבודה(nodes) : אלו השרתים המריצים את העבודות בפועל
שמות השרתים: rishon1,rishon2,rishon3,rishon4
התחברות למערכת
אימות משתמשים נעשה באמצעות AD, כלומר החשבון במנ”ע הוא החשבון בפקולטה, עם אותו השם ואותה הסיסמה. שם המשתמש הוא מהצורה username(אין צורך לציין td-csf\username). הסיסמה היא הסיסמה של td-csf
שרת הכניסה: rishon.cs.technion.ac.il
צורת התחברות : ssh
השרת נגיש רק בתוך הטכניון.
ניתן לגשת אליו על ידי שימוש בחיבור VPN בלבד.
להלן ההוראות להגדרת חיבור VPN
Pulse Settings: https://cis.technion.ac.il/en/central-services/communication/off-campus-connection/ssl-vpn/
Token Settings: https://cis.technion.ac.il/en/central-services/communication/off-campus-connection/otp/
במקרה של תקלה בחיבור VPN אנא צרו קשר :
https://cis.technion.ac.il/en/support/contact-cis-support/
מערכת מק”מ(מערכת קבצים מבוזרת)
מערכת מק”מ הינה מערכת קבצים מבוזרת. ספריית הבית של המשתמשים נמצאת ב
/home /username ספרייה זו מסונכרנת מול שרתי החישוב באותו מיקום בעץ ספריות שלהם. כלומר /home /almoni בשרת הכניסה זהה בתוכנו ל /home/almoni בכל השרתי החישוב, כל קובץ שיווצר במקום אחד יופיע בכל אחד מהשרתים בצבר באותו המקום.
צורת עבודה עם מנ”ע
למערכת מנ”ע יש כמה סוגים של פקודות(בסוף המסמך זה יש פירוט של רובם), sinfo,squeue הם פקודות שיתנו לכם לראות את המצב בצבר, sinfo יראה את המצב של התורים השונים הקיימים. Squeue יראה את העבודות העומדות בתור(כולל אלו שרצות בפועל כרגע). סוג שני של פקודות הם srun,sbatch, אלו פקודות ההרצה, כלומר כדי לשלוח עבודה משתמשים בהם. יש שני סוגים של עובדות. Srun, משתמשים בדר”כ לעבודות קצרות,פשוטות, הפלט של העבודה שנשלחה יודפס ישירות למסך ממנו נשלחה העבודה. לעומת זאת בסוג השני – sbatch , אפשר לשלוח מס’ רב של עבודות אחת אחרי השניה, הפלט נשלח לקבצים(יוסבר בהמשך) ולא למסך. במצב srun כל בעית תקשורת בדרך בינכם לשרת החישוב עליו רצה העבודה, תפסיק את העבודה. בעיה זו לא קיימת במצב sbatch.
שני דוגמאות לעבודה עם מנ”ע
דוגמה ראשונה: הכנת סביבת עבודה
- Login to rishon
ssh -X example@rishon.cs.technion.ac.il - Print partitions(queues states)
sinfo - Print jobs states
squeue -o “%.18i %.9P %.8j %.8u %.2t %.10M %.6D %R %Q” - Ask for bash shell in one of the computing servers
srun -p 236605,all -c2--
gres=gpu:1--
pty bash
Explanation:
-p 236605,all submit the job to two queues(all,236605) , once it gets elected to run in one of them , it automatically removed in the other. this way the user benefit using his higher priorty on his course queue(236605 or 236370) and if this queue is too busy it can ran with lower priority on other servers in all queue.
make sure you write the course number you enroll to.People who are not enroll to either of these courses, should not run with this flag, the system will route them according to their status.c2 – ask for 2 cores
gpu:1 – ask for 1 gpu of any type
--
pty bash – gives terminal in one of the computing node. - See your job in the queue
squeue -o “%.18i %.9P %.8j %.8u %.2t %.10M %.6D %R %Q” - Edit .bashrc file
enter ~/.bashrc file with:
nano ~/.bashrc
add as last line the following:
export LC_ALL=”en_US.UTF-8″ - Install development environment (notice the
--user
! )
This is an example for tensorflow + pytorch + keras, change it for your own needs.
Only run in computing node, not on login server(rishon)
%pip3 for python 3.5 or pip2 for python 2.7
pip3 install --user --upgrade pip
pip3 install --user --upgrade tensorflow-gpu==1.11
pip3 install --user http://download.pytorch.org/whl/cu90/torch-0.3.1-cp35-cp35m-linux_x86_64.whl
(pip2 install --user http://download.pytorch.org/whl/cu90/torch-0.3.1-cp27-cp27mu-linux_x86_64.whl)
pip3 install --user torchvision
pip3 install --user numpy scipy matplotlib keras
* if pip3/pip2 doesn’t work , use: python3/2 -m pip install –user ….
Test evironment
source ~/tensorflow/bin/activate
python
>>>import tensorflow as tf
>>>tf.__version__
‘1.5.0’
>>>import keras
Using TensorFlow backend.
>>>import torch
no output is good
שימו לב, בקשה לshell, למשל כמו פה –pty bash הינה מוגבלת ל 50 דקות ומיועדת לניפוי שגיאות. להרצות אמיתיות יש להריץ את הסקריפט עצמו ולא לפתוח shell ומתוכו להריץ פקודות.
שאלת הבנה: האם הסביבה הותקנה בשרת חישוב שאליו התחברתי בלבד או לכל שרתי החישוב?
תשובה: למרות שהתקנו את הסביבת פיתוח בשרת חישוב ספציפי, הסביבה בעצם הותקנה בכל השרתי חישוב במקביל. שני סיבות לדבר, הראשון שהתקנה בהקשר שלנו היא רק הורדת קבצים והעתקתם לספרייה ספציפית בתוך ספרית הבית שלכם, והשני הוא שהספריות בית שלכם משותפות לכל השרתים. המשמעות היא שאתם יכולים עכשיו להריץ עבודות מבלי להיות נעולים על השרת בו התקנתם את הסביבה שלכם. כמובן שזה נכון להתקנות מסוג pip ודומיו, להתקנות מסוג אחר למשל apt-get זה לא יהיה נכון.
דוגמה שנייה: הרצת main.py של mnist
שימו לב, לשלב הראשון שבו נכנסים לשרת rishon, זה לא שלב טריוויאלי, אם תריצו עבודות תוך כדי שאתם בbash שקיבלתם בדוגמה הקודמת דברים לא יעבדו כמו שאתם מצפים.
אני מניח שהורדתם את הקובץ והעתקתם אותו לשרת rishon לספריית הבית שלכם.
שימו לב לשנות בשני מקומות ב main.py את הביטוי “../data” ל “data” (כלומר להוריד את הנקודותיים והסלש)
- Login to rishon
ssh -X example@rishon.cs.technion.ac.il - Create exp2.bash, using nano or vi
#!/bin/bash
#SBATCH -N 1 # number of minimum nodes
#SBATCH -c 2 # number of cores
#SBATCH –gres=gpu:1 # Request 1 gpu
#SBATCH -p 236370,all # or 236605,all for more details see explanation above (srun command)
#SBATCH –mail-user=example@cs.technion.ac.il
# (change to your own email if you wish to get one, or just delete this and the following lines)
#SBATCH –mail-type=ALL # Valid values are NONE, BEGIN, END, FAIL, REQUEUE, ALL
#SBATCH –job-name=”just_a_test”
#SBATCH -o slurm.%N.%j.out # stdout goes here
#SBATCH -e slurm.%N.%j.out # stderr goes here
nvidia-smi
source ~/tensorflow/bin/activate
python3 main.py - From rishon server run
sbatch exp2.bash - Lookit up in queue list
squeue -o “%.18i %.9P %.8j %.8u %.2t %.10M %.6D %R %Q” - View it output
tail -f ~/slurm.NodeName.JobID.out (fill in your NodeName,JobID)
Example output:
tail -f slurm.rishon3.103512.out
Train Epoch: 3 [53760/60000 (90%)] Loss: 0.172956
Train Epoch: 3 [54400/60000 (91%)] Loss: 0.340682
Train Epoch: 3 [55040/60000 (92%)] Loss: 0.294907
Train Epoch: 3 [55680/60000 (93%)] Loss: 0.243409
Train Epoch: 3 [56320/60000 (94%)] Loss: 0.262233
Train Epoch: 3 [56960/60000 (95%)] Loss: 0.220493
Train Epoch: 3 [57600/60000 (96%)] Loss: 0.375372
Train Epoch: 3 [58240/60000 (97%)] Loss: 0.156547
Train Epoch: 3 [58880/60000 (98%)] Loss: 0.272710
Train Epoch: 3 [59520/60000 (99%)] Loss: 0.129080
Troubleshoot: If the output seems wrong, you can see the output live using srun instead of sbatch.
srun -c2 -N1 --gres=gpu:1 --job-name="just_a_test" exp2.bash
Don’t forget to chmod +x exp2.bash.
עבודה עם ג’ופיטר
התקנה:
python3 -m pip install --upgrade --user pip
python3 -m pip install --user jupyterlab
השלב הבא הוא ליצור סקריפט שיחסוך לנו הקלדות, אנא צרו קובץ בשם jl.bash עם התוכן הבא:
#!/bin/bash
hn=`hostname -I`
unset XDG_RUNTIME_DIR
.local/bin/jupyter-lab --no-browser --ip=$hn --port=PORT
נא לבחור PORT כמספר בתחום 2000 ומעלה
example@gaon:~$chmod +x ./jl.bash
ועכשיו אפשר לקבל ג’ופיטר לאב על המחשב שלנו שרץ על השרתי חישוב
example@gaon:~$srun -c4 --gres=gpu:1 --pty jl.bash
את הכתובת שמקבלים יש כמובן להעתיק לדפדפן המקומי על המחשב שלנו