সাহায্য Kaggle উপর TensorFlow সঙ্গে গ্রেট বেরিয়ার রিফ রক্ষা চ্যালেঞ্জ যোগদান

প্রোফাইলার ব্যবহার করে টেনসরফ্লো পারফরম্যান্স অনুকূল করুন

আপনার টেনসরফ্লো মডেলের পারফরম্যান্স ট্র্যাক করতে টেনসরফ্লো প্রোফাইলারের সাথে উপলব্ধ সরঞ্জামগুলি কীভাবে ব্যবহার করবেন তা এই নির্দেশিকাটি দেখায়। হোস্ট (সিপিইউ), ডিভাইস (জিপিইউ) বা হোস্ট এবং ডিভাইস(গুলি) উভয়ের সংমিশ্রণে আপনার মডেল কীভাবে পারফর্ম করে তা আপনি বুঝতে শিখবেন।

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

এই গাইডটি আপনাকে কিভাবে প্রোফাইলার ইনস্টল করতে হয়, বিভিন্ন উপলভ্য টুলস, প্রোফাইলার কিভাবে পারফরম্যান্স ডেটা সংগ্রহ করে তার বিভিন্ন মোড এবং মডেল পারফরম্যান্স অপ্টিমাইজ করার জন্য কিছু প্রস্তাবিত সর্বোত্তম অনুশীলনের মাধ্যমে আপনাকে নিয়ে যাবে।

আপনি ক্লাউড TPUs আপনার মডেল কর্মক্ষমতা প্রোফাইলে করতে চান তাহলে, পড়ুন ক্লাউড নমনীয় নির্দেশিকা

প্রোফাইলার এবং জিপিইউ পূর্বশর্ত ইনস্টল করুন

পিপ দিয়ে টেনসরবোর্ডের জন্য প্রোফাইলার প্লাগইন ইনস্টল করুন। মনে রাখবেন যে প্রোফাইলারের জন্য TensorFlow এবং TensorBoard (>=2.2) এর সর্বশেষ সংস্করণ প্রয়োজন।

pip install -U tensorboard_plugin_profile

GPU তে প্রোফাইল করতে, আপনাকে অবশ্যই:

  1. মিট NVIDIA® জিপিইউ ড্রাইভার ও তালিকাভুক্ত CUDA® টুলকিট প্রয়োজনীয়তা TensorFlow জিপিইউ সমর্থন সফ্টওয়্যার প্রয়োজনীয়তা
  2. নিশ্চিত করুন NVIDIA® CUDA® প্রোফাইলিং সরঞ্জামসমূহ ইন্টারফেস (CUPTI) পথে বিদ্যমান:

    /sbin/ldconfig -N -v $(sed 's/:/ /g' <<< $LD_LIBRARY_PATH) | \
    grep libcupti
    

আপনি পথে CUPTI না থাকে তাহলে, তার ইনস্টলেশন ডিরেক্টরি পূর্বে লিখুন $LD_LIBRARY_PATH চালিয়ে এনভায়রনমেন্ট ভেরিয়েবল:

export LD_LIBRARY_PATH=/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH

এর পরে, চালানোর ldconfig যে CUPTI গ্রন্থাগার পাওয়া যায় আবার যাচাই করার উপরে কমান্ড।

বিশেষাধিকার সমস্যা সমাধান

যখন আপনি একটি Docker পরিবেশে বা লিনাক্স CUDA® টুলকিট সঙ্গে প্রোফাইলিং রান আপনি অপর্যাপ্ত CUPTI বিশেষাধিকার (সম্পর্কিত সমস্যার সম্মুখীন হতে পারে CUPTI_ERROR_INSUFFICIENT_PRIVILEGES )। যান এনভিডিয়া বিকাশকারী ডক্স কিভাবে আপনি লিনাক্স এই সমস্যাগুলি সমাধান পারবে সে সম্পর্কে আরো জানতে।

একটি ডকার পরিবেশে CUPTI বিশেষাধিকার সমস্যা সমাধান করতে, চালান

docker run option '--privileged=true'

প্রোফাইলার টুল

TensorBoard প্রোফাইল ট্যাব, যা প্রদর্শিত হবার পরে শুধুমাত্র আপনি কিছু মডেল ডেটা দখল থেকে প্রোফাইলার অ্যাক্সেস করুন।

পারফরম্যান্স বিশ্লেষণে সহায়তা করার জন্য প্রোফাইলারের একটি নির্বাচনী সরঞ্জাম রয়েছে:

  • ওভারভিউ পৃষ্ঠা
  • ইনপুট পাইপলাইন বিশ্লেষক
  • টেনসরফ্লো পরিসংখ্যান
  • ট্রেস ভিউয়ার
  • GPU কার্নেল পরিসংখ্যান
  • মেমরি প্রোফাইল টুল
  • পড ভিউয়ার

ওভারভিউ পৃষ্ঠা

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

ওভারভিউ পৃষ্ঠাটি নিম্নরূপ ডেটা প্রদর্শন করে:

ইমেজ

  • পারফরমেন্স সারাংশ: প্রদর্শণ আপনার মডেল কর্মক্ষমতা একটি উচ্চ পর্যায়ের সারসংক্ষেপ। কর্মক্ষমতা সারাংশ দুটি অংশ আছে:

    1. স্টেপ-টাইম ব্রেকডাউন: যেখানে সময় অতিবাহিত হয় তার একাধিক বিভাগে গড় ধাপ সময়কে বিভক্ত করে:

      • সংকলন: কার্নেল কম্পাইল করার সময় ব্যয় করা হয়েছে।
      • ইনপুট: ইনপুট ডেটা পড়ার সময় ব্যয় করা হয়েছে।
      • আউটপুট: আউটপুট ডেটা পড়ার সময় ব্যয় করা হয়।
      • কার্নেল লঞ্চ: হোস্ট কার্নেল চালু করতে সময় ব্যয় করে
      • আয়োজক গণনা সময়..
      • ডিভাইস থেকে ডিভাইস যোগাযোগের সময়।
      • অন-ডিভাইস গণনা সময়।
      • পাইথন ওভারহেড সহ অন্য সকল।
    2. ডিভাইস কম্পিউট নির্ভুলতা - 16 এবং 32-বিট কম্পিউটেশন ব্যবহার করে ডিভাইস কম্পিউট সময়ের শতাংশের রিপোর্ট করে।

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

  • ডিভাইসে শীর্ষ 10 TensorFlow অপারেশন (যেমন জিপিইউ): প্রদর্শনগুলিতে-ডিভাইস অপস যে দীর্ঘতম দৌড়ে।

    প্রতিটি সারি একটি অপের স্ব-সময় (সমস্ত অপের দ্বারা নেওয়া সময়ের শতাংশ হিসাবে), ক্রমবর্ধমান সময়, বিভাগ এবং নাম প্রদর্শন করে।

  • চালান পরিবেশ: প্রদর্শন সহ মডেল রান পরিবেশের একটি উচ্চ পর্যায়ের সারাংশ:

    • ব্যবহৃত হোস্ট সংখ্যা.
    • ডিভাইসের ধরন (GPU/TPU)।
    • ডিভাইস কোরের সংখ্যা।
  • পরবর্তী ধাপের জন্য প্রস্তাবনা: রিপোর্ট যখন একটি মডেল ইনপুট আবদ্ধ হয় এবং সরঞ্জাম বিশেষ পরামর্শ দেওয়া হচ্ছে আপনি সনাক্ত এবং সমাধান মডেল কর্মক্ষমতা bottlenecks করতে ব্যবহার করতে পারেন।

