XLA এর জন্য একটি নতুন ব্যাকএন্ড তৈরি করা হচ্ছে

এই নির্দেশিকাটি সেই সিস্টেম ইঞ্জিনিয়ারদের জন্য যারা XLA আউটপুট প্রোগ্রামগুলি করতে চান যা তাদের হার্ডওয়্যারকে দক্ষতার সাথে লক্ষ্য করে। নির্দেশিকাটি ধাপে ধাপে নয় এবং LLVM , Bazel , এবং XLA এর জ্ঞান গ্রহণ করে৷

XLA একটি বিমূর্ত ইন্টারফেস প্রদান করে যা একটি নতুন আর্কিটেকচার বা এক্সিলারেটর XLA দ্বারা ML প্রোগ্রাম আউটপুট চালানোর জন্য একটি ব্যাকএন্ড তৈরি করতে প্রয়োগ করতে পারে। নতুন হার্ডওয়্যারের জন্য PyTorch বা TensorFlow-এর মতো ফ্রন্টএন্ড ফ্রেমওয়ার্ক থেকে বিদ্যমান প্রতিটি বিকল্প বাস্তবায়নের চেয়ে XLA পুনরায় লক্ষ্য করা উল্লেখযোগ্যভাবে সহজ এবং আরও মাপযোগ্য হওয়া উচিত।

বেশিরভাগ বাস্তবায়ন নিম্নলিখিত পরিস্থিতিগুলির মধ্যে একটির মধ্যে পড়বে:

  1. বিদ্যমান LLVM ব্যাকএন্ড সহ বা ছাড়াই বিদ্যমান CPU আর্কিটেকচার এখনও আনুষ্ঠানিকভাবে XLA দ্বারা সমর্থিত নয়।
  2. একটি বিদ্যমান LLVM ব্যাকএন্ড সহ নন-সিপিইউ-এর মতো হার্ডওয়্যার।
  3. বিদ্যমান LLVM ব্যাকএন্ড ছাড়া নন-সিপিইউ-এর মতো হার্ডওয়্যার।

দৃশ্যকল্প 1: বিদ্যমান CPU আর্কিটেকচার এখনো আনুষ্ঠানিকভাবে XLA দ্বারা সমর্থিত নয়

এই পরিস্থিতিতে, বিদ্যমান XLA CPU ব্যাকএন্ড দেখে শুরু করুন। XLA LLVM ব্যবহার করে বিভিন্ন CPU-কে টার্গেট করা সহজ করে তোলে, কারণ CPU-এর জন্য XLA ব্যাকএন্ডের মধ্যে প্রধান পার্থক্য হল LLVM দ্বারা তৈরি কোড।

যদি হার্ডওয়্যার বিক্রেতার কাছে তাদের হার্ডওয়্যারের জন্য একটি LLVM ব্যাকএন্ড থাকে, তাহলে XLA দিয়ে নির্মিত LLVM-এর সাথে ব্যাকএন্ড লিঙ্ক করা সহজ। JIT মোডে, XLA CPU ব্যাকএন্ড হোস্ট CPU-এর জন্য কোড নির্গত করে। আগাম সময়ের সংকলনের জন্য, xla::AotCompilationOptions লক্ষ্য আর্কিটেকচার কনফিগার করার জন্য একটি LLVM ট্রিপল প্রদান করতে পারে।

যদি কোন বিদ্যমান LLVM ব্যাকএন্ড না থাকে, কিন্তু অন্য ধরনের কোড জেনারেটর বিদ্যমান থাকে, তাহলে বিদ্যমান সিপিইউ ব্যাকএন্ডের অধিকাংশই পুনরায় ব্যবহার করা সম্ভব।

দৃশ্যকল্প 2: একটি বিদ্যমান LLVM ব্যাকএন্ড সহ নন-সিপিইউ-এর মতো হার্ডওয়্যার

বিদ্যমান xla::CPUCompiler এবং xla::GPUCompiler ক্লাসে একটি নতুন xla::Compiler বাস্তবায়ন মডেল করা সম্ভব, যেহেতু এগুলো ইতিমধ্যেই LLVM IR নির্গত করে। হার্ডওয়্যারের প্রকৃতির উপর নির্ভর করে, এটা সম্ভব যে LLVM IR প্রজন্মের অনেক দিক পরিবর্তন করতে হবে, তবে বিদ্যমান ব্যাকএন্ডগুলির সাথে প্রচুর কোড ভাগ করা যেতে পারে।

অনুসরণ করার জন্য একটি ভাল উদাহরণ হল XLA এর GPU ব্যাকএন্ড । জিপিইউ ব্যাকএন্ড একটি নন-সিপিইউ-এর মতো আইএসএকে লক্ষ্য করে এবং তাই এর কোড তৈরির কিছু দিক GPU ডোমেনের জন্য অনন্য। অন্যান্য ধরণের হার্ডওয়্যার, যেমন ডিএসপি যেমন হেক্সাগন (যার একটি আপস্ট্রিম LLVM ব্যাকএন্ড রয়েছে), LLVM IR নির্গমন যুক্তির অংশগুলি পুনরায় ব্যবহার করতে পারে, তবে অন্যান্য অংশগুলি অনন্য হবে।

দৃশ্যকল্প 3: বিদ্যমান LLVM ব্যাকএন্ড ছাড়া নন-সিপিইউ-এর মতো হার্ডওয়্যার

যদি LLVM ব্যবহার করা সম্ভব না হয়, তাহলে কাঙ্খিত হার্ডওয়্যারের জন্য XLA-এর জন্য একটি নতুন ব্যাকএন্ড প্রয়োগ করাই সর্বোত্তম বিকল্প। এই বিকল্পটি সবচেয়ে প্রচেষ্টা প্রয়োজন। যে ক্লাসগুলি বাস্তবায়ন করা দরকার তা নিম্নরূপ:

  • StreamExecutor : অনেক ডিভাইসের জন্য StreamExecutor এর সব পদ্ধতির প্রয়োজন হয় না। বিস্তারিত জানার জন্য বিদ্যমান StreamExecutor বাস্তবায়ন দেখুন।
  • xla::Compiler : এই ক্লাসটি একটি এইচএলও কম্পিউটেশনের সংকলনকে একটি xla::Executable ধারণ করে।
  • xla::Executable : এই ক্লাসটি প্ল্যাটফর্মে একটি সংকলিত গণনা চালু করতে ব্যবহৃত হয়।
  • xla::TransferManager : প্রদত্ত ডিভাইস মেমরি হ্যান্ডেলগুলি থেকে XLA আক্ষরিক ডেটা নির্মাণের জন্য প্ল্যাটফর্ম-নির্দিষ্ট প্রক্রিয়া প্রদান করতে এই ক্লাসটি ব্যাকএন্ডকে সক্ষম করে। অন্য কথায়, এটি হোস্ট থেকে ডিভাইসে এবং পিছনে ডেটা স্থানান্তরকে এনক্যাপসুলেট করতে সহায়তা করে।