Google I/O הוא עטיפה! התעדכן בהפעלות של TensorFlow. צפה בהפעלות

בעיות ידועות

קומפילציה עם XLA יכולה לשפר מאוד את הביצועים של התוכניות שלך, אבל ל-TensorFlow interop יש מספר פינות חדות ידועות.

tf.Variable במכשיר שונה

הודעת שגיאה: INVALID_ARGUMENT: Trying to access resource <Variable> (defined @ <Loc>) located in device CPU:0 from device GPU:0

אשכול XLA פועל על בדיוק מכשיר אחד, וזה לא יכול לקרוא או לכתוב tf.Variable ממוקם על מכשיר אחר. בדרך כלל הודעת שגיאה זו מציינת שהמשתנה לא הוצב במכשיר הנכון מלכתחילה. הודעת השגיאה צריכה לציין במדויק את מיקומו של המשתנה הפוגע.

המרת TensorArray TF/XLA אינה נתמכת

הודעת שגיאה: Support for TensorList crossing the XLA/TF boundary is not implemented .

XLA תומך tf.TensorArray . עם זאת, interconversion בין ייצוגי TF ו XLA לא מיושם. שגיאה זו לעתים קרובות מתעוררת כאשר TensorArray משמש בתוך בלוק ההידור, אבל הנגזר שצולם בחוץ.

עקיפת בעיה: לקמפל את ההיקף החיצוני אשר נוקט נגזרת.

TensorFlow בעוד לולאות צריכות להיות מוגבלות (או שהתמיכה האחורית תהיה מושבתת)

הודעת שגיאה: XLA compilation requires a fixed tensor list size. Set the max number of elements. This could also happen if you're using a TensorArray in a while loop that does not have its maximum_iteration set, you can fix this by setting maximum_iteration to a suitable value .

TF תוך לולאות שנוצרו באמצעות tf.while_loop תמיכה backpropagation באמצעות צבירת כל תוצאות ביניים בתוך TensorArray , אבל XLA רק תומך מתוחם TensorArray ים.

עקיפת בעיה: כול הידור תוך לולאות צריכות גם צריכות maximum_iterations פרמטר מוגדר לערך קבוע ידוע בזמן ההידור, או backpropagation הושבת באמצעות back_prop=False .

Dynamic tf.TensorArray אינה נתמכת

כותב לתוך tf.TensorArray(..., dynamic_size=True) אינם compilable עם XLA, כמו כותב כאלה דורשים מספר לא ידוע של reallocations כאשר המערך עולה לגבולו המקורי.

עקיפת הבעיה: לספק ידוע מחויב באופן סטטי כדי מערכים שלך.

יצירת מספרים אקראית מתעלמת מ-TF seed

XLA מתעלם כרגע מזרעי TF לפעולות אקראיות. זה משפיע על פעילות אקראית מצבי TF, כגון tf.random.normal , או tf.nn.dropout . XLA יתנהג כאילו הקומפילציה זרעה עם סיד ייחודי חדש בכל הפעלה בתוך אותו תהליך (הריצה הראשונה של התהליך תמיד תניב את אותה תוצאה).

עקיפת הבעיה: להשתמש RNGs מומלץ כגון tf.random.stateless_uniform או tf.random.Generator ישירות.