ইনপুট পাইপলাইন বিশ্লেষক

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

ফাইল থেকে রেকর্ড পড়ার জন্য একটি সাধারণ পাইপলাইনের নিম্নলিখিত ধাপ রয়েছে:

  1. ফাইল পড়া।
  2. ফাইল প্রিপ্রসেসিং (ঐচ্ছিক)।
  3. হোস্ট থেকে ডিভাইসে ফাইল স্থানান্তর।

একটি অদক্ষ ইনপুট পাইপলাইন গুরুতরভাবে আপনার আবেদন মন্থর করতে পারে. একটি অ্যাপ্লিকেশানের ইনপুট আবদ্ধ যখন এটি ইনপুট পাইপলাইন সময় একটি উল্লেখযোগ্য অংশ ব্যয় বিবেচনা করা হয়। ইনপুট পাইপলাইন কোথায় অদক্ষ তা বুঝতে ইনপুট পাইপলাইন বিশ্লেষক থেকে প্রাপ্ত অন্তর্দৃষ্টি ব্যবহার করুন।

ইনপুট পাইপলাইন বিশ্লেষক আপনাকে অবিলম্বে বলে যে আপনার প্রোগ্রাম ইনপুট আবদ্ধ কিনা এবং ইনপুট পাইপলাইনের যেকোনো পর্যায়ে পারফরম্যান্সের বাধাগুলি ডিবাগ করতে ডিভাইস- এবং হোস্ট-সাইড বিশ্লেষণের মাধ্যমে আপনাকে নিয়ে যায়।

আপনার ডেটা ইনপুট পাইপলাইন অপ্টিমাইজ করার জন্য প্রস্তাবিত সর্বোত্তম অনুশীলনের জন্য ইনপুট পাইপলাইন পারফরম্যান্সের নির্দেশিকা দেখুন।

ইনপুট পাইপলাইন ড্যাশবোর্ড

ইনপুট পাইপলাইন বিশ্লেষক প্রোফাইল নির্বাচন খুলতে, তারপর টুলস ড্রপডাউন থেকে input_pipeline_analyzer নির্বাচন করুন।

ইমেজ

ড্যাশবোর্ডে তিনটি বিভাগ রয়েছে:

  1. সারাংশ: কিনা আপনার আবেদন ইনপুট আবদ্ধ হয় থাকা তথ্যের সাথে সামগ্রিক ইনপুট পাইপলাইন সংক্ষিপ্ত করে এবং, যদি তাই হয়, কত দ্বারা।
  2. ডিভাইস প্রান্তের বিশ্লেষণ: Detailed প্রদর্শণ, ডিভাইসের প্রান্তের বিশ্লেষণ ফলাফল, ডিভাইস ধাপে সময় এবং ডিভাইসের সময় পরিসীমা প্রতিটি পদে পদে কোর জুড়ে ইনপুট ডেটা জন্য অপেক্ষা অতিবাহিত সহ।
  3. হোস্ট-সাইড বিশ্লেষণ: শো হোস্ট দিকে একটি বিস্তারিত বিশ্লেষণ, হোস্ট ইনপুট প্রক্রিয়াকরণ সময় একটি ভাঙ্গন সহ।

ইনপুট পাইপলাইন সারাংশ

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

ডিভাইস-সাইড বিশ্লেষণ

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

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

হোস্ট-সাইড বিশ্লেষণ

হোস্ট-সাইড বিশ্লেষণ ইনপুট প্রক্রিয়াকরণের (সময় ব্যয় একটি ভাঙ্গন রিপোর্ট tf.data এপিআই অপস) বিভিন্ন শ্রেণীতে হোস্ট:

  • চাহিদা ফাইল থেকে ডেটা পড়া: সময়, ক্যাশে ছাড়া ফাইল থেকে ডেটা পড়ার পূর্বে আনা, এবং interleaving ব্যয়।
  • আগাম ফাইল থেকে ডেটা পড়া: টাইম ফাইল পড়া অতিবাহিত, ক্যাশে সহ পূর্বে আনা, এবং interleaving।
  • ডেটা preprocessing: টাইম যেমন ইমেজ decompression যেমন preprocessing অপস, উপর অতিবাহিত।
  • Enqueuing তথ্য ডিভাইসে স্থানান্তরিত হবে: সময় ডিভাইসে ডাটা ট্রান্সফারের আগে একটি infeed কিউ 'র মধ্যে তথ্য দেওয়া অতিবাহিত।

সঞ্চালনের সময় ভিত্তিতে আলাদা করে পৃথক ইনপুট অপস জন্য পরিসংখ্যান এবং তাদের আরও পরিদর্শন করা ইনপুট অপ পরিসংখ্যান প্রসারিত করুন।

ইমেজ

একটি উৎস তথ্য টেবিল নিম্নলিখিত তথ্য ধারণকারী প্রতিটি এন্ট্রি সঙ্গে প্রদর্শিত হবে:

  1. ইনপুট অপ: শো ইনপুট অপ এর TensorFlow অপ নাম।
  2. গণনা: শো অপ সঞ্চালনের দৃষ্টান্ত মোট সংখ্যা প্রোফাইলিং সময়কালে।
  3. মোট সময় (মিলিসেকেন্ডে): সময় ক্রমপুঞ্জিত সমষ্টি ঐ স্থানেই প্রতিটি ব্যয় প্রদর্শন করে।
  4. মোট সময়%: শো মোট সময় মোট সময় ইনপুট প্রক্রিয়াকরণে অতিবাহিত ভগ্নাংশ হিসাবে একটি অপ ব্যয়।
  5. মোট স্বয়ং সময় (মিলিসেকেন্ডে): স্ব সময় ঐ স্থানেই প্রতিটি ব্যয় ক্রমপুঞ্জিত সমষ্টি প্রদর্শন করে। এখানে সেলফ টাইম ফাংশন বডির অভ্যন্তরে কাটানো সময়কে পরিমাপ করে, এটি যে ফাংশনে ব্যয় করেছে তা বাদ দিয়ে।
  6. মোট স্বয়ং সময়%। ইনপুট প্রক্রিয়াকরণে ব্যয় করা মোট সময়ের একটি ভগ্নাংশ হিসাবে মোট স্ব-সময় দেখায়।
  7. শ্রেনী। ইনপুট অপের প্রক্রিয়াকরণ বিভাগ দেখায়।

টেনসরফ্লো পরিসংখ্যান

TensorFlow পরিসংখ্যান টুল প্রতিটি TensorFlow op (op) এর কর্মক্ষমতা প্রদর্শন করে যা একটি প্রোফাইলিং সেশনের সময় হোস্ট বা ডিভাইসে সম্পাদিত হয়।

ইমেজ

