প্রচেষ্টার স্তর

XLA কম্পাইলার কতটুকু প্রচেষ্টা ব্যয় করবে তা নিয়ন্ত্রণ করার বিকল্প প্রদান করে

  • রানটাইম পারফরম্যান্সের জন্য অপ্টিমাইজ করুন, এবং
  • প্রোগ্রামটিকে "মেমরিতে ফিট" করুন (যার একটি প্ল্যাটফর্ম-নির্ভর অর্থ রয়েছে)

অপ্টিমাইজেশন লেভেল

gcc অথবা clang-এর -O ফ্ল্যাগের মতো, এই ফিল্ডটি ব্যবহারকারীকে এক্সিকিউশন টাইমের জন্য অপ্টিমাইজেশনে কম্পাইলার কতটা কাজ করে তা প্রভাবিত করতে দেয়। এটি ExecutableBuildOptionsProto মেসেজের optimization_level ফিল্ড অথবা ExecutionOptions মেসেজের optimization_level ফিল্ডের মাধ্যমে সেট করা যেতে পারে।

কম অপ্টিমাইজেশন লেভেলের ফলে বিভিন্ন HLO পাস ভিন্নভাবে আচরণ করবে, সাধারণত কম কাজ করবে, অথবা কিছু HLO পাস সম্পূর্ণরূপে অক্ষম করতে পারে। অপ্টিমাইজেশন লেভেল কম্পাইলার ব্যাকএন্ডকেও প্রভাবিত করতে পারে, যার ফলে এই ক্ষেত্রের সঠিক প্রভাব লক্ষ্য প্ল্যাটফর্মের উপর নির্ভর করে। তবে, একটি সাধারণ নির্দেশিকা হিসাবে, নিম্নলিখিত টেবিলটি প্রতিটি মানের প্রত্যাশিত সামগ্রিক প্রভাব বর্ণনা করে:

স্তর ব্যবহারের ধরণ
প্রচেষ্টা_O0 দ্রুততম সংকলন, ধীরতম রানটাইম
প্রচেষ্টা_O1 যুক্তিসঙ্গত রানটাইম সহ দ্রুত সংকলন
প্রচেষ্টা_O2 রানটাইমকে দৃঢ়ভাবে অগ্রাধিকার দিন (উৎপাদন কাজের চাপের জন্য উপযুক্ত ডিফল্ট)
প্রচেষ্টা_O3 ব্যয়বহুল বা পরীক্ষামূলক অপ্টিমাইজেশন

XLA:GPU তে ব্যবহার করুন

XLA:GPU তে, বেশ কিছু পাস আছে যা আমরা ডিফল্টভাবে অক্ষম করি কারণ তারা HLO আকার বাড়িয়ে সংকলনের সময় উল্লেখযোগ্যভাবে বৃদ্ধি করে। সুবিধার জন্য, আমরা সেগুলিকে অপ্টিমাইজেশন লেভেল বিকল্পের অধীনে একত্রিত করি, যেমন optimization_level কে O1 বা তার উপরে সেট করলে নিম্নলিখিত আচরণ দেখা দেবে:

  • ডেটা-প্যারালাল যোগাযোগের জন্য সাধারণত ব্যবহৃত সমষ্টিগুলিকে পাইপলাইন করা হবে। পৃথক পতাকা সক্ষম করে এই আচরণটি আরও সুক্ষ্মভাবে পরিচালিত করা যেতে পারে।
    • xla_gpu_enable_pipelined_all_gather
    • xla_gpu_enable_pipelined_all_reduce
    • xla_gpu_enable_pipelined_reduce_scatter
  • দুই গুণ করে while লুপ আনরোল করা। লুপ-ব্যারিয়ার ভেঙে ফেলার ফলে সম্ভাব্যভাবে আরও ভালো কম্পিউট-যোগাযোগ ওভারল্যাপ এবং কম কপি তৈরি হয়।
    • xla_gpu_enable_while_loop_double_buffering
  • যোগাযোগের বিলম্ব লুকানোর জন্য লেটেন্সি হাইডিং শিডিউলার বেশিরভাগ কাজ করবে।
    • xla_gpu_enable_latency_hiding_scheduler
  • নেটওয়ার্কিং ব্যান্ডউইথ সর্বাধিক করার জন্য, কম্বাইনার পাসগুলি পাইপলাইনযুক্ত কালেক্টিভগুলিকে সর্বাধিক উপলব্ধ মেমোরিতে একত্রিত করবে। ইনপুট HLO-তে লুপটি ইতিমধ্যেই আনরোল করা থাকলে অপ্টিমাইজেশন শুরু হয় না।

মেমোরি ফিটিং লেভেল

আরেকটি প্রচেষ্টা স্তরের বিকল্পটি নিয়ন্ত্রণ করে যে কম্পাইলারটি ফলাফলস্বরূপ প্রোগ্রামটিকে "মেমোরিতে ফিট" করার জন্য কতটা চেষ্টা করবে, যেখানে "ফিট" এবং "মেমোরি" এর ব্যাকএন্ড-নির্ভর অর্থ রয়েছে (উদাহরণস্বরূপ, XLA:TPU তে, এই বিকল্পটি নিয়ন্ত্রণ করে যে কম্পাইলার TPU এর উচ্চ-ব্যান্ডউইথ মেমোরি (HBM) ব্যবহার HBM ক্ষমতার নিচে রাখতে কতটা কাজ করে)। এটি ExecutableBuildOptionsProto বার্তার memory_fitting_level ক্ষেত্রের মাধ্যমে অথবা ExecutionOptions বার্তার memory_fitting_level ক্ষেত্রের মাধ্যমে সেট করা যেতে পারে।

অপ্টিমাইজেশন স্তরের মতো, প্রতিটি প্রচেষ্টা স্তরের মানের সঠিক অর্থ ব্যাকএন্ড-নির্ভর, তবে নিম্নলিখিত টেবিলটি প্রত্যাশিত প্রভাবকে একটি সাধারণ নির্দেশিকা হিসাবে বর্ণনা করে:

স্তর ব্যবহারের ধরণ
প্রচেষ্টা_O0 ফিট করার জন্য ন্যূনতম প্রচেষ্টা (যত তাড়াতাড়ি সম্ভব সংকলন ব্যর্থ করুন)
প্রচেষ্টা_O1 ফিট করার জন্য কম প্রচেষ্টা
প্রচেষ্টা_O2 ফিট করার জন্য উল্লেখযোগ্য প্রচেষ্টা (উৎপাদন কাজের চাপের জন্য উপযুক্ত ডিফল্ট)
প্রচেষ্টা_O3 মেমোরির ব্যবহার কমাতে ব্যয়বহুল বা পরীক্ষামূলক অ্যালগরিদম