কাস্টম কল প্রোফাইলিং, কাস্টম কল প্রোফাইলিং

XLA কাস্টম কল আপনাকে এমন কাস্টম কার্নেল বা অপারেশন সম্পাদন করার সুযোগ দেয় যা XLA দ্বারা স্বাভাবিকভাবে সমর্থিত নয়। ট্রেস ভিউয়ার-এর মধ্যে এই কাস্টম কলগুলির পারফরম্যান্স সম্পর্কে বিস্তারিত জানতে, আপনি নির্দিষ্ট XLA ফ্ল্যাগ ব্যবহার করে বিশদ ট্রেসিং এবং LLO (লো-লেভেল অপটিমাইজার) ডিবাগ তথ্য সক্রিয় করতে পারেন।

ট্রেসিং কীভাবে চালু করবেন

ইন্সট্রুমেন্টেশন সহ আপনার ওয়ার্কলোড পুনরায় কম্পাইল করতে নিম্নলিখিত XLA ফ্ল্যাগটি সেট করুন:

--xla_xprof_enable_custom_call_tracing=true

আপনি যদি LIBTPU_INIT_ARGS এর মাধ্যমে ক্লাউড টিপিইউ-তে চালাচ্ছেন, তাহলে আপনি এটি এইভাবে পাস করতে পারেন:

LIBTPU_INIT_ARGS="--xla_xprof_enable_custom_call_tracing=true --xla_xprof_register_llo_debug_info=true" python your_jax_workload.py

উদাহরণ ট্রেস ভিউয়ার

Xprof ট্রেস ভিউয়ারে LLO ট্রেসগুলো দেখতে কেমন হয় তার একটি উদাহরণ এখানে দেওয়া হলো:

এলএলও ট্রেস অপসএলএলও ট্রেস নির্দেশাবলী


উন্নত প্যারামিটার (ইভেন্ট ড্রপ পরিচালনা)

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

এই প্যারামিটারগুলো xla_tpu_bundle_instrumentation_options এর মাধ্যমে কনফিগার করা হয়। আপনি নিয়ন্ত্রণ করতে পারেন কত ঘন ঘন ট্রেসগুলো ইন্সট্রাকশন বান্ডেলে প্যাক করা হবে।

মূল পরামিতি:

  • trace_best_effort_frequency (ডিফল্ট: ১০): বিদ্যমান বান্ডেলের মধ্যে সুযোগসন্ধানী ট্রেস সন্নিবেশ করার জন্য লক্ষ্যমাত্রা ব্যবধান (বান্ডেলের হিসাবে)। কম্পাইলার এই নির্দিষ্ট সময় অন্তর একটি ট্রেস সন্নিবেশ করার চেষ্টা করবে, কিন্তু এর জন্য নতুন বান্ডেল তৈরি করবে না
  • trace_guaranteed_frequency (ডিফল্ট: ১০): দুটি ট্রেসের মধ্যে অনুমোদিত বান্ডেলের সর্বোচ্চ সংখ্যা। এটি একটি নিশ্চয়তা। যখন আমরা বিদ্যমান বান্ডেলগুলিতে ট্রেসগুলি প্যাক করে এটি পূরণ করতে পারি না, তখন আমরা একটি নতুন বান্ডেল তৈরি করব এবং সেখানে একটি ট্রেস (একাই) রাখব।

কীভাবে টিউন করবেন:

  • যদি আপনি 'ইভেন্ট ড্রপস' দেখতে পান : কম ঘন ঘন ট্রেস করার জন্য মানগুলি বাড়িয়ে দিন (যেমন, ৫০ বা ১০০-তে সেট করুন), যা তৈরি হওয়া ট্রেস ডেটার পরিমাণ কমিয়ে দেবে।
  • যদি আপনার আরও সূক্ষ্ম বিশ্লেষণের প্রয়োজন হয় : আরও ঘন ঘন ট্রেস করার জন্য মানগুলি হ্রাস করুন (এর ফলে অতিরিক্ত ওভারহেড এবং সম্ভাব্য বাফার ওভারফ্লো হওয়ার ঝুঁকি থাকবে)।

নির্দেশনা চক্র গণনা কীভাবে হিসাব করা হয়

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

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

