মেমরি ভিউয়ার টুল

প্রোগ্রামের জীবনকাল জুড়ে মেমরি ব্যবহারের চিত্র দেখতে আপনি মেমরি ভিউয়ার ব্যবহার করতে পারেন। সর্বোচ্চ মেমরি ব্যবহারের মুহূর্তে আপনি মেমরির বিষয়বস্তুর বিস্তারিত জানতে পারবেন, যার মধ্যে আউট অফ মেমরি (OOM) পরিস্থিতি ডিবাগ করাও অন্তর্ভুক্ত। মেমরি ভিউয়ার আপনাকে সার্বিক মেমরি ব্যবহার এবং গণনাটি মেমরি শেষ হয়ে যাওয়ার কতটা কাছাকাছি আছে তা দেখতে সাহায্য করতে পারে।

মেমরি ভিউয়ারে প্রদর্শিত সমস্ত তথ্য সম্পূর্ণরূপে স্ট্যাটিক, যা XLA কম্পাইলার থেকে প্রাপ্ত; ডাইনামিক রানটাইম তথ্য মেমরি প্রোফাইল টুলে উপস্থাপন করা হয়।

মেমরি ভিউয়ার লাইন চার্ট

সমর্থিত প্ল্যাটফর্ম

টিপিইউ এবং জিপিইউ উভয়ই সমর্থিত।

মেমরি ভিউয়ারের উপাদানসমূহ