টুলটি দুটি প্যানে কর্মক্ষমতা তথ্য প্রদর্শন করে:

  • উপরের ফলকটি চারটি পাই চার্ট পর্যন্ত প্রদর্শন করে:

    1. হোস্টে প্রতিটি অপের স্ব-নির্বাহের সময় বিতরণ।
    2. হোস্টে প্রতিটি অপ টাইপের স্ব-নির্বাহের সময় বিতরণ।
    3. ডিভাইসে প্রতিটি অপের স্ব-নির্বাহের সময় বিতরণ।
    4. ডিভাইসে প্রতিটি অপ টাইপের স্ব-নির্বাহের সময় বিতরণ।
  • নীচের ফলকটি একটি টেবিল দেখায় যা প্রতিটি অপের জন্য একটি সারি এবং প্রতিটি ধরণের ডেটার জন্য একটি কলাম সহ টেনসরফ্লো অপস সম্পর্কে ডেটা রিপোর্ট করে (কলামের শিরোনাম ক্লিক করে কলামগুলি সাজান)৷ একটি CSV ফাইল হিসাবে এই টেবিল থেকে ডেটা রপ্তানি করতে উপরের ফলকে ডান দিকে রপ্তানি CSV হিসাবে বোতামে ক্লিক করুন।

    মনে রাখবেন যে:

    • যদি কোনো অপারেশনে শিশু অপারেশন হয়:

      • একটি অপারেটিং সিস্টেমের মোট "সঞ্চিত" সময়ের মধ্যে শিশু অপারেশনের ভিতরে কাটানো সময় অন্তর্ভুক্ত।
      • একটি অপারেটিং সিস্টেমের মোট "স্ব" সময় শিশু অপ্সের ভিতরে কাটানো সময়কে অন্তর্ভুক্ত করে না।
    • যদি হোস্টে একটি অপশন চালানো হয়:

      • অপ-অন-এর দ্বারা ব্যবহৃত ডিভাইসে মোট স্ব-সময়ের শতাংশ হবে 0।
      • এই অপশন পর্যন্ত এবং সহ ডিভাইসে মোট স্ব-সময়ের ক্রমবর্ধমান শতাংশ 0 হবে।
    • যদি ডিভাইসে একটি অপশন চালানো হয়:

      • এই অপশনের মাধ্যমে হোস্টে মোট স্ব-সময়ের শতাংশ হবে 0।
      • এই অপশন পর্যন্ত এবং সহ হোস্টে থাকা মোট স্ব-সময়ের ক্রমবর্ধমান শতাংশ 0 হবে।

আপনি পাই চার্ট এবং টেবিলে নিষ্ক্রিয় সময় অন্তর্ভুক্ত বা বাদ দিতে বেছে নিতে পারেন।

ট্রেস ভিউয়ার

ট্রেস ভিউয়ার একটি টাইমলাইন প্রদর্শন করে যা দেখায়:

  • আপনার TensorFlow মডেল দ্বারা সম্পাদিত অপারেশনগুলির সময়কাল
  • সিস্টেমের কোন অংশ (হোস্ট বা ডিভাইস) একটি অপ সম্পাদন করেছে। সাধারণত, হোস্ট ইনপুট অপারেশন চালায়, প্রশিক্ষণ ডেটা প্রিপ্রসেস করে এবং ডিভাইসে স্থানান্তর করে, যখন ডিভাইসটি প্রকৃত মডেল প্রশিক্ষণ চালায়

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

ট্রেস ভিউয়ার ইন্টারফেস

আপনি যখন ট্রেস ভিউয়ার খুলবেন, তখন এটি আপনার সাম্প্রতিক রান প্রদর্শন করছে:

ইমেজ

এই পর্দায় নিম্নলিখিত প্রধান উপাদান রয়েছে:

  1. সময়রেখা পেন: শো অপস ডিভাইসে এবং হোস্ট সময়ের মৃত্যুদন্ড কার্যকর।
  2. বিশদ বিবরণ ফলকে: সময়রেখার ফলকে নির্বাচিত অপস শো অতিরিক্ত তথ্য।

টাইমলাইন প্যানে নিম্নলিখিত উপাদান রয়েছে:

  1. শীর্ষ দণ্ড: বিভিন্ন অক্জিলিয়ারী নিয়ন্ত্রণ রয়েছে।
  2. টাইম অক্ষ: ট্রেস শুরুতে শো সময় আপেক্ষিক।
  3. অনুচ্ছেদ এবং ট্র্যাক লেবেল: প্রতিটি অধ্যায় একাধিক গানগুলি রয়েছে এবং বাম দিকে একটি ত্রিভুজ আপনি প্রসারিত ও অধ্যায় সঙ্কুচিত করতে ক্লিক করতে পারেন যে হয়েছে। সিস্টেমের প্রতিটি প্রক্রিয়াকরণ উপাদানের জন্য একটি বিভাগ আছে।
  4. টুল নির্বাচক: যেমন জুম, প্যান, নির্বাচন এবং টাইমিং যেমন ভিউয়ার ট্রেস সাথে ইন্টারঅ্যাক্ট করার জন্য বিভিন্ন সরঞ্জাম রয়েছে। সময় ব্যবধান চিহ্নিত করতে টাইমিং টুল ব্যবহার করুন।
  5. ঘটনাবলী: এই সময় সময় একটি অপ মৃত্যুদন্ড দেয়া হয়েছে বা এই ধরনের প্রশিক্ষণ ধাপ হিসেবে মেটা-ঘটনা, সময়কাল প্রদর্শন করুন।
বিভাগ এবং ট্র্যাক

ট্রেস ভিউয়ারে নিম্নলিখিত বিভাগগুলি রয়েছে:

  • প্রতিটি যন্ত্রের নোড জন্য এক অধ্যায়, ডিভাইসের চিপ সংখ্যা এবং চিপ মধ্যে ডিভাইস নোড দিয়ে লেবেল (উদাহরণস্বরূপ, /device:GPU:0 (pid 0) )। প্রতিটি ডিভাইস নোড বিভাগে নিম্নলিখিত ট্র্যাক রয়েছে:
    • ধাপ: প্রশিক্ষণ পদক্ষেপ ডিভাইসে চলতে হয় সময়কাল শো
    • TensorFlow অপস: শো অপস ডিভাইসে মৃত্যুদন্ড কার্যকর
    • XLA অপস: শো XLA কার্যকলাপ (অপস) ডিভাইসটি যদি XLA ব্যবহৃত কম্পাইলার উপর যে দৌড়ে (প্রতিটি TensorFlow অপ এক বা একাধিক XLA অপস অনুদিত হয় দ্য XLA কম্পাইলার কোডে XLA অপস অনুবাদ করে ডিভাইসটিতে রান।)।
  • হোস্ট মেশিনের CPU তে চলমান থ্রেডের জন্য এক অধ্যায়, লেবেলযুক্ত "হোস্ট টপিক"। বিভাগে প্রতিটি CPU থ্রেডের জন্য একটি ট্র্যাক রয়েছে। মনে রাখবেন যে আপনি বিভাগ লেবেলগুলির পাশাপাশি প্রদর্শিত তথ্য উপেক্ষা করতে পারেন।
ঘটনা

টাইমলাইনের মধ্যে ইভেন্টগুলি বিভিন্ন রঙে প্রদর্শিত হয়; রং নিজেদের কোন নির্দিষ্ট অর্থ আছে.

ট্রেস ভিউয়ার আপনার টেনসরফ্লো প্রোগ্রামে পাইথন ফাংশন কলের ট্রেসও প্রদর্শন করতে পারে। আপনি ব্যবহার করেন তাহলে tf.profiler.experimental.start এপিআই, আপনি পাইথন ব্যবহার করে ট্রেসিং সক্ষম করতে পারেন ProfilerOptions যখন প্রোফাইলিং শুরু namedtuple। পরিবর্তে আপনি যদি প্রোফাইলিং জন্য স্যাম্পলিং মোড ব্যবহার করেন, আপনি ক্যাপচার প্রোফাইল ডায়ালগে ড্রপডাউন অপশন ব্যবহার করে ট্রেসিং মাত্রা নির্বাচন করতে পারেন।

ইমেজ

GPU কার্নেল পরিসংখ্যান

