এই প্রাথমিক গাইডটি প্রারম্ভিক গ্রহণকারীদের জন্য যারা টেনসরফ্লো সহজেই দক্ষতার সাথে তাদের হার্ডওয়্যারে পুনরুদ্ধার করতে চান। গাইডটি ধাপে ধাপে নয় এবং এলএলভিএম , বাজেল এবং টেনসরফ্লো সম্পর্কে জ্ঞান গ্রহণ করে।
এক্সএলএ একটি বিমূর্ত ইন্টারফেস সরবরাহ করে যা একটি নতুন আর্কিটেকচার বা এক্সিলারেটর টেনসরফ্লো গ্রাফগুলি চালানোর জন্য একটি ব্যাকএন্ড তৈরি করতে প্রয়োগ করতে পারে। এক্সএলএর পুনরুদ্ধার করা নতুন হার্ডওয়্যারের জন্য প্রতিটি বিদ্যমান টেনসরফ্লো অপকে বাস্তবায়নের চেয়ে উল্লেখযোগ্যভাবে সহজ এবং স্কেলযোগ্য হওয়া উচিত।
বেশিরভাগ বাস্তবায়ন নিম্নলিখিত পরিস্থিতিতে একটির মধ্যে পড়ে যাবে:
- বিদ্যমান সিপিইউ আর্কিটেকচারটি বর্তমানে কোনও এলএলভিএম ব্যাকএন্ডের সাথে বা ছাড়া XLA দ্বারা আনুষ্ঠানিকভাবে সমর্থনযোগ্য নয়।
- বিদ্যমান এলএলভিএম ব্যাকএন্ড সহ নন-সিপিইউ-এর মতো হার্ডওয়্যার
- বিদ্যমান এলএলভিএম ব্যাকএন্ড ব্যতীত সিপিইউ-মতো নন-হার্ডওয়্যার।
দৃশ্য 1: বিদ্যমান সিপিইউ আর্কিটেকচারটি এখনও আনুষ্ঠানিকভাবে এক্সএলএ দ্বারা সমর্থিত নয়
এই পরিস্থিতিতে, বিদ্যমান এক্সএলএ সিপিইউ ব্যাকএন্ডটি দেখে শুরু করুন । এলএলভিএম ব্যবহার করে এক্সপিএল বিভিন্ন সিপিইউতে টেনসরফ্লোকে পুনরুদ্ধার করা সহজ করে তোলে, যেহেতু সিপিইউগুলির জন্য এক্সএলএ ব্যাকেন্ডের মধ্যে মূল পার্থক্য এলএলভিএম দ্বারা উত্পাদিত কোড। গুগল x64 এবং এআরএম 64 আর্কিটেকচারের জন্য এক্সএলএল পরীক্ষা করে।
হার্ডওয়্যার বিক্রেতার যদি তাদের হার্ডওয়ারের জন্য একটি এলএলভিএম ব্যাকএন্ড থাকে তবে এক্সএলএল দিয়ে নির্মিত এলএলভিএমের সাথে ব্যাকএন্ডের লিঙ্ক করা সহজ। জেআইটি মোডে, এক্সএলএল সিপিইউ ব্যাকএন্ড হোস্ট সিপিইউ-র জন্য কোড নির্গত করে। সময়ের-সংকলনের জন্য, xla::AotCompilationOptions
লক্ষ্য আর্কিটেকচারটি কনফিগার করতে একটি এলএলভিএম ট্রিপল সরবরাহ করতে পারে।
যদি কোনও বিদ্যমান এলএলভিএম ব্যাকএন্ড না থাকে তবে অন্য ধরণের কোড জেনারেটর উপস্থিত থাকে তবে বিদ্যমান সিপিইউ ব্যাক-এন্ডের বেশিরভাগটি পুনরায় ব্যবহার করা সম্ভব।
পরিস্থিতি 2: একটি বিদ্যমান এলএলভিএম ব্যাকএন্ড সহ নন-সিপিইউ-এর মতো হার্ডওয়্যার
বিদ্যমান xla::CPUCompiler
এবং xla::GPUCompiler
ক্লাসগুলিতে একটি নতুন xla::Compiler
বাস্তবায়ন মডেল করা সম্ভব, যেহেতু এগুলি ইতিমধ্যে xla::GPUCompiler
IR নির্গত করে। হার্ডওয়্যারের প্রকৃতির উপর নির্ভর করে, সম্ভবত এলএলভিএম আইআর প্রজন্মের দিকগুলির অনেকগুলি পরিবর্তন করতে হবে, তবে বিদ্যমান ব্যাকএন্ডের সাথে প্রচুর কোড ভাগ করা যায়।
অনুসরণ করার জন্য একটি ভাল উদাহরণ হ'ল এক্সএলএর জিপিইউ ব্যাকএন্ড । জিপিইউ ব্যাকএন্ড একটি নন-সিপিইউ-এর মতো আইএসএকে লক্ষ্য করে এবং তাই এর কোড উত্পন্নকরণের কিছু দিকগুলি জিপিইউ ডোমেনের কাছে অনন্য। অন্যান্য ধরণের হার্ডওয়্যার, যেমন হেক্সাগন (যেমন একটি প্রবাহী এলএলভিএম ব্যাকএন্ড রয়েছে) এর মতো ডিএসপিগুলি, এলএলভিএম আইআর নিঃসরণ যুক্তির কিছু অংশ পুনরায় ব্যবহার করতে পারে তবে অন্যান্য অংশগুলি অনন্য হবে।
পরিস্থিতি 3: বিদ্যমান এলএলভিএম ব্যাকেন্ড ব্যতীত নন-সিপিইউ-এর মতো হার্ডওয়্যার
যদি এলএলভিএম ব্যবহার করা সম্ভব না হয় তবে সর্বোত্তম বিকল্পটি হ'ল কাঙ্ক্ষিত হার্ডওয়্যারের জন্য এক্সএলএর জন্য একটি নতুন ব্যাকএন্ড বাস্তবায়ন করা। এই বিকল্পটির সর্বাধিক প্রচেষ্টা প্রয়োজন। যে ক্লাসগুলি প্রয়োগ করা দরকার সেগুলি নিম্নরূপ:
-
StreamExecutor
: অনেক ডিভাইসের জন্যStreamExecutor
সমস্ত পদ্ধতির প্রয়োজন হয় না। বিশদ জন্য বিদ্যমানStreamExecutor
বাস্তবায়ন দেখুন। -
xla::Compiler
: এই শ্রেণিটি একটি এইচএলও গণনারxla::Executable
একটিxla::Executable
-
xla::Executable
: এই শ্রেণিটি প্ল্যাটফর্মে একটি সংকলিত গণনা চালু করতে ব্যবহৃত হয়। -
xla::TransferManager
: এই ক্লাসটি প্রদত্ত ডিভাইস মেমরি হ্যান্ডলগুলি থেকে এক্সএলএল আক্ষরিক ডেটা তৈরির জন্য প্ল্যাটফর্ম-নির্দিষ্ট প্রক্রিয়া সরবরাহ করতেxla::TransferManager
সক্ষম করে। অন্য কথায়, এটি হোস্ট থেকে ডিভাইস এবং পিছনে ডেটা স্থানান্তর সজ্জিত করতে সহায়তা করে।