הקמת HPC – מקומית או בענן? נקודות למחשבה

חדש! אין לכם כח לקרוא? אתם יכולים ללחוץ על הקישור כאן או להסתכל בסוף הפוסט על וידאו קצרצר המסכם את הפוסט.

עולם ה-HPC הוא עולם שמתקדם בקצב איטי. עד לפני שנים מעטות, השינויים המהותיים היו יותר קשורים ל-Job management פופולרי (slurm ש"כבש" פופולריות במקום ה-Sun Grid Engine לדוגמא, שהפך לאחר מכן ל-Son of Grid Engine) וברוב המקרים כשהיה מדובר על מערכות גדולות (עשרות, מאות שרתים ומעלה) חברות כמו Dell ו-HPE החליפו שרתים של Sun (לאלו שהיתה להם מערכת HPC ישנה יותר).

בשנים האחרונות, מספר טכנולוגיות חדשות נכנסו לעולם ה-HPC וחלקן בדרך להיכנס:

  • מבחינת מערכת File system מרכזית – ל-Lustre עדיין יש מקום ורלוונטיות (גירסה חדשה שוחררה רק בחודש שעבר), אך במקביל, מערכות כמו Gluster ו-CEPH תפסו מקום נכבד כ-Scale Out Storage
  • יותר ויותר חברות עוברות לשימוש מאסיבי יותר בכרטיסי GPU יעודיים (V100, A100 של NVIDIA, וכרטיסים אחרים לעיבוד AI/ML/DL מחברות כמו AMD ואיננטל יכנסו בקרוב לשוק בצורה יותר רצינית).
  • חיבוריות/רשת תקשורת פנימית עוברת שדרוג רציני. במקרים רבים, חברות היו משתמשות בחיבור סיב במהירות של 10 ג'יגהביט, כיום בד"כ ההמלצה היא 50 ג'יגהביט ומעלה.

רכישת שרתים להקמת HPC היתה מעט מורכבת, הואיל והיה צריך לבצע מספר חישובים (כמות וגודל דיסקים, כמות ליבות פר מעבד פר שרת, מהירות תקשורת בין המכונות לצרכי File system ולצרכים אחרים, צרכים של פלטפורמות וספריות שונות, רישוי ועוד דברים רבים נוספים) ולאחר מכן היו פותחים במעין "מכרז" בו מתמודדות חברות שונות, ולבסוף היו סוגרים עם נציגות של אחד מהיצרנים או האינטגרטורים (אני מודע לכך שבמציאות כל התהליך היה הרבה יותר ארוך ומורכב, אך לשם פוסט זה אני מפשט את הדברים).

כיום חברות כמו NVidia מציעות שרתי DGX במחיר שווה: במחיר של 200-220K אתה מקבל שרת עם 2 טרהבייט זכרון, 8 מודולי GPU מסוג A100 (עם 80 ג'יגהבייט זכרון פר מודול), אחסון מקומי בגודל 36 טרהבייט, 128 ליבות (2 מעבדי AMD EPYC עם 64 ליבות), קישוריות רציפה בין מודולי ה-GPU (זה ה-NVSwitch) ומספר חיבורים במהירות 200 ג'יגהביט. עם קופסאות כאלו, בדרך כלל תצטרך לרכוש מתג (או מתגים, תלוי בקופסא) ותצטרך לדאוג לפתרון אחסון Scale Out (אם מדובר ברכישה של 10+ שרתים) וגם פתרון אחסון יותר איטי – והרי לך פתרון HPC בסיסי ברמה העקרונית (כמובן שברזלים זה נחמד, אבל יש המון עבודה להתקין דברים, להגדיר, אוטומציה, Job Management ועוד ועוד)

בשנתיים (פלוס) האחרונות ישנו פתרון נוסף שבעבר לא היה קיים – הענן הציבורי ופתרונות HPC, וכאן נכנסת דילמה רצינית לאלו שרוצים לשדרג מערכת HPC קיימת או לבנות מערכת HPC חדשה, ואין זה משנה הם הארגון הוא סטארט-אפ, משרד ממשלתי, מוסד חינוכי, חברה מסחרית או כל ישות אחרות. הדילמה היא פשוטה:

לרכוש ולבנות "משלנו" או ללכת עם פתרון ענן של ParallelCluster של AWS (או פתרון של Azure או GCP)?

על מנת לענות על שאלה זו, נצטרך בשלב הראשון לחלק בעצם את פתרון ה-HPC ל-2 חלקים:

חלק ראשון הוא הגוף שמקים ומתחזק את פתרון ה-HPC בחברה/ארגון. ברוב המקרים זו תהיה מחלקת ה-IT, ומה שמחלקת ה-IT בעצם תתחיל לעשות (לאחר הקמת פתרון ה-HPC) הוא בעצם "למכור" את המשאבים למחלקות השונות – לפי כמות ליבות, כמות שעות שימוש ועוד.

החלק השני הן המחלקות השונות שהן ה"רוכשות" משאבי HPC לצרכיהן: מהנדסים, מדענים, ומחלקות שונות שמעוניינות להשתמש בשרותי HPC ולפיכך הן "רוכשות" כמות מסויימת של שעות, והחישוב כולל כמובן את מה שמשתמשים בפועל: ליבות, אחסון, GPU ועוד.

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

וכאן, אם אנחנו מדברים על שעות, פתרונות מבוססי ענן נכנסים לתמונה, עם מספר יתרונות גדול בענן שלא קיימים ב-HPC המוקמים מקומית:

  • זמינות לעבודה מיידית: בין אם אתה צריך 1000 או 10000 ליבות, בין אם אתה צריך 2 או 300 כרטיסי GPU החדשים ביותר – הם זמינים עבורך תוך דקות ספורות. אין צורך להמתין שהמערכת תתפנה, או להבין שאין ב-HPC המקומי את הציוד שאתם כלקוח צריכים.
  • התשלום הוא רק עבור שימוש: הפעלתם דרישה של 1000 ליבות לעבודה שלקחה שעתיים ו-14 דקות? על כך בדיוק תשלמו (פלוס האחסון, תעבורת אינטרנט וכו'). בסיום ה-JOB בדרך כלל (בהתאם להגדרות) המערכת "תהרוג" את כל ה-Nodes המשתתפים בעבודה (לאחר שהחומר הרלוונטי הועבר לאחסון), מה שמאפשר ביצוע עבודות רבות עם תקציב קטן יחסית, גם לסטארט-אפים.
  • מבחר ענק של ציוד: צריכים מכונות חזקות מאוד? חלשות (עם תשלום נמוך)? עם 2 כרטיסי GPU? ללא כרטיסי GPU? עם מהירות תקשורת של מאות ג'יגהביט? עם אחסון במהירות 7 ספרות IOPS? ברוב פתרונות ה-HPC, האפשרויות מצומצמות מאוד, ובענן – כל מה שצריך זה לבחור ולשנות שורה אחת בקובץ קונפיגורציה.
  • תאימות: רגילים לעבוד עם SGE, עם Slurm, עם Torque? רוב הסיכויים שפתרון ה-HPC בענן כבר תומך ב-Job Management שאתם רגילים אליו, ולכן מעבר לשימוש HPC בענן יהא יחסית קל.

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

המחיר, שבהתחלה נראה יחסית צנוע (במיוחד שאפשר לבחור שרתים זולים, לדוגמא), מטפס במהירות כלפי מעלה כשבוחרים מכונות חזקות. רוצה יותר מ-60 ליבות? רוצה 8 כרטיסי GPU במכונה? בשמחה, המחיר מתחיל ב-30 דולר ומעלה לשעה פר מכונה, ואם אנחנו רוצים להשתמש בכך למשך שעות רבות או לתקופה באופן רצוף – המחיר יהיה גבוה מאוד.

לעומת זאת, אם נרכוש מערכת ונחלק את כל העלויות ל-3 שנים בחלוקה לשעות, סביר להניח שנגיע למחיר שיהיה יותר זול ממה שספק הענן מציע, וכאן יש את ה"סוד" הכי ידוע על תשתיות ענן: הן זולות כשהמשאבים הנדרשים נמוכים, אך כשכל שמטפסים בדרישות, המחירים מזנקים לגובה עד לסיטואציות בהן פתרון On Prem יהיה הרבה יותר זול.

ישנן סיטואציות בהן ההחלטה היא יותר קלה לכאן או לכאן:

  • האם יש דרישה למשאבים? (שימו לב: יש במובן הוודאי, לא "תהיה" (במובן של "אולי")) לשימוש ארוך טווח? ולניצול רוב המשאבים? במקרים כאלו, כדאי לחשוב על רכישה והקמה מקומית.
  • אם מדובר בשרות של גופים חיצוניים שאינם מחוייבים לאותו ספק HPC, ושאותם גופים חיצוניים יכולים לפנות למתחרים כמו ספקי ענן – יהיה כדאי לבדוק לעומק את מידת הרצינות של הגוף להתחייב לספק. בל נשכח שספקי ענן יכולים (ומציעים) לגופים שונים מחירי רצפה שיכולים להפוך השקעת הקמת HPC להשקעה בלתי כדאית.

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

למעוניינים – גירסת וידאו קצרה המסכמת את הפוסט:

חושבים להקים HPC?

עם כניסת העננים הציבוריים לחיינו ול"חיים" של חברות, תחום ה-HPC (כלומר High Performance Computing – כשמקימים פרויקט ובו תשתית עם כמות שרתים גדולה כדי להריץ דברים שונים כמו חישובים בצורה מרוכזת) ירד מעט מסולם הפופולריות. אחרי הכל, אם אני יכול לשכור 50 שרתים (פיזיים/וירטואליים) מאמזון בכמה קליקים, אז בשביל מה לרכוש ברזלים?

אבל מה לעשות שעננים זה דבר נחמד, אבל במקרים רבים חברות דווקא לא מעוניינות לקחת מכונות בענן אלא להקים להם בחוות שרתים המקומית את התשתית. הסיבות לכך מגוונות: חלקם עקב רגולוציה, חלקם בגלל אבטחת מידע, סיבות בטחוניות ויש כמובן את אלו שכבר עשו את החישובים שלהם ויצא להם שעדיף לרכוש מקומית ברזלים ולהשתמש איתם בחווה בחברה (הויכוח אם זה משתלם בענן או לא – לא יסתיים בקרוב).

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

למערכות HPC יש מגוון רחב מאוד של שימושים כמו סימולציות, AI ושאר דברים נוספים. מטבע הדברים כל מערכת HPC ענקית דורשת בדרך כלל קונפיגורציה משלה, אך בפוסט זה אכתוב כמה כללי אצבע שחשובים כמעט בכל מערכת HPC. אלו דברים חשובים במיוחד לחברות שמקימות מערכת HPC ראשונה בחברה (כן ירבו 🙂 ).

הדבר הראשון החשוב ביותר בכל מערכת ה-HPC הוא כח החישוב (בגלל זה צריך את השרתים) ולכן יש צורך בתצורה מסויימת. התצורה המומלצת היא שרתים עם 2 מעבדים או מעבד אחד מרובה ליבות. בד"כ זה יהיה שרת 1U או 2U.

מבחינת מעבדים – אני ממליץ על AMD EPYC ולא על Xeon מהסיבה הפשוטה שעל כל כמות X ליבות שאתם קונים במעבד Xeon, אתם מקבלים כפול עם EPYC וכבונוס אתם מקבלים גם יותר נתיבי PCIe (אם צריך להכניס יותר GPU או כרטיסים נוספים) ויותר L3 Cache במעבד ובנוסף חסכון של אלפי דולרים פר מכונה. אם הולכים על מעבדי EPYC, אז השרתים שאני ממליץ:

  • Dell – שרת 1U R6415 (עם מעבד 1 עד 32 ליבות) או שרת R7425 עם 2 מעבדים (עד 64 ליבות)
  • HPE (דור 10): שרת DL325 (מעבד 1, עד 32 ליבות), DL385 (כ-2 מעבדים, עד 64 ליבות). אם אתם חושבים על הקמת HPC בסוף השנה/התחלת שנה הבאה, אולי תתעניינו גם בשרת ה-CL3150 של HPE.

חברות כמו Cisco מציעות פתרונות מבוססי Nodes שבהם ניתן להכניס 4 שרתים בתצורת 2U. זה נראה כך:

זה נחמד, אבל לא כל כך מתאים ל-HPC בגלל המחיר היקר, מה גם שקשה מאוד להוסיף דברים למכונה כזו, ולכן אני לא ממליץ על תצורה של מכונה כזו או Blade.

מבחינת וירטואליזציה: סביר להניח שלא תריצו וירטואליזציה או שאולי תריצו וירטואליזציה לצרכי Storage שהוא Scale Out (לא ממש צריך וירטואליזציה בשביל זה, יש cgroups בלינוקס). אם אתם חייבים וירטואליזציה, חפשו פתרון זול ועדיף מבוסס קוד פתוח, אחרת כל פתרון מסחרי "ינפח" את המחיר הכללי בעשרות אחוזים.

מבחינת סטורג': ברוב המקומות שתראו HPC, לא תראו סטורג' מרכזי כמו NetApp או EMC. הפתרון לסטורג' בדרך כלל הוא פתרון Scale Out מבוסס קוד פתוח, כמו Ceph או Gluster, ואם אתם רוצים את הפתרון קוד פתוח בגירסה מסחרית, אתם יכולים לרכוש מ-SuSE ישראל או מ-Red Hat בארץ.

מכיוון שסטורג' Scale Out נסמך על דיסקים, תצטרכו דיסקים מקומיים על כל מכונה. כאן אני ממליץ להשקיע ב-SSD NVME בתצורת Mixed Intense. ישנם כאלו שמעדיפים להשתמש ב-SSD ובדיסקים מכניים, אבל כפי שניתן לקרוא בפתרונות Storage כמו Ceph – זה לא מומלץ.

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

תקשורת – 10/25/40/50 ג'יגה – זו צריכה להיות החלטה שלכם. יש מספר יצרנים שמוכרים סוויצ'ים – HPE, DELL, JUNIPER, CISCO – מה שחשוב הוא חיבור מהיר (לא 1 ג'יגה ולא 1 ג'יגה ב-Bond) ולפחות חיבור כפול ומתגים כפולים על מנת לקבל שרידות גבוהה. אפשר לחבר את השרתים למתגים בחיבור אופטי או DAC/TwinAx נחושת, החלטה שלכם, אין ממש הבדלים בין השתיים.

אוטומציה: קניתם עשרות שרתים לפרויקט HPC, אתם צריכים אוטומציה, אין דרך להתחמק מכך. בד"כ ההמלצה שלי היא על Ansible, אבל יש כמובן גם SALT, Puppet, Chef. צוות הלינוקס בחברה יכול לאמר מה העדפותיו.

הפצת לינוקס: נדיר מאוד שתמצאו HPC שמריץ Windows, כי כולם מריצים לינוקס, ולכן יש צורך בהפצת לינוקס שתהיה על כולם. בהתאם למדיניות בחברה זה יכול להיות RHEL של רד האט או CentOS 7 החינמי, או SLE של SuSE (ואם אתם מתעקשים על אובונטו, רק גירסת שרת LTS). כפי שציינתי לעיל – גם לרד-האט וגם ל-SuSE יש נציגות בארץ.

שימוש ב-GPU בכל שרת: כאן זה מאוד תלוי מה אתם הולכים להריץ. מכיוון שאין וירטואליזציה בשרתים, אפשר להשתמש בכל GPU (הערה: רשמית, nVidia אוסרת שימוש בכרטיסי GTX בשרתים, אחרת נו נו נו לכם), אך מצד שני, כרטיסי Tesla לאו דווקא יתנו ביצועים יותר גבוהים, אלא אם אתם צריכים הרבה יותר VRAM בכרטיס ה-GPU.

חלוקת עומסים ועבודות: למעט אם אתם מריצים קונטיינרים (ששם מערכות כמו OpenShift, CAASP או Kubernetes דואגות לאיזון עומסים בין השרתים), תצטרכו למצוא תוכנה שמנהלת את התורים והעומסים בהתאם למה שאתם הולכים להריץ. ישנם מגוון תוכנות לפלטפורמות שונות עם API לשימוש פנימי של החברה.

תאימות קדימה: במקום לזרוק את המכונות בעוד 3-4 שנים, אפשר לשדרג אותם מבחינת מעבדים, אבל חשוב לשים לב עם אלו מעבדים רוכשים: שרתים מבוססי EPYC של AMD – מובטחת תאימות קדימה לדור מעבד הבא ואחריו, כנ"ל לגבי מעבדי Xeon SP של אינטל אך זה לא קיים במעבדי Xeon V4, שם אתם יכולים אולי לשדרג למעבד מאותה משפחה, אבל סביר להניח שתצטרכו גם להחליף ספקי כח ולא תקבלו ביצועי RAM יותר גבוהים.

לסיכום: הקמת HPC זה דבר מאוד יקר, אבל ניתן לחסוך בכל מיני אספקטים. חשוב לשים לב לדברים שתיארתי וחשוב גם לחשוב קדימה אם רוצים להרחיב או לשדרג את ה-HPC בעתיד. לא כל הצעה שמקבלים משקללת את כל הדברים שאתם צריכים (ברובן יש "חורים") וצריך יעוץ חיצוני לדברים ומה שהכי חשוב – זה לדעת מה הולכים להריץ על ה-HPC בראש ובראשונה.