כמה מילים על הטמעת CUDA

יותר ויותר חברות משתמשות היום בתוכנות תלת מימד, תוכנות הדמיית ויזואליזציה, והמון המון חישובים מסוגים שונים, בין אם מדובר במסחר (Algotrading) והמון דברים אחרים, וגם לאחרונה CUDA נכנס גם בשימוש עם קונטיינרים – מספר קונטיינרים יכולים להשתמש ב-GPU יחיד או מספר GPU שנמצאים בשרת (זה פחות מתאים לכרטיסי GTX ויותר מתאים בכרטיסים כמו Grid, Tesla וכו').

לפני שניגש לעניינים הטכניים של הטמעת CUDA, כדאי קודם כל להכיר את הכרטיסים של nVidia שתומכים ב-CUDA. באופן עקרוני, כל צ'יפ של nVidia תומך ב-CUDA. לדוגמא: במחשב הנייד הישן שאני כותב את הפוסט הזה קיים מעבד (די עגלה) GT 720M של nVidia ולמרות שהוא ישן – הוא תומך ב-CUDA ואני נעזר בתמיכה הזו לרנדר וידאו באדובי פרמייר טרום פרסום הוידאו ביוטיוב.

בעקרון יש ל-nVidia מספר סוגי כרטיסי GPU, נתמקד כרגע על 2 סוגים: ה-GTX שיותר מתאים לצרכן שמשחק משחקים ופה ושם הוא מרנדר וידאו ואפקטים, ויש את ה-Quadro שמיועד עבור הצרכנים המסחריים שצריכים לבצע המון חישובים על ה-GPU, תלת מימד ויצירת אנימציה בתלת מימד. רבים חושבים שמכיוון ש-2 המשפחות משתמשות באותם מעבדי GPU הן ב-GTX והן ב-Quadro, אז מדובר באותם כרטיסים ופשוט אפשר לקחת את ה-GTX ולגמור עניין, וכאן הטעות הגדולה: נכון, 2 משפחות הכרטיסים משתמשים באותם מעבדי GPU אולם יש מספר שינויים:

  1. כרטיסי ה-Quadro מגיעים עם יותר זכרון (בגרסאות הדסקטופ, לא בגירסאות ה-Mobile) בהשוואה ל-GTX. בכרטיסים מסויימים יש לא פחות מ-24 ג'יגהבייט זכרון (שהוא מאוד יקר), מה שנותן לאפליקציות שמשתמשות ב-CUDA יותר מקום והביצועים מהירים פי כמה בהשוואה ל-GTX.
  2. הכרטיס כולו בנוי בצורה מעט שונה (אם כי לא רואים זאת ישר). כרטיסי Quadro מיועדים לעבוד 24/7 באופן רציף בתפוקה מלאה, וזאת בניגוד למשתמש טיפוסי של GTX שמשחק פה ושם משחקים או מרנדר וידאו מלא (או 2) ביום. הכרטיסים בנויים עם איוורור מעט שונה וגם האחריות בהתאם – לכרטיס Quadro יש אחריות ל-5 שנים.
  3. לכרטיסי Quadro יש דרייברים מיוחדים המפעילים פונקציות שאינן פעילות כלל ב-GTX. החסרון (אם אפשר לקרוא לזה כך) זה שכרטיסי Quadro אינם מתאימים כל כך למשחקים אך הם בהחלט מתאימים לעבודות מאסיביות והדרייברים מאפשרים שלל תכונות שדרושות בדיוק לסוג העבודות הללו.

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

מכאן נעבור להתקנת CUDA.

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

  • כשזה מגיע לגירסת לינוקס – אין להתקין גירסת לינוקס שמיועדת לדסקטופ, כלומר אובונטו 15,16,17 (בין אם בגרסאות 04. או 10.) שמיועדות לדסקטופ אינן מתאימות לפרודקשן הואיל והעבודות שירוצו עם ה-CUDA הן למשך מספר שנים ולא לשנה שנתיים, ובנוסף – נדרשת יציבות מקסימלית ולכן יש להתקין את אחת מהפצות הלינוקס הבאות:
    • גירסת CentOS 7.3 (ואם אתם עדיין מתעקשים על גירסה 6 של CentOS – אז CentOS 6.9)
    • SLES 12 SP2 ומעלה – של SuSE
    • Debian 8-Jessie או Debian 9-Stretch. ניתן להשתמש גם ב-Debian 7-Wheezy אולם סביר להניח שיהיו בעיות קומפילציית מודולים בהמשך, קחו זאת בחשבון.
    • אובונטו – הנה הפתעה לקוראים: הגירסה היחידה המומלצת היא Ubuntu 16.04.2 LTS (אם יש לכם 16.04.01 – בצעו שדרוג ל-16.04.02). זו הגירסה היחידה לשרתים שקנוניקל משחררת ותעמוד מאחורי גירסה זו ל-5 שנים הקרובות. שאר הגרסאות מיועדות לדסקטופ והן משתנות תדיר, דבר שממש לא מומלץ להתקין בשרת.
  • אחת הטעויות הנפוצות (במיוחד מאנשי לינוקס שהתחילו עם אובונטו) היא התקנת סביבה גרפית גם בשרת. זו טעות, במיוחד אם אתם משתמשים בכרטיס GTX לעבודות CUDA. ה-GPU צריך לרנדר את הסביבה הגרפית 60 פעם בשניה (או 50 בחלק מהמקרים) וזה סתם מוסיף עבודה ל-GPU ולכן: בשרת, לא מתקינים סביבת עבודה גרפית. תתרגלו לטרמינל, מה קרה? 🙂
  • לא להריץ update/upgrade סתם כך! במקרים רבים עדכון הפצת הלינוקס ישדרג גם את הספריות והקרנל ובמקרים רבים אין קרנל מודול ל-GPU שמקומפל לקרנל החדש, מה שמצריך או קימפול מחדש או שימוש ב-kmod/dkms כדי לקמפל מודולים לקרנל החדש. שימוש בקרנל חדש מצריך reboot ולכן עדכונים ושדרוגים – יש לבצע בסוף יום עבודה או לקראת סופ"ש על מנת שלא להפיל עבודות שמשתמשות ב-CUDA.
  • לא להפעיל RAID תוכנה על השרת. תלוי בסוג העבודה, יכול להיות שבנוסף ל-GPU, גם ה-CPU יהיה מלא בעבודה ולכן בד"כ מומלץ שלא להקים RAID תוכנה אלא RAID חומרה עם כרטיס (למעט בשרתים בהם יש RAID חומרה על לוח האם). אני מודע לכך שזו נשמעת המלצה מוזרה, אולם ראיתי מקרים כאלו ש-RAID תוכנה נפל (במיוחד שמדובר בדיסקים SATA "ביתיים" פשוטים) כשה-CPU היה חנוק עם כל הליבות שלו. כרטיס RAID פשוט עולה 50$ ואם המערכת שלכם הולכת לייצר המוני קבצים לקריאה וכתיבה סימולטנית – חברו אותה לסטורג' או במינימום NAS טוב.
  • אם יש לכם הפצת CentOS – השתדלו לא להשתמש בקרנלים מ-ElRepo Repository. ה-REPO הזה נותן קרנלים חדשים ל-CentOS אולם מנסיוני הם מלאים באגים כרימון.

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

בהצלחה.

גילוי נאות
הטמעות ותיקון תקלות הקשורות ב-CUDA זה חלק מהשרות ש"חץ ביז" נותן

Comments

comments

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *