פיתוח אב-טיפוס של רשתות למידה עמוקה על כרטיס NVIDIA Jetson במהירות ובקלות באמצעות MATLAB
בפוסט זה, נראה כיצד ניתן לפרוס ולבדוק את האלגוריתם שנמצא ב-MATLAB על כרטיס NVIDIA Jetson.
אחד האתגרים הנפוצים בתהליך פיתוח אב-טיפוס מהיר של רשתות בחומרה, הוא ביצוע אינטגרציה של האלגוריתם עם הממשק והחיישנים של החומרה. כאשר האלגוריתם לא עובד כמצופה, או כאשר זמן הריצה לא עומד בציפיות, יש לחזור לסביבת הפיתוח כדי לאמן מחדש או על מנת לאתר באגים. אלה הם תהליכים מורכבים שלוקחים זמן ומשאבים.
בפוסט זה, נראה כיצד ניתן לפרוס ולבדוק את האלגוריתם שנמצא ב-MATLAB על כרטיס NVIDIA Jetson באמצעות:
- שימוש בנתונים הנקלטים מהמצלמה של ה-Jetson כדי לאמן את האלגוריתם.
- שימוש בסימולציה Hardware-in-the-loop לצורך בדיקות והערכת ביצועים.
- הטמעת האלגוריתם בלוח ה-Jetson (standalone application).
חיבור NVIDIA Jetson עם MATLAB
MATLAB מאפשר חיבור מהיר ופשוט לחומרות של NVIDIA באמצעות תוסף (GPU Coder (Support Package for NVIDIA GPUs. תוסף חינמי זה מכיל APIs של החומרות ומאפשר עבודה עם החומרה בכמה דרכים שונות:
- חיבור ישיר לחומרה מ-MATLAB ובדיקת האפליקציה על נתונים מחיישן החומרה.
- הטמעת האלגוריתם על Jetson.
- איתור באגים לפני הטמעת האלגוריתם.
להלן סכמה להמחשת תהליך העבודה:
לאחר הורדת התוסף, ניתן להשתמש ב-APIs בצורה הבאה:
דוגמה – איתור פגמים בתהליך ייצור של אומים
נציג דוגמה ליישום אוטומציה תעשייתית לגילוי פגמים ונשתמש ב-GPU Coder כדי לפרוס את הרשת לאיתור חריגות בחלקים מיוצרים באמצעות ה-Jetson. נראה כיצד ניתן לפתח אלגוריתם של למידה עמוקה לגילוי ליקויים באומים המיוצרים ואיך ניתן ליישם בצורה דומה אלגוריתמים בתחומים אחרים כמו תחזוקה מונעת של ציוד תעשייתי וכו'.
אימון רשתות ב-MATLAB
בסמינר Deep Learning on Jetson Using MATLAB GPU Coder, and TensorRT של Mathworks, ניתן להיחשף לאימון רשת ב- MATLAB וייצור קוד CUDA אופטימלי המשתמש ב-TensorRT עבור לוחות Jetson.
האיור הבא מתאר את שלבי הפיתוח של אלגוריתם לרשתות למידה עמוקה הכולל את השלבים של preprocessing ו-post-processing. התהליך כולל שלבי עיבוד תמונה אופייניים כמו זיהוי אזור העניין ושינוי גודל תמונת הקלט.
שימוש במצלמה של ה-Jetson לאימון הרשת
לאחר בדיקת האלגוריתם על תמונות שנמצאות במחשב (test image dataset), ניתן להתחבר ללוח של ה-Jetson מ-MATLAB, כדי להריץ את האלגוריתם ישירות על ה-Jetson. בדוגמה זו, בחרנו בלוח Jetson Nano וכפי שתוכלו לראות בקטע קוד הבא, ברגע שתתחברו ללוח, התוסף בודק האם כל חבילות התוכנה הדרושות מותקנות. בדיקת האלגוריתם על תמונות שצולמו מהמצלמה שמחוברת ל-Jetson Nano נעשית בעזרת פונקציית snapshot:
לאחר שייבאנו את התמונה מהמצלמה המחוברת ל-Jetson Nano, הרצנו את הרשת שלנו ב- MATLAB ובדקנו את התוצאות. בדוגמה זו, היינו צריכים לשנות את מספר הפיקסלים המחוברים לפונקציה bwareaopen על מנת לכייל את התמונה מהמצלמה. זהו מקרה אופייני לבדיקת האלגוריתם ולטיפול בכל בעיה לפני יצירת קוד ופריסת האלגוריתם, מכיוון שלעתים קרובות נתוני קלט החיישן אינם זהים לחלוטין לנתוני האימון והבדיקה.
ייצור קוד CUDA
בשלב הבא אנו מייצרים קוד CUDA עבור האלגוריתם שלנו, כפי שהוסבר בפירוט בוובינר זה תוכלו ליצור קוד CUDA אופטימלי (.cu), ספרייה (.dll או .lib) ואף exe.
לפני תחילת העבודה, יש להתקין את הספריות שתרצו להשתמש בזמן הייצור קוד CUDA. תוכלו לבדוק את הסביבה באמצעות כלי אינטרקטיבי ולקבל דו"ח שמציין אם ניתן לייצר קוד ומידע נוסף במידה שבדיקות נכשלו.
לאחר סיום תהליך יצירת הקוד, נוצר דו"ח שמבצע מיפוי של הקוד שנוצר לקוד MATLAB. הקוד שנוצר ממנף את כוח המחשוב של ה- GPU כדי להאיץ לא רק את inference, אלא את אלגוריתם הכולל (שלב ה-preprocessing ו-post-processing).
בדיקת הרשת על לוח של ה-Jetson
בשלב הבא, נשווה בין האלגוריתם ב-MATLAB לקוד שנוצר באמצעות סימולציה של Hardware-in-the-loop. סימולציה HIL היא גישה נפוצה לבדיקת הקוד שנוצר על החומרה. ממשקי ה-API של התוסף עבור ה-Jetson מאפשרים להפעיל את האלגוריתם על החומרה ולתקשר עם MATLAB. לאחר מכן, ניתן להשוות בין הפלט של ההרצה בחומרה לפלט הצפוי ב- MATLAB. הסימולציה לא רק מאפשרת להשוות בין הפלט של האלגוריתם ב-MATLAB לפלט בחומרה, אלא גם למדוד את זמן הריצה של האלגוריתם על החומרה.
פריסת הרשת על Jetson
לבסוף, נוכל לפרוס את האלגוריתם שלנו כ-standalone על ידי עדכון פשוט של תצורת יצירת הקוד.
בנוסף, נוכל לעדכן את האלגוריתם על מנת שיוכל לקרוא את הקלט ישירות ממצלמת הרשת ולהציג את תמונת הפלט בתצוגת הפלט המחוברת ל-Jetson. התוסף מייצר את הקוד הדרוש לממשק עם המצלמה המחוברת ל-Jetson Nano, ללא צורך בקידוד או שילוב ידני, דבר המאפשר למהנדסים לעבור מפיתוח אלגוריתמים להרצה על החומרה בצורה מהירה.
סיכום
ראינו כיצד מטמיעים אלגוריתמי למידה עמוקה בפלטפורמות של NVIDIA Jetson מ- MATLAB. תהליך עבודה זה מפשט מאוד את האיטרציות בזמן פיתוח ואיתור הבאגים כאשר עוברים מפיתוח ב-MATLAB להטמעת האלגוריתם בחומרה. להורדת התוסף לעבודה עם ה-Jetson, אתם מוזמנים להשתמש בקישור הזה.
בערוץ ה-Youtube שלנו, תוכלו למצוא מגוון תכנים בנושא בניית רשתות בסביבת MATLAB וסמינר על פריסת רשתות בחומרה.