הבלוג של ארתיום
בלוג על לינוקס, תוכנה חופשית, מוזיקה, סלסה, ומה לא!
מאמרים בנושא בינה מלאכותית.
התחלתי להתקדם לאימון בקוד פתוח: pytorch עם תמיכה ב־OpenCL
תקציר: הצלחתי לבצע inference של AlexNet ב־pytorch ב־OpenCL. הביצועים זהים לפעלה ישירה של dlprimitives.
הדרך עוד ארוכה אבל פחות קצת יותר ברורה מה לעשות. המאמר המלא באנגלית בבלוג הפיתוח:
http://blog.dlprimitives.org/post/5
מדוע אנחנו זקוקים ל־deep-learning מבוסס OpenCL?
במאמר חדש http://blog.dlprimitives.org/post/2 אני סוקר את הסיבות והצורך בהקמת תשתית למידה חישובית מבוססת OpenCL. אני מתייחס כאן לסיבות שהן לאו דווקא סיבות "אידואולוגיות" כמו שימוש בקוד פתוח אלא גם מתייחס לנושאים טכניים ומהותיים:
- מחקר ואלגוריתמים
- וניהול פרויקטים לטווח רחוק
- שיפור מוצר ע"י תחרותיות
השוואה בין תפוחים ירוקים ואדומים
כשמודבר ב־Deep Learning זה מאוד קשה להשוות בין GPU של החברות המובילות AMD ו־NVidia. בניגוד למשחקי מחשב שנותנים לך מדדים ברורים על עלות מול תועלת, תחום DL נשלט באופן בלעדי ע"י NVidia. גם אם קיימים פתרונות של AMD הם לא תמיד עובדים. למשל כרטיסי RDNA/RDNA2 עדיין לא נתמכים ע"י AMD לטובת Deep Learning - והם בעצם הכרטיסים הזמינים היחידים היום בשוק.
ובכן כחלק מפרויקט DLPrimitives עשיתי השוואה כזו:
http://blog.dlprimitives.org/post/1
וכן גם השקתי בלוג חדש לטובת עדכונים על הפרויקט.
רשתות נוירונים בקוד פתוח... להפשיל שרוולים
כתבתי בעבר על המצב העגום של תחום ה־deep learning בקוד פתוח - שלמעשה לא קיים. אחרי ש־Google בפועל הרגו את ה־plaidml עם keras והפיתוח של Caffe הופסק אז נוצר המצב בו אין כל דרך לאמן רשתות בעזרת פלטפורמה פתוחה - OpenCL.
יש סיבות טובות לעבוד עם OpenCL מעבר לשמירה על הקוד הפתוח. למשל לפתח תוכנה שתעבוד על כל כרטיס גרפי סביר ובכל מערכת הפעלה - בלי להסתבך.
אז הרמתי את הכפפה: https://github.com/artyom-beilis/dlprimitives
זהו פרויקט חדש בשם DLPrimitives שאמור לתת מענה לסוגיה. הוא אמור לספק ספריה בסגנון cudnn/miopen שמממשת את הפעולות הבסיסיות של Deep-Learning וגם לספק כלים ל־inference. בנוסף, הרעיון הוא להתחבר כ־backend לאחד ה־deep learning frameworks העדכניים כמו pytorch, tensorflow או mxnet.
התהליך הוא איטי וקשה. אומנם המתמטיקה היא לא מסובכת וכתיבה ל־GPU היא בסה"כ לא עניין מסובך. אבל אם רוצים להגיע לביצועים טובים הסיפור הוא מעט שונה. עם זה, התוצאות כבר כאן.
לחסרי סבלנות - הצלחתי להגיע ל־150%-200% של ביצועי caffe-opencl ו־plaidml על פלטפורמת amd ו־nvidia ולהגיע לכ־50% עד 70% של ביצועי המימושים הספציפיים שלהם על בסיס cudnn/miopen.
כל התוצאות:
https://github.com/artyom-beilis/dlprimitives/blob/master/docs/summary.md
סיכום לעצלנים - ממוצע על 5 רשתות נפוצות alexnet, resnet18, resnet50, vgg, mobilenet:
GPU | Batch | Train, Cuda/HIP | Test, Cuda/HIP | Train, Plaidml/Caffe | Test, Plaidml/Caffe |
---|---|---|---|---|---|
gtx960 | 16 | 51% | 60.73% | 171% | 167.33% |
gtx960 | 8 | 59% | 72.03% | 187% | 155.25% |
gtx1080 | 16 | 42% | 41.34% | 207% | 137.52% |
rtx2060s | 16 | 49% | 57.53% | 211% | 149.48% |
rx560 | 16 | 53% | 56.82% | 153% | 115.63% |
rx560 | 8 | 55% | 54.19% | 172% | 122.64% |
intel-hd530 | 8 | 109% | 66.12% |
אומנם זו התחלה אבל כבר התחלה טובה!
רשתות נוירונים בקוד פתוח... תמונת מצב
כידוע היום שוק ה־deep learning נשלט באופן כמעט בלעדי ע"י nVidia. אומנם כל תשתיות למידה החישובית הפופולריות כגן TensorFlow, PyTorch, Caffe, MXNet ואחרות משוחררות כקוד פתוח, אבל בליבו של כל אחד מהם, ללא יוצא מן הכלל, רצות ספריות cublas ו־cudnn המאפשרות לנצל את החומרה בצורה מיטבית. כולן כמובן קוד בסגור ומסוגר הרץ על בסיס CUDA. כמובן, גם הוא API פרטי וקנייני של חברת nVidia.
אקדים ואומר: אין אני טוען שהסכנה כאן כי החברה "המרושעת" תשתלט על בינה מלאכותית ותקים skynet מתחת לרגליים שלנו. לא, בסה"כ מדובר במימוש פעולות מתמטיות בסיסיות מוגדרות היטב בצורה יעילה להפליא.
אבל אני רוצה קוד פתוח?
אז יש מספר פתרונות וכיוונים:
- לאמן הכל ב־CPU בלבד.
- להשתמש בתשתית ROCm של AMD.
- להשתמש ב־OpenCL במקום ב־CUDA ואז חוץ מדרייבר של nVidia הכל יהיה פתוח (פחות או יותר)