این صفحه به‌وسیله ‏Cloud Translation API‏ ترجمه شده است.
Switch to English

در حال توسعه یک باطن جدید برای XLA

این راهنمای مقدماتی برای پذیرندگان اولیه است که می خواهند TensorFlow را به راحتی در سخت افزار خود به روشی کارآمد دوباره هدف بگیرند. این راهنما گام به گام نیست و دانش LLVM ، Bazel و TensorFlow را فرض می کند.

XLA یک رابط انتزاعی فراهم می کند که یک معماری یا شتاب دهنده جدید می تواند برای ایجاد یک باطن برای اجرای نمودارهای TensorFlow پیاده سازی کند. هدف گذاری مجدد XLA نسبت به اجرای هر TensorFlow Op موجود برای سخت افزار جدید بسیار ساده و قابل مقیاس است.

بیشتر پیاده سازی ها در یکی از حالات زیر قرار می گیرند:

  1. معماری CPU موجود هنوز توسط XLA پشتیبانی رسمی نشده است ، با یا بدون پشتوانه LLVM موجود.
  2. سخت افزار غیر CPU مانند با پس زمینه LLVM موجود.
  3. سخت افزار غیر CPU مانند و بدون بازگشت LLVM موجود.

سناریو 1: معماری پردازنده موجود هنوز به طور رسمی توسط XLA پشتیبانی نمی شود

در این سناریو ، با نگاه کردن به پردازنده XLA CPU موجود شروع کنید. XLA با استفاده از LLVM آسان سازی مجدد TensorFlow به پردازنده های مختلف را آسان می کند ، زیرا تفاوت اصلی بین پردازنده های XLA برای پردازنده ها کد تولید شده توسط LLVM است. گوگل XLA را برای معماری x64 و ARM64 آزمایش می کند.

اگر فروشنده سخت افزار برای سخت افزار خود LLVM داشته باشد ، پیوند دادن Backend با LLVM ساخته شده با XLA ساده است. در حالت JIT ، باطن پردازنده XLA کدی را برای CPU میزبان منتشر می کند. برای تدوین پیش از موعد ، xla::AotCompilationOptions می تواند سه گانه LLVM برای پیکربندی معماری هدف فراهم کند.

اگر باطری LLVM موجود نباشد اما نوع دیگری از تولید کننده کد وجود داشته باشد ، باید بتوان از بیشتر باطن پردازنده موجود استفاده مجدد کرد.

سناریو 2: سخت افزار غیر CPU مانند با پسوند LLVM موجود

می توان یک xla::Compiler پیاده سازی xla::Compiler جدید را بر روی کلاس های موجود xla::CPUCompiler و xla::GPUCompiler کرد ، زیرا اینها LLVM IR را ساطع می کنند. بسته به ماهیت سخت افزار ، این امکان وجود دارد که بسیاری از جنبه های تولید LLVM IR باید تغییر کند ، اما کدهای زیادی را می توان با باطن های موجود به اشتراک گذاشت.

یک مثال خوب برای دنبال کردن ، GPU GPU XLA است. GPU backend ISA غیر CPU مانند را هدف قرار می دهد و بنابراین برخی از جنبه های تولید کد آن منحصر به دامنه GPU است. انواع دیگر سخت افزارها ، مانند DSP ها مانند Hexagon (که دارای پشتوانه بالادستی LLVM است) ، می توانند از قسمت های منطق انتشار IR LLVM مجدداً استفاده کنند ، اما قسمت های دیگر منحصر به فرد خواهند بود.

سناریو 3: سخت افزار غیر CPU مانند بدون پسوند LLVM موجود

اگر امکان استفاده از LLVM وجود ندارد ، بهترین گزینه پیاده سازی Backend جدید برای XLA برای سخت افزار مورد نظر است. این گزینه بیشترین تلاش را می طلبد. کلاسهایی که باید اجرا شوند به شرح زیر است:

  • StreamExecutor : برای بسیاری از دستگاه ها ، همه روش های StreamExecutor لازم نیست. برای جزئیات به پیاده سازی های موجود StreamExecutor مراجعه کنید.
  • xla::Compiler : این کلاس تلفیقی از محاسبه HLO را به xla::Executable .
  • xla::Executable : از این کلاس برای راه اندازی محاسبات کامپایل شده در سیستم عامل استفاده می شود.
  • xla::TransferManager : این کلاس xla::TransferManager قادر می سازد مکانیزم های مخصوص بستر های نرم افزاری برای ساخت داده های واقعی XLA از دسته های حافظه دستگاه داده شده را فراهم کنند. به عبارت دیگر ، این امر به کپسوله سازی انتقال داده از میزبان به دستگاه و برگشت کمک می کند.