יום ראשון, 29 באוקטובר 2017

פי 7 יותר מהיר מ-TensorFlow, פי 5 מ-Caffe2, פי 2 מ-mxNet, שווה ערך ל-Tensor RT מבחינת מהירות ויעיל יותר ממנו בצריכת זיכרון – קבלו את ה-GPU Coder!

באמצע החודש נערך בתל אביב ה-GPU Technology Conference של חברת NVIDIA, במעמד מנכ"ל ומייסד החברה, ג'ן-סון הואנג, אשר אף ביקר בביתן ההדגמות של חברת סיסטמטיקס והביע את ההערכתו לשיתוף הפעולה המוצלח וארוך השנים בין החברה שלו לחברת MathWorks.


במהלך הכנס התכבדתי להרצות על יכולות ה-Deep Learning של סביבת MATLAB, בהרצאה אשר בעיקר סקרה את היכולת החדשה להמיר קוד MATLAB לקוד CUDA, לצורך הפעלתו על GPU-ים של חברת NVIDIA. יכולת זו מתאפשרת הודות לכלי החדש GPU Coder, שהושק לפני כחודש, לאחר תקופת בדיקות ארוכה, אשר כללה גם מספר Beta sites בישראל.

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

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

אז ככה, כפי שניתן לראות בגרף למטה (ניתן ללחוץ להגדלה), לפי ה-benchmarks, הקוד שנוצר על ידי ה-GPU Coder עבור פעולות הסקה (Inference) של Alexnet על desktop מהיר בערך פי 5 ממה שמאפשרת ספריית Caffe2 של פייסבוק, ופי 7 מאשר TensorFlow – עבור Batch Size של 128.
זה המקום להדגיש שכפי שניתן לראות בגרף - גם ריצה ב-MATLAB תוך שימוש ב-GPU, ללא יצירת קוד CUDA – מהירה יותר משתי הסביבות הללו – כי הן מבוססות Python, דבר שמוסיף להן הרבה overhead. מי שיותר מהיר מ-MATLAB זה mxNet, כי הוא מבוסס C++ ולא Python, אבל גם הוא נחות פי 2 בהשוואה לקוד שמייצר ה-GPU Coder.


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

אז זה הרגע לעבור לדבר קצת על כרטיסים, ולא על desktops.

שאלה שאנשים רבים מתעניינים בה, היא איך הקוד של ה-GPU Coder בהשוואה ל-Tensor RT – שזה runtime ואופטימייזר הסקה עתיר ביצועים של NVIDIA לתחום ה-Deep Learning המותאם עבור כרטיסי Jetson TX2. אז ככה, כפי שניתן לראות למטה (לחצו להגדלה), מבחינת מהירות – הקוד של ה-GPU Coder איטי מ-Tensor RT בכ-15%. לא הבדל גדול, אבל אני יכול לספר לכם שב-MathWorks פועלים כדי להעלים אותו.


אבל מה שעוד יותר מעניין – זה שכפי שניתן לראות למטה (לחצו להגדלה) – עד Batch Sizes של 64 ומטה – הקוד שנוצר על ידי ה-GPU Coder תופס פחות זיכרון! ויש משמעות מאוד גדולה לערכי Batch Sizes נמוכים שכאלה – כי זה מה שבדרך כלל משתמשים בו לפעולות הסקה ב-Real Time על כרטיס (ושוב - כרטיס, להבדיל מ-desktop, עליו כתבתי למעלה).


חשוב להבהיר ש-Tensor RT מיועד ליישומי Deep Learning, בעוד שה-GPU Coder מאפשר להשיג ביצועים טובים גם עבור יישומים נוספים, לא רק של Deep Learning. ולא חסרות דוגמאות שבהן מרכיב ה-Deep Learning הוא רק חלק מאפליקציה יותר גדולה, למשל של Computer Vision, ועם הכלי החדש ניתן להמיר לקוד CUDA יעיל גם את החלק של ה-Computer Vision.

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


המעוניינים במידע נוסף מוזמנים לסמינר חינמי חצי-יומי שיתקיים בהרצליה ב-21/11/17. למידע נוסף ורישום – לחצו פה.

קישורים שימושיים נוספים: