הבלוג של ארתיום :: בינה מלאכותית http://artyom.cppcms.com/ בלוג על לינוקס, תוכנה חופשית, מוזיקה, סלסה, ומה לא! למידה עמוקה מחוץ לקופסת nVidia http://artyom.cppcms.com/post/344 http://artyom.cppcms.com/post/344 <div style="direction:rtl"> <p>לפני <a href="http://artyom.cppcms.com/post/328">3 וחצי שנים</a> סקרתי את מצב הלמידה העמוקה בקוד פתוח (מחוץ לעולם nVidia) והמצב היה בכי רע.</p> <p>גם עכשיו המצב לא מזהיר. לפני מספר שנים רכשתי AMD rx6600XT ולא מזמן בתור ניסוי קניתי Intel Arc a380.</p> <h2>נתחיל מפתרון מבית AMD - השכפול של cuda בשם hip</h2> <p>קודם כל בניגוד לשנים הקודמות בהן אפילו לא הייתה תמיכה בכרטיסי RNDA התקנתי לאחרונה אובונטו 22.04 התקנתי rocm הורדתי pytorch מתאים - וזה עבד (כמעט היה צריך להגדיר <a href="https://discuss.linuxcontainers.org/t/rocm-and-pytorch-on-amd-apu-or-gpu-ai/19743">משתנה סביבה</a> כדי שיכיר בכרטיס שלא נתמך באופן רשמי) אבל זה עבד. לא נתקלתי עד עכשיו במשהו שלא עבד. שזה בהחלט התקדמות מרשימה. כמובן גם כל הקוד של AMD הוא פתוח שזה יתרון ענק.</p> <p>אבל... הם זרקו תמיכה ב-GCN4 זאת אומרת הכרטיס הישן rx560 כבר לא עובד עם rocm ואפילו דרייבר OpenCL שלהם קורס. דרייבר Mesa פשוט גרוע ו-rustocl קטסטרופה אחת גדולה, אבל הצלחתי להתקין amdgpu-pro הישן והלא נתמך - אבל לפחות עובד.</p> <p>כלומר בעלי RDNA נראה יהנו, אולי גם אלה עם Vega (אבל לא APU) ורק אם משתמשים בלינוקס.</p> <h2>השחקנית החדשה בשוק היא Intel Arc</h2> <p>בניגוד ל-AMD הם לא שכתבו cuda אלא עובדים עם pytorch כ-plugin. ההתקנה קצת יותר מסובכת אבל הצלחתי. להבנתי החל מ-pytorch 2.5 או 2.6 זה כבר אמור להיות שקוף יותר. הכרטיס עובד. האימונים? תלוי עד כמה הקוד שאתה מנסה להריץ תלוי בעבודה ישירה מול cuda בלבד. אבל הצלחתי אפילו להריץ yolo ועוד כל מיני רכיבים. כך שהמצב נראה טוב יחסית. אבל כמובן Intel החליטו ללכת בדרך ה-nית שאף אחד לא עובד עם זה sycl... טוב לפחות זה תקן פתוח (שתכל'ס רק Intel עובדים איתו)</p> <p>מה לגבי ביצועים. טוב. עשיתי השוואה בין gtx960 לבין arc a380. מבחינת המפרט</p> <ul> <li>לשניהם יש 1024 מעבדים</li> <li>מהירות הזכרון של אינטל כ-143GB/s לעומת כ84GB/s בנבידיה</li> <li>השעון הוא 2450MHz לאינטל לעומת כ-1506MHz משמע: יש כ-5020GFlops מול 3080GFlops יתרון</li> </ul> <p>איך הביצועים... <a href="https://github.com/artyom-beilis/pytorch_dlprim/blob/master/benchmarks/v0.2.0/summary.md">לא בדיוק טובים לעומת מה שכתוב על הנייר</a></p> <p>למרות שהמהירות התיאורתית אמורה להיות יותר טובה בכ-%63 בפועל באימון היתרון היה סה"כ 38% באימון בממוצע ו-48% בחיזוי. אם לוקחים חציון המצב עוד יותר גרוע. 13% שיפור באימון ו-40% בחיזוי.</p> <h2>סיכום</h2> <p>אז המצב השתפר פלאים לעומת מה שהיה. זה רחוק מהליות מושלם אבל יש התקדמות ומה שחשוב שההתקדמות החדשה היא בתחום קוד פתוח.</p> <p>עכשיו מה לא טוב? עדיין כל אחת מהחברות הגדולות בוחרת בפתרון משלה...</p> <ul> <li>nVidia זה cuda</li> <li>AMD זה hip/rocm (העתק של cuda)</li> <li>Intel זה - sycl אבל לפחות יש תמיכה גם ב-opencl ב-onednn</li> <li>Apple זה metal</li> <li>microsoft זה DirectML</li> </ul> <p>נפלתם על הראש? ברור ש-nvidia תהיה מונופול בשוק.</p> <h2>ומה אני עושה?</h2> <p>ממשיך לעשות את הבלתי אפשרי ו<a href="https://github.com/artyom-beilis/pytorch_dlprim/releases/tag/0.2.0">שחררתי עוד גרסה מספר 0.2.0</a> של OpenCL backend ל-Pytorch עם הרבה תיקונים.</p> <p>מוזמנים לנסות - אבל הדרך עוד ארוכה</p> </div> למידת מכונה פתוחה באמת, האם אני נלחם בקרב עבוד מראש? http://artyom.cppcms.com/post/342 http://artyom.cppcms.com/post/342 <div style="direction:rtl"> <p>לפני מספר שנים התחלתי פרוייקט dlprimitives - המימוש הבסיסי של פעולות Deep Learing ב־OpenCL. והמשכתי לתמיכה ב־OpenCL ב־pytorch. אני ממשיך <a href="https://github.com/artyom-beilis/pytorch_dlprim/">לפתח את המודול של PyTorch על אש קטנה</a> והאמת, הגעתי ל<a href="https://dev-discuss.pytorch.org/t/rocm-vs-opencl-dlprimitives/2351">ביצועים מרשימים</a> גם עבור כרטיסי nvidia וגם amd.</p> <p>למה בעצם אני משקיע את זמני בזה:</p> <ol> <li>קודם כל, כל תעשיית ה־deep learning היום מבוססת על דברים סגורים. למרות שהכלים כמו pytorch הם פתוחים לחלוטין - למטה יושב הקוד של cudnn ששמור בכספת.</li> <li><p>למרות שיש עוד 2 שחקנים רציניים בשוק כרטיסי המסך (AMD ולאחרונה גם Intel) והקוד שלהם פתוח - כל אחד ממציא גלגל מחדש ועושה משהו משלו. למעשה אין שום דבר משותף בין הקוד שלהם. אם אני רוצה לשפר טכניקה קיימת או להביא איזה כלי חדש אני נתקל בבעיה רצינית:</p> <ul> <li>אני חייב לשפר משהו שאין לי גישה אליו (cudnn) וזה מאוד קשה.</li> <li>אם זה תופס צריך למעשה מספר מימושים לכל אחת מהפלטפורומ האלה.</li> </ul> </li> <li>אם מישהו רוצה להשתמש במודלים מאומנים - המימוש הוא תלוי חומרת המשתשת - למעשה צריך לתמוך בכל תשתית בנפרד nvidia-cuda, amd-rocm, intel - xpu וב־apple עוד איזו שטות - כמובן אין שום הבטחה שזה למעשה יעבוד בכל מקום.</li> </ol> <p>אז אני עובד על משהו שעובד על כולם OpenCL וגם מגיע בין 60% ל־80% ממה שאפשר הגיע עם המימוש המקורי (שזה cuda/rocm).</p> <p>אני ממשיך לראות את amd משפרים את rocm מצד אחד (לפי שבוע התקנתי pytorch rocm על אובונטו 24.04 בצורה יחסית חלקה וזה פשוט עובד) ומצד שני הורסים אותו - כי מוציאים תמיכה בכרטיסי ישנים ותומכים באופן רשמי רק בדברים ייעודיים. למעשה rx6600xt של גם לא נתמך באופן רשמי וצריך להשתמש במשתנה סביבה שיתייחסו אליו כמו לכרטיס הנתמך</p> <p>אני רואה ש־intel גם הולכים בכיוון זה ועל פניו אפשר גם לאמן היום על הכרטיסים שלהם. אבל הם מסתמכים על על טכנולוגיה נוספת שעוד פעם לא תואמת לשום דבר אחר.</p> <p>כל ההשקעות של Intel ושל AMD הן למשהו מידי שיעשה טלאי אבל לעולם לא יפתור את הבעיה האמתית של העולם ה־DL.</p> <p>לכן, אני ממשיך לעבוד ורואים שהחברות האלה ממשיכות לבזבז משאבים על משהו שלא באמת עוזר מלבד לאלה שנתקעו עם מסך amd/intel וגילו שאולי גם בא להם לאמן רשתות ניירונים. ברור לכם שהם יתייאשו תוך כלום זמן ופשוט יקנו כרטיס טוב של nVidia שבאמת יעבוד כמו שצריך.</p> <p>טוב, נו. אני לפעמים מנסה להרים פרוייקטים שנראים בלתי אפשריים. האם זה יצליח? לא יודע - המשאבים שלי מוגבלים: שעה־שעתיים כמה פעמים בשבוע כשאני לא עסוק בדברים אחרים. אם היה לי צוות של 5-6 מפתחים שעובדים על זה במשרה מלאה - ללא ספק זה היה מצליח. אבל אין לי משאבים כאלה.</p> <p>מצד אחד אני נהנה מהצלחות קטנות - באמת, המפתחים של pytorch מאוד עוזרים. ובכל פעם זה מתקדם והופך לקל יותר להתקין או להשתמש בזה. מצד שני לפעמים זה מייאש כמה עבודה יש לי וכמה השחקנים הרציניים - האלה עם הכסף עושים שטויות גמורות במקום לשתף פעולה (אגב למען האינטרסים שלהם)</p> <p>ועכשיו שאלה: מכירים שירות ענן שמאפשר לבנות חבילות ל־pip (רצוי גם לחלונות)</p> </div> התקדמות חשובה בתמיכה ב־OpenCL ב־pytorch. http://artyom.cppcms.com/post/337 http://artyom.cppcms.com/post/337 <div style="direction:rtl"> <h2>רקע</h2> <p>היום pytorch היא אחת התשתיות המובילות בעולם למידה עמוקה. יש לה יתרונות רבות, אבל מבחינת המפתח זה קוד איכותי ותיעוד טוב. הקוד כתוב בצורה מאוד מודרנית עם שימוש נכון ביכולות C++‎ מה שמאוד מקל על הפיתוח. אני עובד בתקופה האחרונה על פיתוח מנוע עבור pytorch מבוסס OpenCL כחלופה ל־cuda.</p> <p>כבר כתבתי <a href="http://blog.dlprimitives.org/post/2">בעבר</a> על חשיבות התמיכה ב־OpenCL.</p> <p>אבל בכל זאת אזכיר כמה נקודות מבחינת קהילת תוכנה חופשית וקוד פתוח:</p> <ol> <li>אנחנו זקוקים בתמיכה חוצת פלטפורמה בכרטיסי מסך מיצרנים שונים כמו AMD, Intel וכמובן nVidia.</li> <li>אנחנו זקוקים למימוש האלגוריתמים המרכזיים כקוד פתוח הזמין לכל (ולא כקופסה סגורה ש־nVidia נותנת)</li> <li>אנחנו רוצים לעבוד עם סטנדרטים פתוחים וזמינים כמו OpenCL ולא מימושים ספציפיים של יצרן (כמו cuda).</li> </ol> <p><a href="https://github.com/artyom-beilis/pytorch_dlprim">הפרוייקט ב־github‏</a></p> <h2>אז מה חדש? קלות אינטגרציה!</h2> <p>עם שחרור גרסה 1.13 של pytorch חל שיפור משמעותי ב־out-of-tree-backend. עכשיו הוספת מנוע אימון מבוסס OpenCL היא פשוטה מאוד ולמעשה שאלה של מספר דקות, אפילו בוונידוס העניין יחסית פשוט. המשמעות שאפשר להשתמש במנוע OpenCL בקלות רבה הן בלינוקס והן בווינדוס.</p> <p>מה עם הביצועים? אם משווים מול גרסת cuda/cudnn על אותו ה־gpu מדובר בין 50 ל־70 אחוז ביצועי cuda באימון ובין כ־60 ל־80 באבלואציה (תלוי ברשת כמובן).</p> <p>למרות שהמנוע עדיין ניסיוני וחסרים בו לא מעט פעולות הוא נבדק בהצלחה על עשרות רשתות כמו resnet, mobilenet ורבות אחרות.</p> <p>המנוע עצמו מבוסס על ספריית <a href="https://github.com/artyom-beilis/dlprimitives">dlprimitives‏</a> שאני מפתח במקביל והיא חלופה ל־cuDNN על בסיס OpenCL וגם מנוע חיזוי שעובד עם מודלים בפורמט ONNX - שזה נושא גדול בפני עצמו.</p> <h2>מה המשמעות של זה?</h2> <ul> <li><p>משתמשי AMD יכולים לאמן רשתות. הם לא מוגבלים למספר מצומצם של דגמים ש־rocm תומך בהם או לשימוש בלינוקס בלבד. התמיכה היא גורפת מ־APUים ישנים כמו Stoney Ridge ועד ל־RDNA 2 וגם זה עובד על "חלונות" למי שמעוניין.</p> <p> זו הייתה משימה כמעט ובלי אפשרית עד היום. עכשיו זה במרחק מספר פקודות</p></li> <li><p>תשתית אימון היא קוד פתוח לגמרי גם אם עובדים עם nVidia (טוב חוץ מהדרייבר שלהם)</p></li> <li>כל מה שצריך זה דרייברי של OpenCL. לא צריך את כל המפלצת של cuda (מי שיצא לו להתקין לשדרג לגלות בעיות תאימות יבין אותי מידי)</li> </ul> <h3>מחפש עזרה...</h3> <p>מישהו יודע איך אפשר לבנות ולפרסם whl לפלטפורמות שונות? רצוי איזה שירות ענן שיעשה זאת? כדי שזה יהיה ממש במרחק של pip install <code>:-)</code></p> </div> מעשה בשני NaNים http://artyom.cppcms.com/post/336 http://artyom.cppcms.com/post/336 <div style="direction:rtl"> <p>לאחרונה ניסיתי להריץ אימון של GAN על pytorch עם תמיכה ב־dlprimitives. אחד דברים הלא נעימים באימון של GANים באופן כללי זה שהם לא ממש יציבים ומתבדרים בקלות.</p> <p>שמתי לב שבגרסת cuda הוא רץ ללא דופי ובגרסה שלי הוא נתקע. נתקע על ביצוע backpropogation ב־convolution. אחד ההבדלים העיקריים באגלוריתם בהשוואה לשאר היה שימוש בפעולות אטומיות לחישוב סכום (טריק מאוד נפוץ במימוש קונבולוציה)</p> <p>אחרי זמן מה הגעתי למסקנה שהחישובים מגיעים ל־NaN באיזהו מקום ואז הכל נתקע. לא הבנתי למה פעולת חיבור אטומית פשוטה נתקעת. בכל מקרה איתרתי באג האחר שהביא לחישוב ה־NaN והכל הסתדר. אבל בכל זאת נושא התקיעה הטריד אותי.</p> <p>כתבתי שאלה ב־Stackoverflow העתקתי קטע קוד... ואז נפל האסימון</p> <pre><code>float oldv = *ptr; for(;;) { float newv = oldv + v; float prev = as_float(atomic_cmpxchg((__global volatile int *)(ptr),as_int(oldv),as_int(newv))); if(prev == oldv) return; oldv = prev; } </code></pre> <p>קחו לכם כמה דקות.</p> <p>פעולת comxchg ב־OpenCL עובדת רק על int. לכן הייתי צריך לעשות bit-casting ל־int ובחזרה (<code>as_float</code> ו־<code>as_int</code> בדיוק עושים את זה). ואז תנאי הבדיקה <code>prev==old</code> ביצעתי ב־float במקום בשלמים.</p> <p>כך שאם הערכים שווים אז ההחלפה הצליחה. אבל מה שכחתי? NaN == NaN תמיד נותן false! ולכן תקעתי בלולאה אינסופית כי התנאי לעולם לא ייתקיים. החלפתי לבדיקה בערכים שלמים (קרי ייצוג בינארי) והכל עבד חלק.</p> <p>מסקנה NaN הוא טריקי... יש לכבדו</p> </div> עדכוני dlprimitives http://artyom.cppcms.com/post/334 http://artyom.cppcms.com/post/334 <div style="direction:rtl"> <p>מספר עדכונים:</p> <ul> <li><p>התקדמות יפה עם pytorch - בוצעה ולידציה של מרבית הרשתות של סיווג הנמצאות ה־torchvision:</p> <ul> <li><code>alexnet</code></li> <li><code>resnet18</code></li> <li><code>resnet50</code></li> <li><code>vgg16</code></li> <li><code>densenet161</code></li> <li><code>googlenet</code></li> <li><code>squeezenet1_0</code></li> <li><code>inception_v3</code></li> <li><code>shufflenet_v2_x1_0</code></li> <li><code>mobilenet_v2</code></li> <li><code>mobilenet_v3_large</code></li> <li><code>mobilenet_v3_small</code></li> <li><code>resnext50_32x4d</code></li> <li><code>wide_resnet50_2</code></li> <li><code>mnasnet1_0</code></li> <li><code>efficientnet_b0</code></li> <li><code>efficientnet_b4</code></li> <li><code>regnet_y_400mf</code></li> </ul> <p> מה שאומר שניתן לאמן עכשיו הרבה סוגי רשתות. על הדרך מצאתי לא מעט באגים ותיקנתי אותם</p></li> <li><p>ניסיתי לעשות אינטגרציה עם OneDNN של אינטל (מאין cudnn ל־GPU שלהם) רק כדי לגלות ש<a href="https://github.com/oneapi-src/oneDNN/issues/1194">הביצועים שלהם בפורמט NCHW גרועים</a>. כיוון שרוב התשתיות עובדות עם הפורמט הזה pytorch, caffe, mxnet ועוד אז OneDNN לא ממש רלוונטי בינתיים. אחזור לשם כשיקרה אחד מהשניים:</p> <ul> <li>אינטל יתקנו את הביצועים עבור הפורמט הנפוץ</li> <li>אני אפתח תמיכה ב־NHWC לטובת TensorFlow בו זה פורמט ברירת מחדל</li> </ul> </li> </ul> <p>המשך יבוא</p> </div> התחלתי להתקדם לאימון בקוד פתוח: pytorch עם תמיכה ב־OpenCL http://artyom.cppcms.com/post/333 http://artyom.cppcms.com/post/333 <div style="direction:rtl"> <p>תקציר: הצלחתי לבצע inference של AlexNet ב־pytorch ב־OpenCL. הביצועים זהים לפעלה ישירה של dlprimitives.</p> <p>הדרך עוד ארוכה אבל פחות קצת יותר ברורה מה לעשות. המאמר המלא באנגלית בבלוג הפיתוח:</p> <p><a href="http://blog.dlprimitives.org/post/5">http://blog.dlprimitives.org/post/5</a></p> </div> מדוע אנחנו זקוקים ל־deep-learning מבוסס OpenCL? http://artyom.cppcms.com/post/332 http://artyom.cppcms.com/post/332 <div style="direction:rtl"> <p>במאמר חדש <a href="http://blog.dlprimitives.org/post/2">http://blog.dlprimitives.org/post/2</a> אני סוקר את הסיבות והצורך בהקמת תשתית למידה חישובית מבוססת OpenCL. אני מתייחס כאן לסיבות שהן לאו דווקא סיבות "אידואולוגיות" כמו שימוש בקוד פתוח אלא גם מתייחס לנושאים טכניים ומהותיים:</p> <ul> <li>מחקר ואלגוריתמים</li> <li>וניהול פרויקטים לטווח רחוק</li> <li>שיפור מוצר ע"י תחרותיות</li> </ul> </div> השוואה בין תפוחים ירוקים ואדומים http://artyom.cppcms.com/post/331 http://artyom.cppcms.com/post/331 <div style="direction:rtl"> <p>כשמודבר ב־Deep Learning זה מאוד קשה להשוות בין GPU של החברות המובילות AMD ו־NVidia. בניגוד למשחקי מחשב שנותנים לך מדדים ברורים על עלות מול תועלת, תחום DL נשלט באופן בלעדי ע"י NVidia. גם אם קיימים פתרונות של AMD הם לא תמיד עובדים. למשל כרטיסי RDNA/RDNA2 עדיין לא נתמכים ע"י AMD לטובת Deep Learning - והם בעצם הכרטיסים הזמינים היחידים היום בשוק.</p> <p>ובכן כחלק מפרויקט <a href="https://github.com/artyom-beilis/dlprimitives">DLPrimitives</a> עשיתי השוואה כזו:</p> <p><a href="http://blog.dlprimitives.org/post/1">http://blog.dlprimitives.org/post/1</a></p> <p>וכן גם השקתי בלוג חדש לטובת עדכונים על הפרויקט.</p> </div> רשתות נוירונים בקוד פתוח... להפשיל שרוולים http://artyom.cppcms.com/post/330 http://artyom.cppcms.com/post/330 <div style="direction:rtl"> <p>כתבתי בעבר על המצב העגום של <a href="http://artyom.cppcms.com/post/328">תחום ה־deep learning בקוד פתוח</a> - שלמעשה לא קיים. אחרי ש־Google בפועל <a href="https://github.com/plaidml/plaidml/issues/586">הרגו</a> את ה־plaidml עם keras והפיתוח של Caffe הופסק אז נוצר המצב בו אין כל דרך לאמן רשתות בעזרת פלטפורמה פתוחה - OpenCL.</p> <p>יש סיבות טובות לעבוד עם OpenCL מעבר לשמירה על הקוד הפתוח. למשל לפתח תוכנה שתעבוד על כל כרטיס גרפי סביר ובכל מערכת הפעלה - בלי להסתבך.</p> <p>אז הרמתי את הכפפה: <a href="https://github.com/artyom-beilis/dlprimitives">https://github.com/artyom-beilis/dlprimitives</a></p> <p>זהו פרויקט חדש בשם DLPrimitives שאמור לתת מענה לסוגיה. הוא אמור לספק ספריה בסגנון cudnn/miopen שמממשת את הפעולות הבסיסיות של Deep-Learning וגם לספק כלים ל־inference. בנוסף, הרעיון הוא להתחבר כ־backend לאחד ה־deep learning frameworks העדכניים כמו pytorch, tensorflow או mxnet.</p> <p>התהליך הוא איטי וקשה. אומנם המתמטיקה היא לא מסובכת וכתיבה ל־GPU היא בסה"כ לא עניין מסובך. אבל אם רוצים להגיע לביצועים טובים הסיפור הוא מעט שונה. עם זה, התוצאות כבר כאן.</p> <p>לחסרי סבלנות - הצלחתי להגיע ל־150%-200% של ביצועי caffe-opencl ו־plaidml על פלטפורמת amd ו־nvidia ולהגיע לכ־50% עד 70% של ביצועי המימושים הספציפיים שלהם על בסיס cudnn/miopen.</p> <p>כל התוצאות:</p> <p><a href="https://github.com/artyom-beilis/dlprimitives/blob/master/docs/summary.md">https://github.com/artyom-beilis/dlprimitives/blob/master/docs/summary.md</a></p> <p>סיכום לעצלנים - ממוצע על 5 רשתות נפוצות alexnet, resnet18, resnet50, vgg, mobilenet:</p> <table dir="ltr"> <thead> <tr> <th>GPU</th> <th>Batch</th> <th>Train, Cuda/HIP</th> <th>Test, Cuda/HIP</th> <th>Train, Plaidml/Caffe</th> <th>Test, Plaidml/Caffe</th> </tr> </thead> <tbody> <tr> <td>gtx960</td> <td>16</td> <td>51%</td> <td>60.73%</td> <td>171%</td> <td>167.33%</td> </tr> <tr> <td>gtx960</td> <td>8</td> <td>59%</td> <td>72.03%</td> <td>187%</td> <td>155.25%</td> </tr> <tr> <td>gtx1080</td> <td>16</td> <td>42%</td> <td>41.34%</td> <td>207%</td> <td>137.52%</td> </tr> <tr> <td>rtx2060s</td> <td>16</td> <td>49%</td> <td>57.53%</td> <td>211%</td> <td>149.48%</td> </tr> <tr> <td>rx560</td> <td>16</td> <td>53%</td> <td>56.82%</td> <td>153%</td> <td>115.63%</td> </tr> <tr> <td>rx560</td> <td>8</td> <td>55%</td> <td>54.19%</td> <td>172%</td> <td>122.64%</td> </tr> <tr> <td>intel-hd530</td> <td>8</td> <td></td> <td></td> <td>109%</td> <td>66.12%</td> </tr> </tbody> </table> <p>אומנם זו התחלה אבל כבר התחלה טובה!</p> </div> רשתות נוירונים בקוד פתוח... תמונת מצב http://artyom.cppcms.com/post/328 http://artyom.cppcms.com/post/328 <div style="direction:rtl"> <p>כידוע היום שוק ה־deep learning נשלט באופן <a href="http://artyom.cppcms.com/post/324">כמעט בלעדי</a> ע"י nVidia. אומנם כל תשתיות למידה החישובית הפופולריות כגן TensorFlow, PyTorch, Caffe, MXNet ואחרות משוחררות כקוד פתוח, אבל בליבו של כל אחד מהם, ללא יוצא מן הכלל, רצות ספריות cublas ו־cudnn המאפשרות לנצל את החומרה בצורה מיטבית. כולן כמובן קוד בסגור ומסוגר הרץ על בסיס CUDA. כמובן, גם הוא API פרטי וקנייני של חברת nVidia.</p> <p>אקדים ואומר: אין אני טוען שהסכנה כאן כי החברה "המרושעת" תשתלט על בינה מלאכותית ותקים skynet מתחת לרגליים שלנו. לא, בסה"כ מדובר במימוש פעולות מתמטיות בסיסיות מוגדרות היטב בצורה יעילה להפליא.</p> <h2>אבל אני רוצה קוד פתוח?</h2> <p>אז יש מספר פתרונות וכיוונים:</p> <ol> <li>לאמן הכל ב־CPU בלבד.</li> <li>להשתמש בתשתית ROCm של AMD.</li> <li>להשתמש ב־OpenCL במקום ב־CUDA ואז חוץ מדרייבר של nVidia הכל יהיה פתוח (פחות או יותר)</li> </ol> <p> <a href="/post/328">המשך...</a> </p> </div>