از اینکه با Google I/O تنظیم کردید متشکریم. مشاهده همه جلسات در صورت تقاضا تماشا کنید

مشکلات شناخته شده

کامپایل با 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 while باید حلقه‌ها محدود شوند (یا 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 while ایجاد شده با استفاده از tf.while_loop با جمع‌آوری همه نتایج میانی در یک TensorArray از انتشار پس‌انداز پشتیبانی می‌کنند، اما XLA فقط از TensorArray محدود پشتیبانی می‌کند.

راه حل : همه حلقه ها در حالی که باید کامپایل شوند یا باید پارامتر maximum_iterations را روی مقدار ثابتی که در زمان کامپایل مشخص است تنظیم کرده باشند، یا پس انتشار با استفاده از back_prop=False غیرفعال شود.

Dynamic tf.TensorArray پشتیبانی نمی شود

نوشتن در tf.TensorArray(..., dynamic_size=True) با XLA قابل کامپایل نیست، زیرا چنین نوشته هایی به تعداد نامعلومی از تخصیص مجدد نیاز دارند زمانی که آرایه از حد اصلی فراتر رود.

راه حل : برای آرایه های خود یک کران شناخته شده ایستا ارائه دهید.

تولید اعداد تصادفی دانه TF را نادیده می گیرد

XLA در حال حاضر دانه های TF را برای عملیات تصادفی نادیده می گیرد. این بر عملیات تصادفی TF حالتی مانند tf.random.normal یا tf.nn.dropout می گذارد. XLA طوری رفتار خواهد کرد که گویی کامپایل با یک seed منحصر به فرد جدید در هر اجرا در همان فرآیند کاشته شده است (اولین اجرای فرآیند همیشه نتیجه یکسانی را به همراه خواهد داشت).

راه حل : از RNG های توصیه شده مانند 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 پایتون.