דף זה תורגם על ידי Cloud Translation API.
Switch to English

פיתוח Backend חדש ל- XLA

מדריך ראשוני זה מיועד למאמצים המוקדמים שרוצים להחזיר בקלות את TensorFlow לחומרה שלהם בצורה יעילה. המדריך אינו צעד אחר צעד ומניח ידע על LLVM , Bazel ו- TensorFlow.

XLA מספק ממשק מופשט שיכול להטמיע ארכיטקטורה או מאיץ חדש בכדי ליצור backend להפעלת גרפי TensorFlow. מיקוד מחדש של ה- XLA צריך להיות פשוט יותר וניתן להרחבה מאשר ליישם כל TensorFlow Op הקיים עבור חומרה חדשה.

רוב היישומים ייכנסו לאחד התרחישים הבאים:

  1. ארכיטקטורת CPU קיימת שטרם נתמכה רשמית על ידי XLA, עם או בלי תומך LLVM קיים.
  2. חומרה שאינה דומה למעבד עם תומך LLVM קיים.
  3. חומרה שאינה דומה למעבד ללא תומך LLVM קיים.

תרחיש 1: ארכיטקטורת CPU קיימת שטרם נתמכה רשמית על ידי XLA

בתרחיש זה, התחל על ידי התבוננות בתמיכה במעבד ה- XLA הקיים. XLA מקל על מיקומו מחדש של TensorFlow למעבדים שונים באמצעות LLVM, מכיוון שההבדל העיקרי בין תומכי XLA למעבדים הוא הקוד שנוצר על ידי LLVM. גוגל בודקת XLA לארכיטקטורות x64 ו- ARM64.

אם לספק החומרה יש backend LLVM לחומרה שלו, פשוט לקשר את הנדנד עם ה- LLVM הבנוי עם XLA. במצב JIT, מעבד ה- CPU של ה- XLA פולט קוד עבור המעבד המארח. עבור קומפילציה מראש, xla::AotCompilationOptions יכול לספק משולש LLVM להגדרת תצורת ארכיטקטורת היעד.

אם אין backend LLVM קיים אך קיים סוג אחר של מחולל קוד, צריך להיות אפשרי לעשות שימוש חוזר ברוב התמיכה הקיימת במעבד.

תרחיש 2: חומרה שאינה דומה למעבד עם תומך LLVM קיים

ניתן לבצע מודל של יישום xla::Compiler חדש על xla::CPUCompiler ו- xla::GPUCompiler , מכיוון שאלו כבר פולטים LLVM IR. תלוי באופי החומרה, יתכן שיהיה צורך לשנות רבים מהיבטי ייצור ה- LLVM IR, אך ניתן לשתף הרבה קוד עם המגבים הקיימים.

דוגמא טובה לעקוב אחריה היא התמיכה של ה- GPU של XLA. תומך ה- GPU ממקד למערכת ISA שאינה דומה למעבד ולכן חלק מההיבטים של ייצור הקוד שלהם ייחודיים לתחום ה- GPU. סוגים אחרים של חומרה, למשל DSPs כמו Hexagon (שיש להם backend LLVM במעלה הזרם), יכולים לעשות שימוש חוזר בחלקים מהלוגיקת הפליטה של ​​LLVM IR, אך חלקים אחרים יהיו ייחודיים.

תרחיש 3: חומרה שאינה דומה למעבד ללא תומך LLVM קיים

אם לא ניתן להשתמש ב- LLVM, האפשרות הטובה ביותר היא ליישם backend חדש ל- XLA עבור החומרה הרצויה. אפשרות זו דורשת את מירב המאמץ. השיעורים שצריך ליישם הם כדלקמן:

  • StreamExecutor : עבור מכשירים רבים לא כל השיטות של StreamExecutor נחוצות. ראה StreamExecutor קיימים של StreamExecutor לפרטים.
  • xla::Compiler : כיתה זו xla::Compiler את ההרכבה של חישוב HLO ל- xla::Executable .
  • xla::Executable : כיתה זו משמשת להפעלת חישוב מורכב בפלטפורמה.
  • xla::TransferManager : כיתה זו מאפשרת לתככים לספק מנגנונים ספציפיים לפלטפורמה לבניית נתונים מילוליים של XLA מידיות זיכרון נתונות של המכשיר. במילים אחרות, זה עוזר להכיל את העברת הנתונים מהמארח למכשיר ובחזרה.