يمكن أن يؤدي التجميع باستخدام XLA إلى تحسين أداء برامجك بشكل كبير ، ولكن يوجد عدد من الزوايا الحادة المعروفة في TensorFlow.
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
. ومع ذلك ، لم يتم تنفيذ التحويل البيني بين تمثيلات TF و XLA بعد. غالبًا ما ينشأ هذا الخطأ عند استخدام TensorArray
داخل الكتلة المترجمة ، ولكن يتم أخذ المشتق إلى الخارج.
الحل : تجميع النطاق الأبعد الذي يأخذ المشتق.
يجب تقييد TensorFlow أثناء التكرارات (أو تعطيل خاصية backprop)
رسالة الخطأ : 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 TensorArray
TensorArray
tf.while_loop
.
الحل : تحتاج جميع حلقات while المترجمة إلى تعيين معلمة maximum_iterations
إلى قيمة ثابتة معروفة في وقت الترجمة ، أو تعطيل backpropagation باستخدام back_prop=False
.
الديناميكي tf.TensorArray
غير مدعوم
عمليات الكتابة في tf.TensorArray(..., dynamic_size=True)
غير قابلة للتجميع مع XLA ، حيث تتطلب عمليات الكتابة هذه عددًا غير معروف من عمليات إعادة التخصيص عندما يتجاوز المصفوفة الحد الأصلي.
الحل : قدم ارتباطًا معروفًا ثابتًا لمصفوفاتك.
يتجاهل توليد العدد العشوائي بذور TF
تتجاهل XLA حاليًا بذور TF لعمليات عشوائية. يؤثر هذا على عمليات TF العشوائية ذات الحالة ، مثل tf.random.normal
أو tf.nn.dropout
. سوف تتصرف XLA كما لو أن التجميع قد تم بذره ببذرة فريدة جديدة في كل عملية تشغيل ضمن نفس العملية (ستؤدي العملية الأولى دائمًا إلى نفس النتيجة).
الحل : استخدم RNGs الموصى بها مثل tf.random.stateless_uniform
أو tf.random.Generator
مباشرة.
لا يتم دعم المدخلات التي يجب أن تكون ثابتة والتي هي وظائف لمتغيرات الاستقراء
رسالة الخطأ : XLA compilation requires that operator arguments that represent shapes or dimensions be evaluated to concrete values at compile time. This error means that a shape or dimension argument could not be evaluated at compile time, usually because the value of the argument depends on a parameter to the computation, on a variable, or on a stateful operation such as a random number generator
.
يتطلب XLA قيمًا معينة ليتم معرفتها في وقت الترجمة ، مثل محور التخفيض لعملية تقليل أو أبعاد التحويل. ضع في اعتبارك الحالة التي يتم فيها على سبيل المثال تعريف محور الخفض على أنه دالة لمتغير استقراء لـ tf.range
: لا يمكن حلها بشكل ثابت دون فتح الحلقة بأكملها ، وهو ما قد لا يرغب فيه المستخدم.
الحل : قم بفك الحلقات ، على سبيل المثال عن طريق تحويل tf.range
إلى range
Python.