מדריך למשתמש צבר הוראה

הקדמה

מערכת מנ”ע היא מערכת המשדכת בין משאבים שהוקצו לרשותה ובין דרישות המשתמשים.בהקשר שלנו המשאבים הם יחידות חישוב(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
השרת נגיש רק בתוך הטכניון. אפשר לגשת אליו דרך שרתים פקולטים הפתוחים מחוץ לטכניון(csl2,csm,csa) וכו’

מערכת מק”מ(מערכת קבצים מבוזרת)

מערכת מק”מ הינה מערכת קבצים מבוזרת. ספריית הבית של המשתמשים נמצאת ב
/home /username ספרייה זו מסונכרנת מול שרתי החישוב באותו מיקום בעץ ספריות שלהם. כלומר /home /almoni בשרת הכניסה זהה בתוכנו ל /home/almoni בכל השרתי החישוב, כל קובץ שיווצר במקום אחד יופיע בכל אחד מהשרתים בצבר באותו המקום.

צורת עבודה עם מנ”ע

למערכת מנ”ע יש כמה סוגים של פקודות(בסוף המסמך זה יש פירוט של רובם), sinfo,squeue הם פקודות שיתנו לכם לראות את המצב בצבר, sinfo יראה את המצב של התורים השונים הקיימים. Squeue יראה את העבודות העומדות בתור(כולל אלו שרצות בפועל כרגע). סוג שני של פקודות הם srun,sbatch, אלו פקודות ההרצה, כלומר כדי לשלוח עבודה משתמשים בהם. יש שני סוגים של עובדות. Srun, משתמשים בדר”כ לעבודות קצרות,פשוטות, הפלט של העבודה שנשלחה יודפס ישירות למסך ממנו נשלחה העבודה. לעומת זאת בסוג השני –  sbatch , אפשר לשלוח מס’ רב של עבודות אחת אחרי השניה, הפלט נשלח לקבצים(יוסבר בהמשך) ולא למסך. במצב srun כל בעית תקשורת בדרך בינכם לשרת החישוב עליו רצה העבודה, תפסיק את העבודה. בעיה זו לא קיימת במצב sbatch.

שני דוגמאות לעבודה עם מנ”ע

דוגמה ראשונה: הכנת סביבת עבודה

  1. Login to rishon
    ssh -X example@rishon.cs.technion.ac.il
  2. Print partitions(queues states)
    sinfo
  3. Print jobs states
    squeue -o “%.18i %.9P %.8j %.8u %.2t %.10M %.6D %R %Q”
  4. 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.
  5. See your job in the queue
    squeue -o “%.18i %.9P %.8j %.8u %.2t %.10M %.6D %R %Q”
  6. Edit .bashrc file
    enter ~/.bashrc file with:
    nano ~/.bashrc
    add as last line the following:
    export LC_ALL=”en_US.UTF-8″
  7. 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

את הכתובת שמקבלים יש כמובן להעתיק לדפדפן המקומי על המחשב שלנו