মেগাস্কেল ভিউয়ার টুলটি মেগাস্কেলএক্সএলএ (MegascaleXLA) ব্যবহারকারী মাল্টি-স্লাইস ওয়ার্কলোডের জটিল পারফরম্যান্স সমস্যাগুলো বুঝতে ও সমাধান করতে সাহায্য করে। এটি নেটওয়ার্ক ইউটিলাইজেশন, নেটওয়ার্ক ল্যাটেন্সি এবং টিপিইউ স্টল টাইমের মতো প্রাসঙ্গিক মেট্রিকগুলো দেখার সুযোগ করে দেয়। এছাড়াও, এটি টিপিইউ এবং হোস্টে ঘটা ইভেন্টগুলোর মধ্যকার নির্ভরশীলতা দেখানোর মাধ্যমে ব্যবহারকারীকে মেগাস্কেল কালেক্টিভের প্রতিটি ইনস্ট্যান্সের পারফরম্যান্স সম্পর্কে আরও গভীর ধারণা পেতে সাহায্য করে।
টুলটি অ্যাক্সেস করা
টুলটি ব্যবহার করতে, xprof-এ একটি প্রোফাইল খুলুন, তারপর বাম পাশের সাইডবারে থাকা 'Tools' ড্রপ-ডাউন তালিকা থেকে 'Megascale Viewer' আইটেমটিতে যান। 'Hosts' ড্রপ-ডাউন তালিকা থেকে একটি হোস্ট নির্বাচন করুন, তারপর 'Open in Perfetto' বোতামটিতে ক্লিক করুন।

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

টিপিইউ-এর যেকোনো একটি সেকশন এক্সপ্যান্ড করলে সেই টিপিইউ-তে সংঘটিত বিভিন্ন শ্রেণীর ইভেন্ট প্রদর্শনকারী কয়েকটি লাইন দেখা যায়। লাইনগুলো হলো:
- ধাপসমূহ : প্রশিক্ষণের ধাপসমূহ দেখায় (xprof দ্বারা ট্র্যাক করা অনুযায়ী)
- XLA মডিউল : প্রোফাইল করা সময়কালে চালিত সমস্ত XLA প্রোগ্রামের সকল এক্সিকিউশন/রান দেখায়।
- XLA Ops : TPU-তে চালিত সমস্ত XLA অপস (এবং কাস্টম কার্নেল) দেখায়।
- XLA TraceMe : সিঙ্ক্রোনাইজেশন ইভেন্টগুলো দেখায়। (যেমন ব্যারিয়ার-কোর)
- মেগাস্কেল : এটি একটি প্যারেন্ট ট্র্যাক, যার মধ্যে প্রতিটি স্বতন্ত্র মেগাস্কেল কালেক্টিভের জন্য একটি করে চাইল্ড ট্র্যাক রয়েছে।

মেগাস্কেল প্যারেন্ট ট্র্যাকটি এক্সপ্যান্ড করলে অনেকগুলো চাইল্ড ট্র্যাক দেখা যায়; প্রতিটি মেগাস্কেল কালেক্টিভের জন্য একটি করে। প্রতিটি ট্র্যাকের নাম হলো মেগাস্কেল কালেক্টিভটির নাম। ব্র্যাকেটের ভেতরের সংখ্যাটি হলো লোকাল TPU-এর মেগাস্কেল device_id, যা স্লাইস আইডি এবং লজিক্যাল TPU আইডির একটি সমন্বয়। এই ট্র্যাকে যে ইভেন্টগুলো দেখা যায়, সেগুলো এই মেগাস্কেল কালেক্টিভটির অ্যাকশন গ্রাফকে উপস্থাপন করে। এই ইভেন্টগুলো নেটওয়ার্ক এবং হোস্ট প্রসেসিং-এর জন্য বরাদ্দকৃত সময় এবং কীভাবে তা recv-done বা send-done স্টল টাইমে অবদান রাখে, তা বুঝতে সাহায্য করে।

টিপিইউ অপস-কে মেগাস্কেল অ্যাকশন গ্রাফের সাথে সংযুক্ত করা
যখন কোনো ধীরগতির মেগাস্কেল TPU অপারেশন (যেমন recv-done) দেখা হয়, তখন একটি সাধারণ পরবর্তী পদক্ষেপ হলো এর সংশ্লিষ্ট মেগাস্কেল অ্যাকশন গ্রাফ এক্সিকিউশনে যাওয়া। এটি করার জন্য, প্রথমে কাঙ্ক্ষিত recv-done-টিতে ক্লিক করুন, তারপর Perfetto UI-এর নিচের প্যানেলে থাকা এর সংশ্লিষ্ট “recv-done END” ইভেন্টটিতে ক্লিক করুন।

