ডিসিএন এবং পিসিআইই প্রোফাইলিং

একটি ডিস্ট্রিবিউটেড পরিবেশে পারফরম্যান্সের সমস্যা সমাধানের সময়, ডেটাসেন্টার নেটওয়ার্ক (DCN) কমিউনিকেশন (বিভিন্ন হোস্ট মেশিনের মধ্যে) এবং PCIe কমিউনিকেশন (একটি হোস্ট সিপিইউ ও তার লোকাল টিপিইউ ডিভাইসের মধ্যে) ঘনিষ্ঠভাবে সংযুক্ত থাকে। যেহেতু DCN থেকে নেটওয়ার্ক ডেটা লোকাল PCIe বাসের মাধ্যমে টিপিইউ-তে স্থানান্তর করতে হয়, তাই নেটওয়ার্কের বাধাগুলো প্রায়শই PCIe কনজেশন বা হোস্ট সিপিইউ বাধা হিসেবে প্রকাশ পায়।

এই প্রতিবন্ধকতাগুলোকে সামগ্রিকভাবে বিশ্লেষণ করার জন্য, আপনার ডিভাইস (PCIe) এবং হোস্ট সিপিইউ (DCN/PCIe ড্রাইভার/ওএস ইভেন্টস) উভয় দৃষ্টিকোণ থেকেই পারফরম্যান্স মেট্রিক্স সংগ্রহ করা উচিত।

১. ডিভাইস-সাইড: FW PCIe ইউটিলাইজেশন কাউন্টার

অ্যাক্সিলারেটর কার্ডের দৃষ্টিকোণ থেকে স্থানীয় হোস্ট-টু-ডিভাইস ট্রান্সফার ট্র্যাক করতে (যা TPU v6e এবং নতুন প্ল্যাটফর্মগুলিতে উপলব্ধ), ডিভাইস-সাইড ফার্মওয়্যার PCIe কাউন্টারগুলি সক্রিয় করুন। এটি পরিমাপ করে যে, TPU-এর ফার্মওয়্যার PCIe বাসের মাধ্যমে কী পরিমাণ ডেটা ট্রান্সফার করার রিপোর্ট করে।

এই মেট্রিকগুলো সংগ্রহ করতে, --tpu_enable_fw_pcie_utilization_event=true ফ্ল্যাগটি ব্যবহার করে প্রোফাইলটি সংগ্রহ করা নিশ্চিত করুন।

FW PCIe ব্যবহার

২. হোস্ট-সাইড: হোস্ট পারফরম্যান্স কাউন্টার

হোস্ট মেশিন কীভাবে নেটওয়ার্ক এবং PCIe ট্র্যাফিক পরিচালনা করছে তা দেখতে, XProf হোস্ট পারফরম্যান্স কাউন্টার সংগ্রহ করতে পারে (যেমন, হোস্ট-সাইড CPU ক্যাশে মিস, মেমরি ব্যান্ডউইথ, এবং স্ট্যান্ডার্ড OS মেট্রিকগুলি perf-stat(1) এ উপলব্ধ)।

অভ্যন্তরীণভাবে, XProf দুটি প্রধান ইন্টারফেস ব্যবহার করে লিনাক্স পারফরম্যান্স মনিটরিং সাবসিস্টেমকে কাজে লাগায়:

(1) libpfm(3) এর মাধ্যমে কাস্টম হোস্ট-সাইড ইভেন্ট

libpfm(3) লাইব্রেরি ব্যবহারকারী-কনফিগার করা ইভেন্ট স্ট্রিংগুলিকে (যেমন, স্ট্যান্ডার্ড হার্ডওয়্যার কাউন্টার বা নির্দিষ্ট নেটওয়ার্ক/PCIe ড্রাইভার ইভেন্ট) সরাসরি হার্ডওয়্যার/কার্নেল পারফরম্যান্স কাউন্টার অ্যাট্রিবিউটে অনুবাদ করে। আপনার যদি কাস্টম হোস্ট-সাইড DCN বা PCIe ইভেন্ট নির্দিষ্ট করার প্রয়োজন হয়, তবে নিশ্চিত করুন যে আপনার ইভেন্ট স্ট্রিংগুলি libpfm সিনট্যাক্স অনুযায়ী বৈধ।

কাস্টম হোস্ট-সাইড ইভেন্ট নির্দিষ্ট করার উদাহরণ:

jax.profiler.start(
    # ... Some other flags...
    advanced_configuration={'tpu_cpu_perf_counter_profile_events': 'branch-misses,cycles,L1-dcache-load-misses,L1-dcache-loads'})

সিপিইউ পারফরম্যান্স কাউন্টার প্রোফাইল ইভেন্ট

(2) perf_event_open(2) এর মাধ্যমে কাঁচা পারফরম্যান্স অ্যাট্রিবিউট কনফিগারেশন

আরও উন্নত/র ইভেন্ট কনফিগারেশনের জন্য (যেমন, কার্নেল-স্তরের মাল্টিপ্লেক্সিং বা মেমরি কন্ট্রোলার):

XProf এই হোস্ট ইভেন্টগুলির নমুনা সংগ্রহ এবং গণনা করার জন্য অন্তর্নিহিত perf_event_open(2) সিস্টেম কলটি ব্যবহার করে।

যেকোনো perf_event_open অ্যাট্রিবিউট কনফিগার করতে:

jax.profiler.start(
    # ... Some other flags...
    advanced_configuration={'tpu_cpu_perf_counter_configs': '<config1>:<type1>:<name1>,<config2>:<type2>:<name2>'})

কোথায়:

  • config এবং type perf_event_open(2) এর অধীনে থাকা perf_event_attr struct-এর প্যারামিটারগুলোর সাথে মেলে।
  • name হলো ট্রেস ভিউয়ারের জন্য ব্যবহারকারী-নির্ধারিত একটি স্ট্রিং ডিসপ্লে নাম।

সিপিইউ পারফরম্যান্স কাউন্টার স্যাম্পলিং ব্যবধান

সিপিইউ পারফরম্যান্স কাউন্টারগুলি সংগ্রহের ব্যবধান (মিলিসেকেন্ডে) নির্ধারণ করতে, ব্যবহার করুন:

jax.profiler.start(
    # ... Some other flags...
    advanced_configuration={'tpu_cpu_perf_counter_interval_ms': <int_value>})

ওভারহেডের সাথে স্যাম্পলিং ফ্রিকোয়েন্সির ভারসাম্য বজায় রাখতে এই মানটি অ্যাডজাস্ট করুন। একটি ছোট ইন্টারভ্যাল স্বল্প ধাপে সূক্ষ্ম আচরণ ক্যাপচার করার জন্য আরও ঘন ঘন স্যাম্পল সংগ্রহ করে, অন্যদিকে একটি বড় ইন্টারভ্যাল দীর্ঘ প্রোফাইলিং রানের সময় ট্রেস ফাইলের আকার বৃদ্ধি এবং সিপিইউ ওভারহেড প্রতিরোধ করে। যদি tpu_cpu_perf_counter_interval_ms নির্দিষ্ট করা না থাকে, তাহলে XProf তার সর্বনিম্ন সমর্থিত স্যাম্পলিং পিরিয়ড ১০ মিলিসেকেন্ডে ফিরে যায়।