এই টুলটি প্রতিটি GPU ত্বরান্বিত কার্নেলের জন্য কর্মক্ষমতা পরিসংখ্যান এবং মূল অপশন দেখায়।

ইমেজ

টুল দুটি প্যানে তথ্য প্রদর্শন করে:

  • উপরের ফলকটি একটি পাই চার্ট প্রদর্শন করে যা CUDA কার্নেলগুলি দেখায় যেগুলির সর্বাধিক মোট সময় অতিবাহিত হয়েছে।

  • নীচের ফলকটি প্রতিটি অনন্য কার্নেল-অপ জোড়ার জন্য নিম্নলিখিত ডেটা সহ একটি টেবিল প্রদর্শন করে:

    • কার্নেল-অপ পেয়ার দ্বারা গোষ্ঠীবদ্ধ মোট অতিবাহিত GPU সময়কালের অবরোহ ক্রমে একটি র্যাঙ্ক।
    • লঞ্চ করা কার্নেলের নাম।
    • কার্নেল দ্বারা ব্যবহৃত GPU রেজিস্টারের সংখ্যা।
    • বাইটে ব্যবহৃত শেয়ার্ড (স্ট্যাটিক + ডাইনামিক শেয়ার্ড) মেমরির মোট আকার।
    • ব্লক মাত্রা হিসাবে প্রকাশ blockDim.x, blockDim.y, blockDim.z
    • গ্রিড মাত্রা হিসাবে প্রকাশ gridDim.x, gridDim.y, gridDim.z
    • অপ কিনা ব্যবহার করতে যোগ্য টেন্সর কোর
    • কার্নেলে টেনসর কোর নির্দেশাবলী রয়েছে কিনা।
    • অপের নাম যে এই কার্নেলটি চালু করেছে।
    • এই কার্নেল-অপ জোড়ার সংঘটনের সংখ্যা।
    • মাইক্রোসেকেন্ডে মোট অতিবাহিত GPU সময়।
    • মাইক্রোসেকেন্ডে গড় অতিবাহিত GPU সময়।
    • মাইক্রোসেকেন্ডে ন্যূনতম অতিবাহিত GPU সময়।
    • মাইক্রোসেকেন্ডে সর্বাধিক অতিবাহিত GPU সময়।

মেমরি প্রোফাইল টুল

স্মৃতি প্রোফাইল টুল মনিটর প্রোফাইলিং ব্যবধান সময় আপনার ডিভাইসের মেমোরি ব্যবহার। আপনি এই টুল ব্যবহার করতে পারেন:

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

মেমরি প্রোফাইল টুল তিনটি বিভাগে ডেটা প্রদর্শন করে:

  1. মেমরি প্রোফাইল সারাংশ
  2. মেমরি টাইমলাইন গ্রাফ
  3. মেমরি ব্রেকডাউন টেবিল

মেমরি প্রোফাইল সারাংশ

এই বিভাগটি নীচে দেখানো হিসাবে আপনার TensorFlow প্রোগ্রামের মেমরি প্রোফাইলের একটি উচ্চ-স্তরের সারাংশ প্রদর্শন করে:

মেমরি প্রোফাইল সারাংশে ছয়টি ক্ষেত্র রয়েছে:

  1. স্মৃতি আইডি: ড্রপডাউন যা সব উপলব্ধ ডিভাইস মেমরি সিস্টেমের তালিকাবদ্ধ করে। ড্রপডাউন থেকে আপনি যে মেমরি সিস্টেমটি দেখতে চান তা নির্বাচন করুন।
  2. #Allocation: মেমরির প্রোফাইলিং ব্যবধান সময় তৈরি বরাদ্দ সংখ্যা।
  3. #Deallocation: প্রোফাইলিং ব্যবধান মেমরি deallocations সংখ্যা
  4. স্মৃতি ধারণক্ষমতা: মেমরির সিস্টেম নির্বাচন মোট ধারণক্ষমতা (GiBs মধ্যে)।
  5. পিক গাদা ব্যবহার: শিখর মেমোরি ব্যবহার (GiBs মধ্যে) যেহেতু মডেল চলমান শুরু করে।
  6. পিক মেমরি ব্যবহার: শিখর মেমোরি ব্যবহার (GiBs মধ্যে) প্রোফাইলিং ব্যবধান। এই ক্ষেত্রটিতে নিম্নলিখিত উপ-ক্ষেত্র রয়েছে:
    1. টাইমস্ট্যাম্প: যখন শিখর মেমোরি ব্যবহার সময়রেখা গ্রাফে ঘটেছে টাইমস্ট্যাম্প।
    2. স্ট্যাক সংরক্ষণ: মেমরির পরিমাণ স্ট্যাক (GiBs মধ্যে) উপর সংরক্ষিত।
    3. গাদা বরাদ্দ: মেমরির পরিমাণ গাদা (GiBs মধ্যে) বরাদ্দ।
    4. ফ্রি মেমরি: বিনামূল্যে মেমরি পরিমাণ (GiBs মধ্যে)। মেমরি ক্যাপাসিটি হল স্ট্যাক রিজার্ভেশন, হিপ অ্যালোকেশন এবং ফ্রি মেমরির মোট যোগফল।
    5. ফ্র্যাগমেন্টেশন: ফ্র্যাগমেন্টেশন শতাংশ (নিম্ন উত্তম)। এটা তোলে শতকরা হিসাবে গণনা করা হয় (1 - Size of the largest chunk of free memory / Total free memory)

মেমরি টাইমলাইন গ্রাফ

এই বিভাগটি মেমরি ব্যবহারের একটি প্লট (GiBs-এ) এবং খণ্ডিতকরণের শতাংশ বনাম সময় (ms-এ) প্রদর্শন করে।

ইমেজ

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

ইমেজ

পপ-আপ উইন্ডো নিম্নলিখিত তথ্য প্রদর্শন করে:

  • টাইমস্ট্যাম্প (MS): টাইমলাইনে নির্বাচিত ইভেন্টের অবস্থান।
  • ইভেন্ট: ইভেন্টের প্রকার (বরাদ্দ বা deallocation)।
  • requested_size (GiBs): মেমরির পরিমাণ অনুরোধ করা হয়েছে। ডিলোকেশন ইভেন্টের জন্য এটি একটি নেতিবাচক সংখ্যা হবে।
  • allocation_size (GiBs): মেমরি প্রকৃত পরিমাণ বরাদ্দ। ডিলোকেশন ইভেন্টের জন্য এটি একটি নেতিবাচক সংখ্যা হবে।
  • tf_op: TensorFlow অপ যে বরাদ্দ / deallocation অনুরোধ করেছে।
  • step_id: প্রশিক্ষণ পদক্ষেপ যা এই ইভেন্টটি ঘটেছে।
  • region_type: ডেটা সত্তা টাইপ যে এই বরাদ্দ মেমরির জন্য। সম্ভাব্য মান হল temp temporaries জন্য, output সক্রিয়করণব্যবস্থা এবং গ্রেডিয়েন্ট জন্য, এবং persist / dynamic ওজন এবং ধ্রুবক জন্য।
  • data_type: টেন্সর উপাদান টাইপ (যেমন, 8 বিট স্বাক্ষরবিহীন পূর্ণসংখ্যা জন্য uint8)।
  • tensor_shape: টেন্সর আকৃতি বরাদ্দ / deallocated হচ্ছে।
  • memory_in_use (GiBs): মোট মেমরির সময় এই সময়ে ব্যবহার করা হচ্ছে যে।

মেমরি ব্রেকডাউন টেবিল