“END” ইভেন্টে ক্লিক করার পর, আপনি UI-তে একটি ফ্লো অ্যারো দেখতে পাবেন যা মেগাস্কেল গ্রাফ এক্সিকিউশনটি নির্দেশ করে এবং এটি নির্বাচিত recv-done-টিকে আনব্লক করে।

এছাড়াও আপনি অ্যাকশন গ্রাফ লাইনের শুরুতে থাকা “DeviceToHost START” ইনস্ট্যান্ট ইভেন্টে ক্লিক করে TPU-তে সংশ্লিষ্ট “send” op-টি দেখতে পারেন।

মেগাস্কেল ট্র্যাকের ইভেন্টগুলো এমনভাবে সংকুচিত করা থাকে যাতে যেকোনো নির্দিষ্ট সময়ে কেবল একটিই প্রদর্শিত হয়। সমস্ত সক্রিয় অ্যাকশন একসাথে দেখানো এড়াতে এবং বিশৃঙ্খলা কমাতে এটি করা হয়। যেকোনো সময়ে, বেশ কয়েকটি অ্যাকশন চলমান থাকে। এই সংকুচিত লাইনে যে অ্যাকশনটি প্রদর্শিত হয়, সেটিই প্রথমে শেষ হয়। অতিরিক্ত তথ্য (যেমন কোনো ইভেন্টের প্রকৃত শুরুর সময়, নেটওয়ার্ক ল্যাটেন্সি, পিয়ার ডিভাইস আইডি) পেতে, পারফেটটো UI-এর নিচের প্যানেলে ইভেন্টের আর্গুমেন্টগুলো দেখুন।

উপরের ছবিতে দেখানো উদাহরণে, আমরা দেখতে পাচ্ছি যে “NetworkSend END” ইভেন্টটি UI-তে একটি ১৩.৫ মিলিসেকেন্ডের অংশ হিসেবে প্রদর্শিত হচ্ছে। এই অ্যাকশনটির আসল সময়কাল “action_duration_ns” ইভেন্ট আর্গুমেন্টে রয়েছে, যা হলো ২০.৬ মিলিসেকেন্ড।
পরিসংখ্যান দেখা এবং আকর্ষণীয় ঘটনা খুঁজে বের করা
পারফেটটো UI পারফেটটোএসকিউএল (PerfettoSQL) ব্যবহার করে ইভেন্ট কোয়েরি করার সুযোগ দেয়। এর মাধ্যমে ব্যবহারকারীরা দরকারি পরিসংখ্যান তৈরি করতে পারেন এবং আকর্ষণীয় ইভেন্ট (যেমন আউটলায়ার) খুঁজে পেতে পারেন।
Perfetto UI-এর বাম প্যানেলে থাকা 'Query (SQL)' পৃষ্ঠায় PerfettoSQL কোয়েরি প্রবেশ করানো যায়। নিচের উদাহরণ কোয়েরিটি recv-done.28 op-এর সমস্ত দৃষ্টান্ত দেখায়। এরপর UI ব্যবহার করে সেগুলোকে সময়কালের অবরোহী ক্রমে তালিকাভুক্ত করা হয়।

ব্যবহারকারী টাইমলাইনের নিচে কোয়েরির ফলাফল দেখতে 'টাইমলাইন' ট্যাবে যেতে পারেন। যদি কোয়েরির ফলাফলে স্লাইস আইডি থাকে, তবে আইডিতে ক্লিক করলে টাইমলাইনের সেই স্লাইসে চলে যাবে।
নমুনা কোয়েরি
এখানে কিছু দরকারি নমুনা কোয়েরি পাওয়া যাবে।
ব্যবহারকারীর যাত্রার উদাহরণ
ধরা যাক, আমরা খুঁজে বের করতে চাই কোন recv-done-টি সামগ্রিক স্টেপ টাইমে সবচেয়ে বেশি অবদান রাখছে। আমরা `recv-done stats` কোয়েরি ব্যবহার করে এবং আউটপুটকে `duration_ns_sum` অনুযায়ী সাজিয়ে এটি করতে পারি।

এই উদাহরণে, আমরা দেখতে পাচ্ছি যে recv-done.28-এর অবদান সবচেয়ে বেশি (~১৪ সেকেন্ডের মোট প্রোফাইল সময়কালের মধ্যে প্রায় ২.২ সেকেন্ড)। আমরা আরও দেখতে পাচ্ছি যে এই op-টির tail/p99 সময়কাল মিডিয়ান এবং গড়ের চেয়ে উল্লেখযোগ্যভাবে বেশি। এর থেকে বোঝা যায় যে উন্নতির সুযোগ থাকতে পারে।
(ঐচ্ছিক) প্রাপ্তি-সমাপ্তির বিলম্ব প্লট করুন
কখনও কখনও সময়ের সাথে সাথে স্থিতিকাল বা ডিউরেশনের একটি লাইন গ্রাফ দেখাও সহায়ক হয়। আমরা “recv-done ops” কোয়েরিটি ব্যবহার করে এবং তারপরে পারফেটোর “Add debug track” ফিচারটি ব্যবহার করে “counter” টাইপের ট্র্যাক যুক্ত করার মাধ্যমে এটি করতে পারি।