মেমোরি ভিউয়ার টুলটি কয়েকটি মূল উপাদান নিয়ে গঠিত:

  1. ব্যবহারকারী-নিয়ন্ত্রিত ড্রপডাউন, যা আপনাকে আপনার প্রদর্শিত ডেটা কাস্টমাইজ করার সুযোগ দেয়:

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

      মেমরি ভিউয়ার মেমরি টাইপস ড্রপডাউন

    • HLO মডিউল: এগুলো হলো সেই XLA প্রোগ্রামগুলো যা আপনার এক্সিকিউশনের অংশ ছিল। প্রায়শই একটি টপ-লেভেল মডিউল এর জন্য একটি ভালো সূচনা হতে পারে, যার লেবেল থাকে jit_train_step বা jit_generate মতো কিছু। এই ড্রপডাউনটি বাম প্যানেলে দেখা যায়।

      মেমরি ভিউয়ার মডিউল ড্রপডাউন

  2. পাঠ্যভিত্তিক সংক্ষিপ্তসার অংশটি উচ্চ-স্তরের তথ্য প্রদান করে, যেমন প্রোগ্রামের জন্য প্রয়োজনীয় সর্বোচ্চ মেমরি বরাদ্দ, আর্গুমেন্ট বনাম অস্থায়ী ভেরিয়েবলের বিভাজন ইত্যাদি। অ্যাক্সিলারেটরে টেনসরের সমর্থিত আকারের উপর বিধিনিষেধের কারণে প্যাডিংয়ের জন্য একটি অতিরিক্ত ওভারহেড তৈরি হয়। যদি এই প্যাডিং মোট বরাদ্দের একটি বড় অংশ হয়, তবে তা অপটিমাইজেশনের একটি সুযোগ নির্দেশ করতে পারে।

    মেমরি ভিউয়ার মেমরি টেক্সট ওভারভিউ

  3. মেমরি অ্যালোকেশন সাইজ বনাম প্রোগ্রাম অর্ডার লাইন চার্টটি কম্পাইলার দ্বারা নির্ধারিত প্রোগ্রাম পয়েন্টের (HLO সিকোয়েন্স) সাপেক্ষে মেমরি ব্যবহারের চিত্র তুলে ধরে।

    • লক্ষ্য করুন যে, x-অক্ষটি সময় নয়
    • চার্টটি বিশেষভাবে প্রোগ্রামের সেই অংশটিকে হাইলাইট করে যেখানে নির্বাচিত মডিউলটির মেমরি ব্যবহার সর্বোচ্চ হয়। প্রোফাইলার এবং টুলগুলো একটি নির্দিষ্ট চিপ/মেমরিতে মডিউলগুলোর সহাবস্থান সম্পর্কে অবগত থাকে না। যখন প্রতিটি মডিউল কম্পাইল করা হয়, কম্পাইলার প্রোফাইলটিকে মোট বরাদ্দকৃত মেমরির (এর আগে কম্পাইল করা মডিউলগুলো দ্বারা) "বেসলাইন" প্রারম্ভিক বিন্দু দিয়ে চিহ্নিত করে এবং পরবর্তী বরাদ্দ ও অবরাদ্দ হওয়ার সাথে সাথে সেখান থেকে গণনা বাড়াতে ও কমাতে থাকে। তবে, এক্সিকিউশনের আগে কম্পাইল করা অন্য মডিউলগুলোর দ্বারা করা ভবিষ্যতের কোনো বরাদ্দ রেকর্ড করা হয় না; OOM পরিস্থিতি ডিবাগ করার সময় এই বিষয়টি মনে রাখবেন।
  4. পৃষ্ঠার নীচে থাকা বাফার চার্টগুলো প্রোগ্রামের সর্বোচ্চ ব্যবহারের মুহূর্তে (যা মেমরি ব্যবহারের লাইন চার্টে উল্লম্ব রেখা দ্বারা নির্দেশিত) মেমরি ব্যবহারের বিস্তারিত বিবরণ দেয়। এখানে তিনটি চার্ট রয়েছে, যেগুলোর সবগুলোই প্রোগ্রাম দ্বারা বরাদ্দকৃত সমস্ত বাফার দেখায়, কিন্তু তিনটি ভিন্ন উপায়ে সাজানো:

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

      উল্লেখ্য যে, বাফারগুলোর রঙের কোনো বিশেষ অর্থ নেই।

  5. চার্টের শিরোনামের পাশে থাকা "টাইমলাইন" লিঙ্কে ক্লিক করলে মেমরি অ্যালোকেশনগুলোর একটি ভিজ্যুয়ালাইজেশন প্রদর্শিত হয়, যেখানে প্রতিটি অ্যালোকেশনের জন্য একটি করে রঙিন বক্সের একটি সিরিজ থাকে। ব্লকটির উপর মাউস রাখলে অ্যালোকেশনটি সম্পর্কে অতিরিক্ত তথ্য পাওয়া যায়; যেমন, যে HLO অপটি অ্যালোকেশনটি তৈরি করেছে, অ্যালোকেশনটির আকৃতি, ইত্যাদি। ভিজ্যুয়ালাইজেশনটি নিম্নোক্তভাবে ব্যাখ্যা করা যেতে পারে:

    • এক্স-অক্ষ হলো প্রোগ্রামের ক্রম।
    • y-অক্ষের প্রতিটি ব্লকের উচ্চতাই হলো বরাদ্দের পরিমাণ।
    • প্রোগ্রাম অর্ডারের সাপেক্ষে, প্রতিটি ব্লকের প্রস্থ হলো অ্যালোকেশনের জীবনকাল।

    মেমরি ভিউয়ার টাইমলাইন

    টাইমলাইনটি SVG, DOT বা HTML+SVG ফাইল হিসেবেও সংরক্ষণ করা যায়।

  6. তিনটি চার্টের যেকোনো একটির বাফারের উপর মাউস রাখলে দুটি অতিরিক্ত ডিসপ্লে প্রদর্শিত হয়:

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

      • নাম: XLA অপারেশনের নাম, যা আপনি গ্রাফ ভিউয়ার বা ট্রেস ভিউয়ারে অনুসন্ধান করতে পারেন।
      • আকার: প্যাডিং সহ এবং প্যাডিং ছাড়া বাফার বরাদ্দের আকার।
      • আকৃতি: N-মাত্রিক অ্যারের র‍্যাঙ্ক, আকার এবং ডেটা টাইপ বর্ণনা করে।
      • ফ্রেমওয়ার্ক অপারেশনের নাম: এই অ্যালোকেশনের সাথে সংশ্লিষ্ট ফ্রেমওয়ার্ক অপারেশনের নাম দেখায়।
      • অ্যালোকেশন টাইপ: বাফার অ্যালোকেশনগুলোকে নিম্নলিখিত প্রকারগুলিতে শ্রেণীবদ্ধ করে: প্যারামিটার, আউটপুট, থ্রেড-লোকাল এবং টেম্পোরারি (যেমন, একটি ফিউশনের অভ্যন্তরে বাফার অ্যালোকেশন)।
      • উৎস: যে অপারেশনটি বাফারটি তৈরি করেছে, তার সোর্স কোডের অবস্থান (ফাইল এবং লাইন নম্বর) দেখায়।
      • সোর্স স্ট্যাক: অপারেশনটির সম্পূর্ণ কল স্ট্যাক প্রদর্শন করে এবং যে এক্সিকিউশন কনটেক্সটের কারণে বাফার অ্যালোকেশনটি করা হয়েছিল, তা প্রদান করে।

      মেমরি ভিউয়ার বাফার চার্ট

মেমরি ভিউয়ার বাফার চার্টগুলি কীভাবে ব্যাখ্যা করবেন

মেমরি ভিউয়ার পেজের নিচের বাফার চার্টগুলো সর্বোচ্চ মেমরি ব্যবহারের মুহূর্তে এর গঠন বুঝতে এবং সম্ভাব্য অপটিমাইজেশনের সুযোগ শনাক্ত করতে সহায়ক। এই চার্টগুলো ব্যাখ্যা করার জন্য এখানে কিছু পরামর্শ দেওয়া হলো:

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

নিচের ছবিতে, প্যাডিং সাইজ অনুসারে সাজানো চার্টটি থেকে দেখা যাচ্ছে যে প্যাডিংয়ের প্রয়োজনীয়তার কারণে কিছু অতিরিক্ত মেমরি বরাদ্দ করা হচ্ছে। মেমরি ভিউয়ার বাফার চার্ট: প্যাডিং সাইজ অনুসারে সাজানো চার্টে অমিল।