এই টেবিলটি প্রোফাইলিং ব্যবধানে পিক মেমরি ব্যবহারের পয়েন্টে সক্রিয় মেমরি বরাদ্দ দেখায়।

ইমেজ

প্রতিটি টেনসরফ্লো অপের জন্য একটি সারি রয়েছে এবং প্রতিটি সারিতে নিম্নলিখিত কলাম রয়েছে:

  • অপ নাম: TensorFlow অপ নাম।
  • বরাদ্দ ফাইলের আকার (GiBs): মেমরি মোট পরিমাণ এই অপ বরাদ্দ।
  • অনুরোধ করা ফাইলের আকার (GiBs): মেমরি মোট পরিমাণ এই অপ জন্য অনুরোধ করা হয়েছে।
  • সংঘটন: এই অপ বরাদ্দ সংখ্যা।
  • অঞ্চল টাইপ: ডাটা সত্তা টাইপ যে এই বরাদ্দ মেমরির জন্য। সম্ভাব্য মান হল temp temporaries জন্য, output সক্রিয়করণব্যবস্থা এবং গ্রেডিয়েন্ট জন্য, এবং persist / dynamic ওজন এবং ধ্রুবক জন্য।
  • ডেটা টাইপ: টেন্সর উপাদান প্রকার।
  • আকৃতি: বরাদ্দ tensors এর আকৃতি।

পড ভিউয়ার

পড ভিউয়ার টুলটি সমস্ত কর্মীদের মধ্যে একটি প্রশিক্ষণ ধাপের ভাঙ্গন দেখায়।

ইমেজ

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

tf.ডেটা বটলনেক বিশ্লেষণ

tf.data বোতলের বিশ্লেষণ টুল স্বয়ংক্রিয়ভাবে bottlenecks সনাক্ত করে tf.data আপনার প্রোগ্রাম ইনপুট pipelines এবং সেগুলি কীভাবে ঠিক করতে সুপারিশ প্রদান করে। এটি ব্যবহার যেকোনো প্রোগ্রামের সাথে কাজ করে tf.data প্ল্যাটফর্ম (CPU- র / GPU / নমনীয়) নির্বিশেষে। তার বিশ্লেষণ ও সুপারিশ এই উপর ভিত্তি করে নির্দেশিকা

এটি এই পদক্ষেপগুলি অনুসরণ করে একটি বাধা সনাক্ত করে:

  1. সবচেয়ে ইনপুট আবদ্ধ হোস্ট খুঁজুন.
  2. একটি এর ধীরতম সঞ্চালনের খুঁজুন tf.data ইনপুট পাইপলাইন।
  3. প্রোফাইলার ট্রেস থেকে ইনপুট পাইপলাইন গ্রাফ পুনর্গঠন করুন।
  4. ইনপুট পাইপলাইন গ্রাফে গুরুত্বপূর্ণ পথটি খুঁজুন।
  5. একটি বাধা হিসাবে সমালোচনামূলক পথে ধীর রূপান্তর চিহ্নিত করুন।

কর্মক্ষমতা বিশ্লেষণ সারাংশ, সমস্ত ইনপুট pipelines এবং ইনপুট পাইপলাইন গ্রাফ সংক্ষিপ্তসার: UI 'তে তিন বিভাগে ভাগ করা হয়েছে।

কর্মক্ষমতা বিশ্লেষণ সারসংক্ষেপ

ইমেজ

এই বিভাগটি বিশ্লেষণের সারাংশ প্রদান করে। এটা তোলে ধীর প্রতিবেদনটি tf.data ইনপুট প্রফাইল শনাক্ত পাইপলাইনগুলি। এই বিভাগটি সর্বাধিক ইনপুট আবদ্ধ হোস্ট এবং সর্বাধিক লেটেন্সি সহ এর ধীরতম ইনপুট পাইপলাইনও দেখায়। সবচেয়ে গুরুত্বপূর্ণ, এটি সনাক্ত করে যে ইনপুট পাইপলাইনের কোন অংশটি বাধা এবং কীভাবে এটি ঠিক করা যায়। ইটারেটর টাইপ এবং এর দীর্ঘ নামের সাথে বটলনেক তথ্য প্রদান করা হয়।

কিভাবে tf.data iterator এর দীর্ঘ নাম পড়তে হয়

একটি দীর্ঘ নামের ফর্ম্যাট করা হয়েছে Iterator::<Dataset_1>::...::<Dataset_n> । দীর্ঘ নামে <Dataset_n> পুনরুক্তিকারীর প্রকারের সঙ্গে মিলছে এবং দীর্ঘ নামে অন্যান্য ডেটাসেট স্রোতবরাবর রূপান্তরের প্রতিনিধিত্ব করে।

উদাহরণস্বরূপ, নিম্নলিখিত ইনপুট পাইপলাইন ডেটাসেট বিবেচনা করুন:

dataset = tf.data.Dataset.range(10).map(lambda x: x).repeat(2).batch(5)

উপরের ডেটাসেট থেকে পুনরাবৃত্তিকারীদের দীর্ঘ নাম হবে:

পুনরাবৃত্তিকারী প্রকার দীর্ঘ নাম
পরিসর পুনরাবৃত্তিকারী::ব্যাচ::পুনরাবৃত্তি::মানচিত্র::পরিসীমা
মানচিত্র পুনরাবৃত্তিকারী::ব্যাচ::পুনরাবৃত্তি::মানচিত্র
পুনরাবৃত্তি করুন পুনরাবৃত্তিকারী::ব্যাচ::পুনরাবৃত্তি
ব্যাচ পুনরাবৃত্তিকারী::ব্যাচ

সমস্ত ইনপুট পাইপলাইনের সারাংশ

ইমেজ

এই বিভাগটি সমস্ত হোস্ট জুড়ে সমস্ত ইনপুট পাইপলাইনের সারাংশ প্রদান করে। সাধারণত একটি ইনপুট পাইপলাইন আছে। বন্টন কৌশল ব্যবহার করার সময়, এক হোস্ট ইনপুট পাইপলাইন প্রোগ্রামের চলমান tf.data কোড এবং একাধিক ডিভাইস ইনপুট হোস্ট ইনপুট পাইপলাইন থেকে ডেটা পুনরুদ্ধারের এবং ডিভাইস থেকে এটি হস্তান্তর পাইপলাইনগুলি।

প্রতিটি ইনপুট পাইপলাইনের জন্য, এটি তার সম্পাদনের সময়ের পরিসংখ্যান দেখায়। একটি কল 50 μs-এর বেশি সময় নিলে ধীর হিসাবে গণনা করা হয়৷

ইনপুট পাইপলাইন গ্রাফ

ইমেজ

এই বিভাগটি কার্যকর করার সময় তথ্য সহ ইনপুট পাইপলাইন গ্রাফ দেখায়। কোন হোস্ট এবং ইনপুট পাইপলাইন দেখতে হবে তা চয়ন করতে আপনি "হোস্ট" এবং "ইনপুট পাইপলাইন" ব্যবহার করতে পারেন৷ ইনপুট পাইপলাইন মৃত্যুদণ্ড কার্যকর ক্রমে আপনি র্যাঙ্ক ড্রপডাউন ব্যবহার নির্বাচন করতে পারবেন সাজানো সঞ্চালনের সময় অনুসারে সাজানো হয়।

ইমেজ

সমালোচনামূলক পথের নোডগুলির গাঢ় রূপরেখা রয়েছে। বটলনেক নোড, যেটি ক্রিটিক্যাল পাথে সবচেয়ে বেশি সময় কাটানো নোড, এর একটি লাল রূপরেখা রয়েছে। অন্যান্য অ-সমালোচনামূলক নোডগুলিতে ধূসর ড্যাশযুক্ত রূপরেখা রয়েছে।