আউটপুটটি নিচে দেওয়া হলো। আমরা দেখতে পাচ্ছি যে, recv-done.28-এর সময়কাল নির্দিষ্ট কিছু সময়ে (সাধারণত একটি ট্রেনিং স্টেপের শুরুতে বা শেষে) সত্যিই অনেক বেশি। আমরা আরও দেখতে পাচ্ছি যে, অন্যান্য অনেক recv-done অপরচুনিটির ক্ষেত্রেও উচ্চ ভ্যারিয়েন্স রয়েছে।

`recv-done`-এর ধীরগতির দৃষ্টান্তগুলি খুঁজুন
“recv-done ops” কোয়েরিটিকে পরিবর্তন করে শুধুমাত্র recv-done.28-এর উপর দৃষ্টি নিবদ্ধ করার মাধ্যমে এই op-টির একটি ধীরগতির ইনস্ট্যান্স খুঁজে বের করা যাক।

এখানে, আমরা যেকোনো কলাম অনুযায়ী আউটপুটটি সাজিয়ে নিতে পারি এবং তারপর টাইমলাইন ভিউতে এই ইভেন্টটিতে সরাসরি যেতে “id” কলামের লিঙ্কে ক্লিক করতে পারি। এই ক্ষেত্রে, সবচেয়ে ধীরগতির ইভেন্টটি টিপিইউ ১-এ ঘটেছে।

এই পর্যায়ে, আপনি মাউস বা কিবোর্ডের WASD কী ব্যবহার করে ইভেন্টটিতে ম্যানুয়ালি জুম ইন করতে পারেন, অথবা কিবোর্ডের “F” কী চেপে সেই অপ-টিতে সরাসরি চলে গিয়ে সেটিকে পুরোপুরি জুম ইন করতে পারেন।
এখান থেকে, আপনি নেটওয়ার্ক লাইনগুলো পরীক্ষা করতে পারেন (হয়তো এই অপারেশনটি চলার সময় নেটওয়ার্ক ব্যবহার সর্বোচ্চ সীমায় পৌঁছে গিয়েছিল?)। এছাড়াও, আগের অংশে দেখানো অনুযায়ী 'recv-done END' তীরচিহ্নটিতে ক্লিক করে আপনি এই অপারেশনটির মেগাস্কেল গ্রাফে যেতে পারেন।
টিপস: পারফেটটো UI-তে একাধিক লাইনকে উপরে পিন করার সুবিধা রয়েছে। আপনার পছন্দের লাইনগুলো যদি একে অপরের থেকে দূরে থাকে, তবে সেগুলোকে পিন করুন যাতে সবগুলো স্ক্রিনের উপরে কাছাকাছি থাকে। ট্র্যাকের নামের উপর মাউস রাখলে পিন আইকনটি দেখা যায়।
লেটেন্সি বুঝতে মেগাস্কেল অ্যাকশন গ্রাফ ব্যবহার করুন
recv-done সম্পন্ন হতে কেন এত সময় লাগলো, তা আরও ভালোভাবে বোঝার জন্য আপনি মেগাস্কেল গ্রাফের ইভেন্টগুলো দেখতে পারেন। এক্ষেত্রে, একটি সম্ভাব্য সমস্যা হলো, কিছু ইনকামিং ট্রান্সফারের জন্য নেটওয়ার্ক ল্যাটেন্সি বেশি ছিল। উদাহরণস্বরূপ, শেষ NetworkReceive-টি ৩.৫ MiB ডেটা ট্রান্সফার করতে ২৭ মিলিসেকেন্ড সময় নিয়েছে, যা অনেক বেশি।
লক্ষ্য করুন যে "NetworkReceive END" স্লাইসটির সময়কাল হলো ১১ms ৩৬us। এই সময়কালটি মূলত অর্থহীন এবং এটি মেগাস্কেল অ্যাকশনগুলোকে এক লাইনে প্রদর্শন করার পদ্ধতির একটি কৃত্রিম ফলাফল। অ্যাকশনটির আসল সময়কাল (action_duration_ns) হলো ৪৭.২ মিলিসেকেন্ড। এর মধ্যে ২৭ মিলিসেকেন্ড হলো নেটওয়ার্ক ল্যাটেন্সি।