উচ্চ-স্তরের প্রবাহ

  1. LLO নির্দেশনা পার্স করুন : অপকোড এবং মেটাডেটা শনাক্ত করুন।
  2. বেস হার্ডওয়্যার সাইকেল জানুন : টিপিইউ জেনারেশন (v5e/v5p, v6e/v7x, ইত্যাদি) অনুযায়ী সাইকেল নির্ধারণ করুন।
  3. GTC টিক্সে রূপান্তর করুন : নিম্নলিখিত সূত্র ব্যবহার করে সাইকেলকে গ্লোবাল টাইমার কাউন্টার (GTC) টিক্সে রূপান্তর করুন: Cycles * (GTC_Freq * 16) / TC_Freq
  4. টাইমলাইন স্প্যান তৈরি করুন : পরিচিত ট্রেস সীমানাগুলির মধ্যে মধ্যবর্তী ইভেন্টগুলিকে সমানভাবে ইন্টারপোলেট করুন।

ইউনিট এবং প্রজন্ম অনুসারে চক্রের অনুমান

বিভিন্ন এক্সিকিউশন ইউনিটের জন্য বেস হার্ডওয়্যার সাইকেলগুলো কীভাবে মডেল করা হয়, তার উদাহরণ নিচে দেওয়া হলো:

ম্যাট্রিক্স গুণন একক (MXU)

MXU সাইকেল গণনা ডেটা টাইপের ঘনত্বের উপর ভিত্তি করে থ্রুপুট প্রতিফলিত করে।

নির্দেশনার বিভাগ উপ-প্রকার / বিন্যাস (v5e/v5p) (v6e/v7x)
ভেক্টর ম্যাটমুল F32
ম্যাটমুল প্রিপ্রসেসিং (F8 থেকে BF16)
প্যাকড বিএফ১৬
পূর্ণসংখ্যা বিন্যাস (U8, S8, U4, S4)
ভেক্টর ল্যাচ স্থানান্তরিত F32
স্থানান্তরিত BF16
অ-স্থানান্তরিত F32
অ-স্থানান্তরিত BF16
ম্যাটপ্রেপ / ডিডব্লিউজি সব
ট্রান্সপোজ ইউনিট (XLU)

সাইকেল কাউন্ট ট্রান্সপোজ মেমরি লেআউট এবং ক্রসবার ডিলে নির্দেশ করে।

নির্দেশনার বিভাগ উপ-প্রকার / বিন্যাস (v5e/v5p) (v6e/v7x)
প্যাকড ট্রান্সপোজ সব ১৭
স্ট্যান্ডার্ড ট্রান্সপোজ বি৩২ ট্রান্সপোজ
B16 ট্রান্সপোজ (সেগমেন্টেড/কম্প্রেসড) ১৭
এক্সিকিউশন ইউনিট পুল (EUP)

EUP নির্দেশাবলী ভেক্টর গাণিতিক ফাংশন (যেমন, tanh , log , exp ) উপস্থাপন করে।

নির্দেশনার বিভাগ (v5e/v5p) (v6e/v7x)
ভেক্টর গণিত ( tanh , exp , ইত্যাদি)

(পুরাতন) কাস্টম কল দৃশ্যমানতা সক্রিয় করা

কাস্টম কল প্রোফাইলিং সক্রিয় করতে, আপনার ওয়ার্কলোড চালানোর সময় নিম্নলিখিত XLA ফ্ল্যাগগুলি সেট করতে হবে:

  • --xla_enable_custom_call_region_trace=true : এই ফ্ল্যাগটি কাস্টম কল থাকা অঞ্চলগুলির জন্য ট্রেসিং সক্ষম করে।
  • --xla_xprof_register_llo_debug_info=true : এই ফ্ল্যাগটি LLO ডিবাগ তথ্য রেজিস্টার করে, যা XProf-কে কাস্টম কলের জন্য বিস্তারিত ইউটিলাইজেশন পরিসংখ্যান প্রদর্শন করতে সক্ষম করে।

উদাহরণ :

LIBTPU_INIT_ARGS="--xla_enable_custom_call_region_trace=true --xla_xprof_register_llo_debug_info=true" python your_jax_workload.py

এই ফ্ল্যাগগুলি সক্রিয় করা হলে, কাস্টম কলটি সম্পাদনকারী প্রতিটি TPU কোর বা ডিভাইসের জন্য ট্রেস ভিউয়ারে একটি নতুন LLO ইউটিলাইজেশন লাইন প্রদর্শিত হবে।

এলএলও ইউটিলাইজেশন লাইন

এলএলও ইউটিলাইজেশন লাইনটি একটি কাস্টম কল নির্বাহের সময় হার্ডওয়্যার রিসোর্স কীভাবে ব্যবহৃত হয় তার একটি ভিজ্যুয়ালাইজেশন প্রদান করে। কাস্টম কার্নেলের (যেমন, প্যালাস বা মোজাইকে লেখা) মধ্যেকার বটলনেক শনাক্ত করার জন্য এটি বিশেষভাবে উপযোগী।

এলএলও ব্যবহার

সর্বোত্তম অনুশীলন

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