প্রতিটি নোডের সালে শুরু করার সময়ের ইঙ্গিত সম্পাদন এর শুরুর সময়। একই নোড, উদাহরণস্বরূপ একাধিক বার মৃত্যুদন্ড কার্যকর করা যেতে পারে, যদি একটি হয় Batch ইনপুট পাইপলাইন অপ। এটি একাধিকবার কার্যকর করা হলে, এটি প্রথম মৃত্যুদন্ডের শুরুর সময়।

মোট সময়কাল সঞ্চালনের প্রাচীরের সময়। যদি এটি একাধিকবার কার্যকর করা হয় তবে এটি সমস্ত মৃত্যুদণ্ডের প্রাচীর সময়ের সমষ্টি।

স্বয়ং সময় তার অবিলম্বে শিশু নোড সঙ্গে ওভারল্যাপ করা সময় ছাড়া মোট সময় নেই।

"# কল" হল ইনপুট পাইপলাইন চালানোর সংখ্যা।

কর্মক্ষমতা তথ্য সংগ্রহ করুন

TensorFlow প্রোফাইলার হোস্ট কার্যকলাপ এবং আপনার TensorFlow মডেলের GPU ট্রেস সংগ্রহ করে। আপনি প্রোগ্রাম্যাটিক মোড বা স্যাম্পলিং মোডের মাধ্যমে কর্মক্ষমতা ডেটা সংগ্রহ করতে প্রোফাইলারকে কনফিগার করতে পারেন।

প্রোফাইলিং API

প্রোফাইলিং করার জন্য আপনি নিম্নলিখিত API ব্যবহার করতে পারেন।

  • TensorBoard Keras কলব্যাক (ব্যবহার কর্মসূচিগত মোড tf.keras.callbacks.TensorBoard )

    # Profile from batches 10 to 15
    tb_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir,
                                                 profile_batch='10, 15')
    
    # Train the model and use the TensorBoard Keras callback to collect
    # performance profiling data
    model.fit(train_data,
              steps_per_epoch=20,
              epochs=5,
              callbacks=[tb_callback])
    
  • ব্যবহার কর্মসূচিগত মোড tf.profiler ফাংশন এপিআই

    tf.profiler.experimental.start('logdir')
    # Train the model here
    tf.profiler.experimental.stop()
    
  • প্রসঙ্গ ম্যানেজার ব্যবহার করে প্রোগ্রাম্যাটিক মোড

    with tf.profiler.experimental.Profile('logdir'):
        # Train the model here
        pass
    

  • স্যাম্পলিং মোড: অন-ডিমান্ড ব্যবহার করে প্রোফাইলিং সঞ্চালন tf.profiler.experimental.server.start আপনার TensorFlow মডেল রান দিয়ে একটি gRPC সার্ভার আরম্ভ করার জন্য। GRPC সার্ভার শুরু এবং আপনার মডেল চলমান করার পরে, আপনি TensorBoard প্রফাইল প্লাগইন মধ্যে ক্যাপচার প্রোফাইল বোতামের মাধ্যমে একটি প্রোফাইল ক্যাপচার করতে পারেন। যদি এটি ইতিমধ্যে চালু না হয় তবে একটি টেনসরবোর্ড ইনস্ট্যান্স চালু করতে উপরে ইনস্টল করা প্রোফাইলার বিভাগে স্ক্রিপ্টটি ব্যবহার করুন৷

    উদাহরণ হিসেবে,

    # Start a profiler server before your model runs.
    tf.profiler.experimental.server.start(6009)
    # (Model code goes here).
    #  Send a request to the profiler server to collect a trace of your model.
    tf.profiler.experimental.client.trace('grpc://localhost:6009',
                                          'gs://your_tb_logdir', 2000)
    

    একাধিক কর্মীদের প্রোফাইলিংয়ের জন্য একটি উদাহরণ:

    # E.g. your worker IP addresses are 10.0.0.2, 10.0.0.3, 10.0.0.4, and you
    # would like to profile for a duration of 2 seconds.
    tf.profiler.experimental.client.trace(
        'grpc://10.0.0.2:8466,grpc://10.0.0.3:8466,grpc://10.0.0.4:8466',
        'gs://your_tb_logdir',
        2000)
    

নির্দিষ্ট করার ক্যাপচার প্রোফাইল ডায়ালগ ব্যবহার করুন:

  • প্রোফাইল পরিষেবা URL বা TPU নামের একটি কমা দ্বারা সীমাবদ্ধ তালিকা৷
  • একটি প্রোফাইলিং সময়কাল.
  • ডিভাইস, হোস্ট এবং পাইথন ফাংশন কল ট্রেসিং এর স্তর।
  • প্রথমে ব্যর্থ হলে প্রোফাইল ক্যাপচার করার জন্য আপনি কতবার প্রোফাইলারকে আবার চেষ্টা করতে চান৷

কাস্টম প্রশিক্ষণ loops প্রোফাইলিং

আপনার TensorFlow কোডে কাস্টম প্রশিক্ষণ লুপ প্রোফাইলে উপকরণ সঙ্গে প্রশিক্ষণ লুপ tf.profiler.experimental.Trace এপিআই প্রোফাইলার জন্য পদক্ষেপ সীমানা চিহ্নিত করতে।

name যুক্তি পদক্ষেপ নামের জন্য একটি উপসর্গ হিসাবে ব্যবহার করা হয়, step_num শব্দ যুক্তি পদক্ষেপ নামে যোগ করা হয়, এবং _r শব্দ যুক্তি এই ট্রেস ঘটনা প্রোফাইলার দ্বারা একটি ধাপ ঘটনা হিসেবে প্রক্রিয়া করে তোলে।

উদাহরণ হিসেবে,

for step in range(NUM_STEPS):
    with tf.profiler.experimental.Trace('train', step_num=step, _r=1):
        train_data = next(dataset)
        train_step(train_data)

এটি প্রোফাইলারের ধাপ-ভিত্তিক কর্মক্ষমতা বিশ্লেষণকে সক্ষম করবে এবং ধাপ ইভেন্টগুলি ট্রেস ভিউয়ারে দেখানোর কারণ হবে।

নিশ্চিত করুন যে আপনি মধ্যে ডেটা সেটটি পুনরুক্তিকারীর অন্তর্ভুক্ত করুন tf.profiler.experimental.Trace ইনপুট পাইপলাইন সঠিক বিশ্লেষণের জন্য প্রসঙ্গ।

নীচের কোড স্নিপেট একটি বিরোধী প্যাটার্ন:

for step, train_data in enumerate(dataset):
    with tf.profiler.experimental.Trace('train', step_num=step, _r=1):
        train_step(train_data)

প্রোফাইলিং ব্যবহার ক্ষেত্রে

