স্থায়ী অটোটিউনিং (শুধুমাত্র GPU)

আমরা কিছু GPU কার্নেল তৈরি করার জন্য OpenAI Triton ব্যবহার করি। Triton কিছু ফিউশনের জন্য দ্রুত GPU কার্নেল তৈরি করার অনুমতি দেয়, কিন্তু আমাদের এই ধরনের প্রতিটি ফিউশনের জন্য কিছু প্যারামিটার টিউন করতে হবে।

যদি অনেকগুলি ফিউশন থাকে তবে এটি একটি দীর্ঘ সময় নিতে পারে, তাই আমরা সেই অটোটিউনিং ফলাফলগুলি লোড করার একটি উপায় প্রদান করি, যখন এখনও অন্যান্য সংকলন পদক্ষেপগুলি স্বাভাবিকভাবে চালানো হয়। অটোটিউনিং ক্যাশেগুলি এখনও কার্যকর যদি আমরা কিছু পরিবর্তন করি: ক্যাশে উপস্থিত ফিউশনগুলি ক্যাশে ব্যবহার করবে, এবং অন্যান্যগুলি স্বাভাবিকভাবে অটোটিউন করা হবে।

এই পরামিতিগুলি ব্যবহার করে অটোটিউনিং ফলাফল ডাম্প/লোড করা যেতে পারে:

--xla_gpu_dump_autotune_results_to=
--xla_gpu_load_autotune_results_from=

যদি আমরা একটি .txt বা .textproto ফাইল নির্দিষ্ট করি, তাহলে ক্যাশে টেক্সটপ্রোটো ফরম্যাটে ডাম্প করা হবে, অন্যথায় বাইনারি প্রোটোবাফ ফরম্যাটে।

পরীক্ষায়

স্থির অটোটিউনিং পরীক্ষাগুলিতেও ব্যবহার করা যেতে পারে। পরীক্ষাগুলি খুব বড় হলে এটি ব্যবহার করার পরামর্শ দেওয়া হয়, বিশেষ করে যদি পরীক্ষার পরিবেশের কর্মক্ষমতা সীমিত হয়।

এটি শুধুমাত্র তখনই ভাল কাজ করে যদি অটোটিউন ক্যাশে একই ধরনের GPU-তে জেনারেট করা ফলাফল থাকে যেখানে পরীক্ষা চালানো হচ্ছে।

একটি পরীক্ষা ব্যবহার অব্যাহত অটোটিউনিং করা

আপাতত অনুমান করা যাক যে প্রশ্নে পরীক্ষাটি সর্বদা একই GPU প্রকার ব্যবহার করে।

  1. আমাদের পরীক্ষা থেকে অটোটিউন ফলাফল রপ্তানি করতে হবে, উদাহরণস্বরূপ পরীক্ষা কমান্ডে এই পরামিতিগুলি নির্দিষ্ট করে:

    --test_env=XLA_FLAGS=--xla_gpu_dump_autotune_results_to=TEST_UNDECLARED_OUTPUTS_DIR/autotune_cache.textproto
    --test_sharding_strategy=disabled
    

    সমস্ত পরীক্ষার জন্য সঠিকভাবে একটি একক অটোটিউন ক্যাশে পেতে Sharding অক্ষম করা আবশ্যক৷

  2. তারপর আমাদের কোড রিপোজিটরিতে সেই ক্যাশে আপলোড করতে হবে।

  3. তারপরে আমাদের পরীক্ষার টার্গেটের ডেটা নির্ভরতায় ক্যাশে যুক্ত করতে হবে এবং এটি একটি পরিবেশ পরিবর্তনশীল ব্যবহার করে লোড করতে হবে।

    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 ব্যবহার করা শুরু করি, তবে একই প্রযোজ্য।

এক্সএলএ কম্পাইলার বিবর্তিত হলে এবং বিভিন্ন ফিউশন তৈরি করলে ক্যাশেও অপ্রচলিত হয়ে যেতে পারে।