מדריך למשתמש צבר מחקר

k

הקדמה

מערכת מנ"ע היא מערכת המשדכת בין משאבים שהוקצו לרשותה ובין דרישות המשתמשים. בהקשר שלנו המשאבים הם יחידות חישוב(cores) וכרטיסים גרפיים(gpu).

צורת העבודה עם מנ"ע היא ע"י הגשת עבודות לביצוע לתור נדרש. המערכת דואגת לתזמן כל עבודה עפי מס' רב של קריטריונים הכוללים איכות שירות(QOS) יחסיות (fair share) ועוד. עפ"י שיקלול זה כל עבודה מקבלת עדיפות וממוקמת בתור.

ישנה אפשרות לעבוד לזמן קצר בצורה אינטראקטיבית כך שמקבלים shell למכונה המבוקשת לצורכי דיבוג שגיאות או בדיקות קצרות. זמן מקסימלי לעבוד בצורה זו הוא 30 דקות.

רכיבי המערכת

שרת כניסה – זהו השרת שאליו המשתמשים נגשים עם החשבון שלהם. ממנו יש גישה לכל התורים הרלוונטים וממנו משתמשים שולחים עבודות לביצוע.

שם השרת: gaon.cs.technion.ac.il או בקיצור gaon

שרתי עבודה(nodes) : אלו השרתים המריצים את העבודות בפועל

שמות השרתים: …gaon1,gaon2,gaon3

התחברות למערכת


אימות משתמשים נעשה באמצעות AD, כלומר החשבון במנ"ע הוא החשבון בפקולטה, עם אותו השם ואותה הסיסמה. שם המשתמש הוא מהצורה username(אין צורך לציין td-csf\username). הסיסמה היא הסיסמה של td-csf

שרת הכניסה: gaon.cs.technion.ac.il
צורת התחברות : ssh
השרת נגיש רק בתוך הטכניון. אפשר לגשת אליו דרך שרתים פקולטים הפתוחים מחוץ לטכניון(csl,csm,csa) וכו'

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

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

רשימת תפוצה

כפי שאפשר לראות המערכת מורכבת מכמה חלקים ובאופן טבעי תצטרך לעבור תחזוקה שיפורים ושדרוגים. על מנת לאפשר לכל משתמש להיערך מראש להשבתות יצרנו בשבילכם רשימת תפוצה אליה ישלחו חדשות עידכונים בנוגע לצבר המחקר.

אפשר להרשם בלינק : http://listserv.technion.ac.il/cgi-bin/wa?SUBED1=CS-LABS-L&A=1

שימו לב, לבחור בקטגורית Topcis ב gaoncluster.

מערכת ניטור

ישנה אפשרות את מצב הצבר ברגע נתון ע"י מערכת ניטור. המערכת נותנת גרפים שונים וסטטיסטיקות, כמו למשל מס' GPU פנויים, כמו CPU בשימוש וכו'.

הגישה אליו: https://sysgrafana.cs.technion.ac.il/dashboard/db/slurm-full-dyn?refresh=30s&orgId=1

משתמש: gaon
סיסמה:gaongaon

המערכת היא לצפייה בלבד.

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

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

על מנת לראות את ההגבלות על הרצות במערכת יש להתשמש בשני הפקודות הבאות:
sinfo, פקודה זו תיתן בין היתר את הזמן המקסימלי להרצה בודדת. לדוגמה 07-00:00:00 הכוונה 7 ימים בדיוק.
sacctmgr show qos, יראה את ההגבלות/יכולות של כל quality of service המוגדרים במערכת.
לדוגמה, ניתן למשל לראות את הפרמטר MaxSubmitPU המגביל את מס' העבודות שאפשר לשלוח לתור בו זמנית ע"י משתמש יחיד.

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

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

    1. Login to gaon
      ssh -X example@gaon.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 gip,all -c2 --gres=gpu:1 --pty bash
      Explanation:
      -p all,gip submit the job to two queues(all,gip) , 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 its lab queue(gip) and if this queue is too busy it can ran with lower priority on other servers in "all" queue.
      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"
      source /etc/profile.d/modules.sh

      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(gaon)