প্রোফাইলারটি চারটি ভিন্ন অক্ষ বরাবর বেশ কয়েকটি ব্যবহারের ক্ষেত্রে কভার করে। কিছু সংমিশ্রণ বর্তমানে সমর্থিত এবং অন্যগুলি ভবিষ্যতে যোগ করা হবে৷ কিছু ব্যবহারের ক্ষেত্রে হল:

  • স্থানীয় বনাম দূরবর্তী প্রোফাইলিং: এই আপনার প্রোফাইলিং পরিবেশ স্থাপনের দুটি সাধারণ উপায় আছে। স্থানীয় প্রোফাইলিং-এ, আপনার মডেল যে মেশিনে এক্সিকিউট করছে সেই মেশিনে প্রোফাইলিং API বলা হয়, উদাহরণস্বরূপ, GPU সহ একটি স্থানীয় ওয়ার্কস্টেশন। দূরবর্তী প্রোফাইলিং-এ, প্রোফাইলিং API একটি ভিন্ন মেশিনে কল করা হয় যেখান থেকে আপনার মডেলটি কার্যকর করা হচ্ছে, উদাহরণস্বরূপ, একটি ক্লাউড TPU-তে।
  • একাধিক শ্রমিক প্রোফাইলিং: যখন TensorFlow এর বিতরণ প্রশিক্ষণ ক্ষমতা ব্যবহার আপনি একাধিক মেশিন প্রোফাইলে পারবেন না।
  • হার্ডওয়্যারের প্ল্যাটফর্ম: প্রোফাইল সিপিইউ, জিপিইউ এবং TPUs।

নীচের টেবিলটি উপরে উল্লিখিত TensorFlow-সমর্থিত ব্যবহারের ক্ষেত্রে একটি দ্রুত ওভারভিউ প্রদান করে:

প্রোফাইলিং API স্থানীয় দূরবর্তী একাধিক কর্মী হার্ডওয়্যার প্ল্যাটফর্ম
টেনসরবোর্ড কেরাস কলব্যাক সমর্থিত সমর্থিত নয় সমর্থিত নয় সিপিইউ, জিপিইউ
tf.profiler.experimental শুরু / স্টপ এপিআই সমর্থিত সমর্থিত নয় সমর্থিত নয় সিপিইউ, জিপিইউ
tf.profiler.experimental client.trace এপিআই সমর্থিত সমর্থিত সমর্থিত সিপিইউ, জিপিইউ, টিপিইউ
প্রসঙ্গ ম্যানেজার API সমর্থিত সমর্থিত নয় সমর্থিত নয় সিপিইউ, জিপিইউ

সর্বোত্তম মডেল কর্মক্ষমতা জন্য সর্বোত্তম অনুশীলন

সর্বোত্তম কর্মক্ষমতা অর্জন করতে আপনার টেনসরফ্লো মডেলগুলির জন্য প্রযোজ্য হিসাবে নিম্নলিখিত সুপারিশগুলি ব্যবহার করুন৷

সাধারণভাবে, ডিভাইসে সমস্ত রূপান্তর সম্পাদন করুন এবং নিশ্চিত করুন যে আপনি আপনার প্ল্যাটফর্মের জন্য cuDNN এবং Intel MKL-এর মতো লাইব্রেরির সর্বশেষ সামঞ্জস্যপূর্ণ সংস্করণ ব্যবহার করছেন।

ইনপুট ডেটা পাইপলাইন অপ্টিমাইজ করুন

