আমরা কিছু GPU কার্নেল তৈরি করার জন্য OpenAI Triton ব্যবহার করি। Triton কিছু ফিউশনের জন্য দ্রুত GPU কার্নেল তৈরি করার অনুমতি দেয়, কিন্তু আমাদের এই ধরনের প্রতিটি ফিউশনের জন্য কিছু প্যারামিটার টিউন করতে হবে।
যদি অনেকগুলি ফিউশন থাকে তবে এটি একটি দীর্ঘ সময় নিতে পারে, তাই আমরা সেই অটোটিউনিং ফলাফলগুলি লোড করার একটি উপায় প্রদান করি, যখন এখনও অন্যান্য সংকলন পদক্ষেপগুলি স্বাভাবিকভাবে চালানো হয়। অটোটিউনিং ক্যাশেগুলি এখনও কার্যকর যদি আমরা কিছু পরিবর্তন করি: ক্যাশে উপস্থিত ফিউশনগুলি ক্যাশে ব্যবহার করবে, এবং অন্যান্যগুলি স্বাভাবিকভাবে স্বয়ংক্রিয়ভাবে টিউন করা হবে৷
প্রস্তাবিত: ক্যাশে ডিরেক্টরি
--xla_gpu_per_fusion_autotune_cache_dir=your/directory
প্রদত্ত ডিরেক্টরিতে একটি পার-ফিউশন অটোটিউন ক্যাশে ব্যবহার করুন এবং বজায় রাখুন। প্রতি স্বতন্ত্র ফিউশনে একটি ফাইল থাকবে।
এই পদ্ধতির প্রধান সুবিধা হল আপনি একাধিক XLA রানের জন্য একই ক্যাশে ডিরেক্টরি ব্যবহার করতে পারেন (বিভিন্ন মডেলের) এবং আপনার ক্যাশে প্রতিটি নতুন ফিউশনের সম্মুখীন হওয়ার সাথে সাথে বৃদ্ধি পাবে - পরবর্তী রানের গতি বাড়ানো। একই ক্যাশে ডিরেক্টরির সাথে একাধিক XLA দৃষ্টান্ত চালানোর জন্য মৌলিক সমর্থনও রয়েছে।
XLA বিদ্যমান ফলাফলগুলি যখন প্রয়োজন হবে তখন পড়বে এবং সেগুলি নির্ধারণ করার পরে নতুন ফলাফল লিখবে।
- XLA চালানোর আগে ডিরেক্টরিটি অবশ্যই বিদ্যমান থাকতে হবে এবং এটি লেখার যোগ্য হতে হবে।
- ক্যাশে অবৈধতা ব্যবহারকারী দ্বারা পরিচালনা করতে হবে:
- আপনি যদি একটি খালি ক্যাশে দিয়ে শুরু করতে চান তাহলে অনুগ্রহ করে একটি খালি ডিরেক্টরি ব্যবহার করুন৷
- XLA সংস্করণ চেক অবশ্যই ব্যবহারকারীর দ্বারা করা উচিত:
- আপনি যদি XLA এর বিভিন্ন সংস্করণের জন্য পৃথক ক্যাশে ব্যবহার করতে চান তবে অনুগ্রহ করে বিভিন্ন ডিরেক্টরি ব্যবহার করুন।
ক্যাশে ডিফল্টরূপে বন্ধ থাকে (যখন আপনি প্যারামিটার প্রদান করেন না)।
সীমাবদ্ধতা: নীচে বর্ণিত অন্যান্য ক্যাশিং পদ্ধতির সাথে একত্রে এটি ভালভাবে কাজ করার নিশ্চয়তা দেয় না।
বিকল্প: প্রদত্ত HLO থেকে একটি ফাইলে সমস্ত ফলাফল লোড করা বা ডাম্প করা
এই পরামিতিগুলি ব্যবহার করে অটোটিউনিং ফলাফল ডাম্প/লোড করা যেতে পারে:
--xla_gpu_dump_autotune_results_to=
--xla_gpu_load_autotune_results_from=
যদি আমরা একটি .txt বা .textproto ফাইল নির্দিষ্ট করি, তাহলে ক্যাশে টেক্সটপ্রোটো ফরম্যাটে ডাম্প করা হবে, অন্যথায় বাইনারি প্রোটোবাফ ফরম্যাটে।
পরীক্ষায়
স্থির অটোটিউনিং পরীক্ষাগুলিতেও ব্যবহার করা যেতে পারে। পরীক্ষাগুলি খুব বড় হলে এটি ব্যবহার করার পরামর্শ দেওয়া হয়, বিশেষ করে যদি পরীক্ষার পরিবেশের কর্মক্ষমতা সীমিত হয়।
এটি শুধুমাত্র তখনই ভাল কাজ করে যদি অটোটিউন ক্যাশে একই ধরনের GPU-তে জেনারেট করা ফলাফল থাকে যেখানে পরীক্ষা চালানো হচ্ছে।
একটি পরীক্ষা ব্যবহার অব্যাহত অটোটিউনিং করা
আপাতত অনুমান করা যাক যে প্রশ্নে পরীক্ষাটি সর্বদা একই GPU প্রকার ব্যবহার করে।
আমাদের পরীক্ষা থেকে অটোটিউন ফলাফল রপ্তানি করতে হবে, উদাহরণস্বরূপ পরীক্ষা কমান্ডে এই পরামিতিগুলি নির্দিষ্ট করে:
--test_env=XLA_FLAGS=--xla_gpu_dump_autotune_results_to=TEST_UNDECLARED_OUTPUTS_DIR/autotune_cache.textproto --test_sharding_strategy=disabled
সমস্ত পরীক্ষার জন্য সঠিকভাবে একটি একক অটোটিউন ক্যাশে পেতে Sharding অক্ষম করা আবশ্যক৷
তারপর আমাদের কোড রিপোজিটরিতে সেই ক্যাশে আপলোড করতে হবে।
তারপরে আমাদের পরীক্ষার টার্গেটের ডেটা নির্ভরতায় ক্যাশে যুক্ত করতে হবে এবং এটি একটি পরিবেশ পরিবর্তনশীল ব্যবহার করে লোড করতে হবে।
data = ["test_autotune_cache.textproto"], env = {"XLA_FLAGS": "--xla_gpu_load_autotune_results_from=" + "$(execpath test_autotune_cache.textproto)"},
(অটোটিউন ফলাফল লোড করে এমন পরীক্ষায় শার্ডিং ব্যবহার করা ঠিক আছে।)
অনুগ্রহ করে xla/service/gpu/tests/BUILD- এ উদাহরণ পরীক্ষাগুলিও দেখুন:
- load_autotune_results_using_execpath_test
- load_autotune_results_from_test_workspace_test
- ডাম্প_অটোটিউন_ফলাফল_থেকে_পরীক্ষা_আউটপুট_পরীক্ষা
ক্যাশে অপ্রচলিততা
যদি একটি মডেলে অনেক পরিবর্তন করা হয়, তবে এটি সম্ভব যে ক্যাশে আর সমস্ত ফিউশন থাকবে না, তাই পরীক্ষাটি ধীর হয়ে যাবে। এই ক্ষেত্রে আমাদের অটোটিউনিং ক্যাশে পুনরায় তৈরি করতে হবে।
যদি আমরা পরীক্ষা চালানোর জন্য একটি নতুন ধরনের GPU ব্যবহার করা শুরু করি, তবে একই প্রযোজ্য।
এক্সএলএ কম্পাইলার বিবর্তিত হলে এবং বিভিন্ন ফিউশন তৈরি করলে ক্যাশেও অপ্রচলিত হয়ে যেতে পারে।