module load cuda/9.2-7.2.1
pip3 install --user --upgrade pip
pip3 install --user --upgrade tensorflow-gpu
pip3 install --user http://download.pytorch.org/whl/cu90/torch-0.3.1-cp35-cp35m-linux_x86_64.whl
pip3 install --user torchvision
pip3 install --user numpy scipy matplotlib keras

  • Test evironment
    python3
    >>>import tensorflow as tf
    >>>tf.__version__
    '1.11.0'
    >>>import keras
    Using TensorFlow backend.
    >>>import torch
    no output is good

 

שאלת הבנה: האם הסביבה הותקנה בשרת חישוב שאליו התחברתי בלבד או לכל שרתי החישוב?

תשובה: למרות שהתקנו את הסביבת פיתוח בשרת חישוב ספציפי, הסביבה בעצם הותקנה בכל השרתי חישוב במקביל. שני סיבות לדבר, הראשון שהתקנה בהקשר שלנו היא רק הורדת קבצים והעתקתם לספרייה ספציפית בתוך ספרית הבית שלכם, והשני הוא שהספריות בית שלכם משותפות לכל השרתים. המשמעות היא שאתם יכולים עכשיו להריץ עבודות מבלי להיות נעולים על השרת בו התקנתם את הסביבה שלכם. כמובן שזה נכון להתקנות מסוג pip ודומיו, להתקנות מסוג אחר למשל apt-get זה לא יהיה נכון.

דוגמה שנייה: הרצת main.py של mnist

אני מניח שהורדתם את הקובץ והעתקתם אותו לשרת gaon לספריית הבית שלכם.
שימו לב לשנות בשני מקומות ב main.py את הביטוי "../data" ל "data" (כלומר להוריד את הנקודותיים והסלש)

  1. Login to gaon
    ssh -X example@gaon.cs.technion.ac.il
  2. Create file exp2.bash containing:

#!/bin/bash
#SBATCH -N 1 # number of minimum nodes
#SBATCH -c 2 # number of cores
#SBATCH --gres=gpu:1 # Request 1 gpu
#SBATCH -p gip,all # submit the job to two queues(all,gip) , once it gets elected to run in one of them , it automatically removed in the other
#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

source /etc/profile.d/modules.sh
module load cuda/9.2-7.2.1
nvidia-smi
source ~/tensorflow/bin/activate
python3 main.py

      1.  chmod +x exp2.bash
      2. From gaon server run
        sbatch exp2.bash
      3. Lookit up in queue list
        squeue -o "%.18i %.9P %.8j %.8u %.2t %.10M %.6D %R %Q"
      4. View it output
        tail -f ~/slurm.NodeName.JobID.out (fill in your NodeName,JobID)
        Example output:
        tail -f slurm.gaon3.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

דוגמה שלישית: cifar10

הרצה לדוגמה של cifar10 על שרתי חישוב

1. Login to gaon
ssh username@gaon.cs.technion.ac.il

2. add to .bashrc: source /etc/profile.d/modules.sh

3. Run the following:
srun --gres=gpu:1 -c2 --pty bash (for 1 gpu)
pip3 install --user --upgrade pip
python3 -m pip install --user --upgrade tensorflow-gpu==1.11

source ~/.bashrc
cp -r /home/EnvModules/packages/other/cifar10Tutorial/cifar10 ./
cd cifar10
module load cuda/9.2-7.2.1
python3 cifar10_train.py

עבודה עם ג'ופיטר

התקנה:

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

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

הערות

מדיניות הרצות

  • כל עבודה תרוץ 60 דקות אלא אם כן המשתמש ביקש אחרת במפורש(–time).
  • עבודות אינטרקטיביות(למשל bash) יסגרו אוטומטית אחרי 50 דקות.
  • כל עבודה תסגר אחרי לכל היותר 7 ימים.
  • ככל שהשימוש במשאבים בזמן הרצת העבודה נמוך יותר, כך העדיפות לעבודה באה נמוך יותר.
    למשל אדם שהריץ עבודה וביקש 13 שעות, ומתוכם בפועל הריץ שעה אחת בלבד, יקבל ניקוד שלילי לעדיפות של העבודות הבאות שלו הרזולוציה היא של 12 שעות. (הפרשים של מס' שעות קטן אינו משמעותי)