סקירה כללית
כדי להפריד בין יעדי חומרה ותוכנה שונים, ל-MLIR יש "דיאלקטים", כולל:
- TensorFlow IR, המייצג את כל הדברים האפשריים בגרפים של TensorFlow.
- XLA HLO IR, שנועד לנצל את יכולות הקומפילציה של XLA (עם פלט בין היתר ל-TPUs).
- דיאלקט אפינית ניסיוני, המתמקד בייצוגים ואופטימיזציות פוליהדרליות .
- LLVM IR, שיש לו מיפוי 1:1 בינו לבין הייצוג של LLVM עצמו, המאפשר ל-MLIR לפלוט קוד GPU ו-CPU דרך LLVM.
- TensorFlow Lite, אשר יתורגם להפעלת קוד בפלטפורמות ניידות.
כל ניב מורכב מקבוצה של פעולות מוגדרות שיש להן אינוריאנטים, כמו: "זהו אופרטור בינארי, ולכניסות והפלטים יש את אותם סוגים."
מוסיף ל-MLIR
ל-MLIR אין רשימה קבועה/מובנית של פעולות ידועות בעולם (ללא "היבטים פנימיים"). דיאלקטים יכולים להגדיר סוגים מותאמים אישית לחלוטין, וכך MLIR יכול לדגמן דברים כמו מערכת מסוג LLVM IR (שיש לה אגרגטים מהשורה הראשונה), הפשטות תחום חשובות עבור מאיצים מותאמים ל-ML כמו טיפוסים קוונטיים, ואפילו מערכות מסוג Swift או Clang (אשר בנויים סביב צמתי הצהרת Swift/Clang) בעתיד.
אם אתה רוצה לחבר מהדר חדש ברמה נמוכה, תיצור ניב חדש והנמכות בין ניב גרף TensorFlow לניב שלך. זה מחליק את הדרך עבור יצרני חומרה ומהדרים. אתה יכול אפילו למקד דיאלקטים ברמות שונות באותו דגם; מטעמי האופטימיזציה ברמה גבוהה יותר יכבדו את החלקים הלא מוכרים של ה-IR וימתינו לרמה נמוכה יותר כדי לטפל בזה.