আপনার ডেটা ইনপুট পাইপলাইন অপ্টিমাইজ করতে [#input_pipeline_analyzer] থেকে ডেটা ব্যবহার করুন। একটি দক্ষ ডেটা ইনপুট পাইপলাইন ডিভাইসের অলস সময় কমিয়ে আপনার মডেল এক্সিকিউশনের গতিকে ব্যাপকভাবে উন্নত করতে পারে। বিস্তারিত সর্বোত্তম কার্যাভ্যাস নিগমবদ্ধ করার চেষ্টা করুন tf.data API- এর সাথে ভালো পারফরম্যান্স আপনার ডেটা ইনপুট পাইপলাইন আরো কার্যকর করা নির্দেশিকা এবং নিচে।

  • সাধারণভাবে, যেকোনও অপ্সের সমান্তরালকরণ যা ক্রমানুসারে চালানোর প্রয়োজন নেই তা উল্লেখযোগ্যভাবে ডেটা ইনপুট পাইপলাইনকে অপ্টিমাইজ করতে পারে।

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

  • ইনপুট পাইপলাইন একটি কর্মক্ষমতা বাধা কিনা তা পরীক্ষা করতে সিন্থেটিক ডেটা দিয়ে আপনার মডেল চালানোর চেষ্টা করুন।

  • ব্যবহারের tf.data.Dataset.shard বহু-জিপিইউ প্রশিক্ষণের জন্য। থ্রুপুট হ্রাস রোধ করতে ইনপুট লুপে খুব তাড়াতাড়ি শার্ড করা নিশ্চিত করুন। TFRecords-এর সাথে কাজ করার সময়, নিশ্চিত করুন যে আপনি TFRecords-এর তালিকাটি সংক্ষিপ্ত করেছেন এবং TFRecords-এর বিষয়বস্তু নয়।

  • পরিবর্তনশীল এর মান সেট করে বিভিন্ন অপস Parallelize num_parallel_calls ব্যবহার tf.data.AUTOTUNE

  • ব্যবহারের সীমিত বিবেচনা tf.data.Dataset.from_generator যেমন ধীর বিশুদ্ধ TensorFlow অপস সাথে তুলনা করা হয়।

  • ব্যবহারের সীমিত বিবেচনা tf.py_function যেমন ধারাবাহিকভাবে করা যাবে না এবং বিতরণ TensorFlow চালানোর জন্য সমর্থিত নয়।

  • ব্যবহারের tf.data.Options ইনপুট পাইপলাইন স্ট্যাটিক অপ্টিমাইজেশন নিয়ন্ত্রন করতে পারেন।

এছাড়াও পড়া tf.data কর্মক্ষমতা বিশ্লেষণ নির্দেশিকা আপনার ইনপুট পাইপলাইন নিখুঁত উপর আরো নির্দেশের জন্য।

তথ্য বৃদ্ধি অপ্টিমাইজ করুন

যখন ইমেজ তথ্য নিয়ে কাজ করুন, আপনার করা ডেটা বৃদ্ধি ইত্যাদি আলোকসম্পাতের যেমন স্থানিক রূপান্তরের, প্রয়োগের পরে বিভিন্ন ধরনের তথ্য কাস্ট, ফসল তোলা, আবর্তিত দ্বারা আরও দক্ষ

NVIDIA® DALI ব্যবহার করুন

কিছু ক্ষেত্রে, যেমন আপনার যখন উচ্চ GPU থেকে CPU অনুপাত সহ একটি সিস্টেম থাকে, উপরের সমস্ত অপ্টিমাইজেশানগুলি CPU চক্রের সীমাবদ্ধতার কারণে ডেটা লোডারে বাধাগুলি দূর করার জন্য যথেষ্ট নাও হতে পারে।

আপনি কম্পিউটার ভিশন এবং অডিও গভীর শিক্ষা অ্যাপ্লিকেশনের জন্য NVIDIA® জিপিইউ ব্যবহার করছেন, বিবেচনা ডেটা লোড লাইব্রেরি (ব্যবহার যদি দলি তথ্য পাইপলাইন ত্বরান্বিত)।

পরীক্ষা করে দেখুন অপারেশনস: NVIDIA® দলি সমর্থিত দলি অপস একটি তালিকার জন্য ডকুমেন্টেশন।

থ্রেডিং এবং সমান্তরাল এক্সিকিউশন ব্যবহার করুন

সঙ্গে একাধিক CPU- র থ্রেড চালান অপস tf.config.threading এপিআই তাদের দ্রুত চালানো।

TensorFlow স্বয়ংক্রিয়ভাবে ডিফল্টরূপে সমান্তরাল থ্রেডের সংখ্যা সেট করে। TensorFlow ops চালানোর জন্য উপলব্ধ থ্রেড পুল উপলব্ধ CPU থ্রেডের সংখ্যার উপর নির্ভর করে।

ব্যবহার করে একটি একক অপ জন্য সর্বোচ্চ সমান্তরাল speedup নিয়ন্ত্রণ করুন tf.config.threading.set_intra_op_parallelism_threads । মনে রাখবেন যে আপনি যদি সমান্তরালে একাধিক অপ্স চালান, তবে তারা সকলেই উপলব্ধ থ্রেড পুল ভাগ করবে।

আপনি স্বাধীন অ ব্লক অপস (গ্রাফ তাদের মধ্যে কোন নির্দেশ পাথ দিয়ে অপস) থাকে, তাহলে ব্যবহার tf.config.threading.set_inter_op_parallelism_threads একই সময়ে প্রাপ্তিসাধ্য থ্রেড পুল ব্যবহার করে সেগুলি চালানো।

বিবিধ

যখন NVIDIA® জিপিইউ উপর ছোট মডেলের সঙ্গে কাজ করার সময়, আপনি সেট করতে পারেন tf.compat.v1.ConfigProto.force_gpu_compatible=True সব CPU- র tensors বলপূর্বক মডেল কর্মক্ষমতা একটি উল্লেখযোগ্য সাহায্য দিতে CUDA পিনযুক্ত মেমরির বরাদ্দ করা হবে। যাইহোক, অজানা/খুব বড় মডেলের জন্য এই বিকল্পটি ব্যবহার করার সময় সতর্কতা অবলম্বন করুন কারণ এটি হোস্ট (CPU) কর্মক্ষমতাকে নেতিবাচকভাবে প্রভাবিত করতে পারে।

ডিভাইসের কর্মক্ষমতা উন্নত করুন

এখানে এবং বিস্তারিত সর্বোত্তম কার্যাভ্যাস অনুসরণ জিপিইউ কর্মক্ষমতা অপ্টিমাইজেশান গাইড অপ্টিমাইজ অন ডিভাইস TensorFlow মডেল কর্মক্ষমতা করতে।

আপনি যদি NVIDIA GPU ব্যবহার করে থাকেন, তাহলে GPU এবং মেমরির ব্যবহার একটি CSV ফাইলে চালিয়ে লগ করুন:

nvidia-smi
--query-gpu=utilization.gpu,utilization.memory,memory.total,
memory.free,memory.used --format=csv

ডেটা লেআউট কনফিগার করুন

চ্যানেলের তথ্য (যেমন ছবি) ধারণ করে এমন ডেটা নিয়ে কাজ করার সময়, চ্যানেলগুলিকে পছন্দ করতে ডেটা লেআউট বিন্যাসটি অপ্টিমাইজ করুন (NCHW এর উপর NHWC)।

চ্যানেল গত ডেটা ফরম্যাটের উন্নত টেন্সর কোর ব্যবহার ও উল্লেখযোগ্য পারফরম্যান্সের উন্নতি বিশেষত convolutional মডেল যখন, AMP সঙ্গে মিলিত প্রদান। NCHW ডেটা লেআউটগুলি এখনও টেনসর কোর দ্বারা পরিচালিত হতে পারে, তবে স্বয়ংক্রিয় ট্রান্সপোজ অপ্সের কারণে অতিরিক্ত ওভারহেড চালু করে।

আপনি সেট করে NHWC লেআউট পছন্দ করা ডেটা বিন্যাস নিখুত করতে data_format="channels_last" যেমন স্তরগুলির জন্য tf.keras.layers.Conv2D , tf.keras.layers.Conv3D এবং tf.keras.layers.RandomRotation

ব্যবহারের tf.keras.backend.set_image_data_format Keras ব্যাকএন্ড API- এর জন্য ডিফল্ট ডাটা বিন্যাস বিন্যাস সেট করতে।

সর্বোচ্চ L2 ক্যাশে আউট

When working with NVIDIA® GPUs, execute the code snippet below before the training loop to max out the L2 fetch granularity to 128 bytes.

import ctypes

_libcudart = ctypes.CDLL('libcudart.so')
# Set device limit on the current device
# cudaLimitMaxL2FetchGranularity = 0x05
pValue = ctypes.cast((ctypes.c_int*1)(), ctypes.POINTER(ctypes.c_int))
_libcudart.cudaDeviceSetLimit(ctypes.c_int(0x05), ctypes.c_int(128))
_libcudart.cudaDeviceGetLimit(pValue, ctypes.c_int(0x05))
assert pValue.contents.value == 128

Configure GPU thread usage

The GPU thread mode decides how GPU threads are used.

Set the thread mode to gpu_private to make sure that preprocessing does not steal all the GPU threads. This will reduce the kernel launch delay during training. You can also set the number of threads per GPU. Set these values using environment variables.

import os

os.environ['TF_GPU_THREAD_MODE']='gpu_private'
os.environ['TF_GPU_THREAD_COUNT']='1'

Configure GPU memory options

In general, increase the batch size and scale the model to better utilize GPUs and get higher throughput. Note that increasing the batch size will change the model's accuracy so the model needs to be scaled by tuning hyperparameters like the learning rate to meet the target accuracy.

Also, use tf.config.experimental.set_memory_growth to allow GPU memory to grow to prevent all the available memory from being fully allocated to ops that require only a fraction of the memory. This allows other processes which consume GPU memory to run on the same device.

To learn more, check out the Limiting GPU memory growth guidance in the GPU guide to learn more.

Miscellaneous

  • Increase the training mini-batch size (number of training samples used per device in one iteration of the training loop) to the maximum amount that fits without an out of memory (OOM) error on the GPU. Increasing the batch size impacts the model's accuracy—so make sure you scale the model by tuning hyperparameters to meet the target accuracy.

  • Disable reporting OOM errors during tensor allocation in production code. Set report_tensor_allocations_upon_oom=False in tf.compat.v1.RunOptions .

  • For models with convolution layers, remove bias addition if using batch normalization. Batch normalization shifts values by their mean and this removes the need to have a constant bias term.

  • Use TF Stats to find out how efficiently on-device ops run.

  • Use tf.function to perform computations and optionally, enable the jit_compile=True flag ( tf.function(jit_compile=True ). To learn more, go to Use XLA tf.function .

  • Minimize host Python operations between steps and reduce callbacks. Calculate metrics every few steps instead of at every step.

  • Keep the device compute units busy.

  • Send data to multiple devices in parallel.

  • Consider using 16-bit numerical representations , such as fp16 —the half-precision floating point format specified by IEEE—or the Brain floating-point bfloat16 format.

Additional resources

Known limitations

Profiling multiple GPUs on TensorFlow 2.2 and TensorFlow 2.3

TensorFlow 2.2 and 2.3 support multiple GPU profiling for single host systems only; multiple GPU profiling for multi-host systems is not supported. To profile multi-worker GPU configurations, each worker has to be profiled independently. From TensorFlow 2.4 multiple workers can be profiled using the tf.profiler.experimental.client.trace API.

CUDA® Toolkit 10.2 or later is required to profile multiple GPUs. As TensorFlow 2.2 and 2.3 support CUDA® Toolkit versions only up to 10.1, you need to create symbolic links to libcudart.so.10.1 and libcupti.so.10.1 :

sudo ln -s /usr/local/cuda/lib64/libcudart.so.10.2 /usr/local/cuda/lib64/libcudart.so.10.1
sudo ln -s /usr/local/cuda/extras/CUPTI/lib64/libcupti.so.10.2 /usr/local/cuda/extras/CUPTI/lib64/libcupti.so.10.1