کمک به حفاظت از دیواره بزرگ مرجانی با TensorFlow در Kaggle اضافه کردن چالش

عملکرد TensorFlow را با استفاده از Profiler بهینه کنید

این راهنما نحوه استفاده از ابزارهای موجود با TensorFlow Profiler را برای ردیابی عملکرد مدل‌های TensorFlow نشان می‌دهد. شما یاد خواهید گرفت که چگونه عملکرد مدل خود را در هاست (CPU)، دستگاه (GPU) یا ترکیبی از هر دو میزبان و دستگاه(ها) درک کنید.

نمایه سازی به درک مصرف منابع سخت افزاری (زمان و حافظه) عملیات (ops) مختلف TensorFlow در مدل شما و رفع تنگناهای عملکرد کمک می کند و در نهایت باعث می شود مدل سریعتر اجرا شود.

این راهنما نحوه نصب Profiler، ابزارهای مختلف موجود، حالت‌های مختلف نحوه جمع‌آوری داده‌های عملکرد توسط Profiler و برخی از بهترین روش‌های توصیه‌شده برای بهینه‌سازی عملکرد مدل را به شما آموزش می‌دهد.

اگر می خواهید مشخصات عملکرد مدل را در ابر TPU ها، به مراجعه راهنمای ابر TPU .

پیش نیازهای Profiler و GPU را نصب کنید

افزونه Profiler را برای TensorBoard با پیپ نصب کنید. توجه داشته باشید که Profiler به آخرین نسخه های TensorFlow و TensorBoard (>=2.2) نیاز دارد.

pip install -U tensorboard_plugin_profile

برای نمایه در GPU، باید:

  1. دیدار با رانندگان NVIDIA® GPU و الزامات CUDA® جعبه ابزار ذکر شده در TensorFlow GPU نرم افزار مورد نیاز پشتیبانی .
  2. اطمینان حاصل کنید که ابزارهای NVIDIA® CUDA® پروفایل رابط (CUPTI) در مسیر وجود دارد:

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

اگر شما CUPTI در مسیر ندارد، دایرکتوری نصب خود را به prepend کنید $LD_LIBRARY_PATH متغیر محیطی در حال اجرا توسط:

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

سپس، اجرای ldconfig دستور بالا دوباره که به منظور بررسی کتابخانه CUPTI یافت شده است.

مسائل مربوط به امتیازات را حل کنید

هنگامی که شما اجرا پروفایل با CUDA® جعبه ابزار در یک محیط کارگر بارانداز و یا بر روی لینوکس، شما ممکن است مسائل مربوط به امتیازات CUPTI کافی (روبرو می شوند CUPTI_ERROR_INSUFFICIENT_PRIVILEGES ). برو به اسناد توسعه NVIDIA برای کسب اطلاعات بیشتر در مورد چگونه شما می توانید این مسائل بر روی لینوکس را حل کند.

برای حل مسائل مربوط به امتیازات CUPTI در محیط Docker، اجرا کنید

docker run option '--privileged=true'

ابزارهای پروفایل

دسترسی به نیمرخ از تب مشخصات در TensorBoard، که به نظر می رسد تنها پس از برخی از داده ها مدل شما را دستگیر کرده اند.

Profiler دارای مجموعه ای از ابزارها برای کمک به تجزیه و تحلیل عملکرد است:

  • صفحه نمای کلی
  • آنالایزر خط لوله ورودی
  • آمار TensorFlow
  • نمایشگر ردیابی
  • آمار هسته GPU
  • ابزار نمایه حافظه
  • نمایشگر پاد

صفحه نمای کلی

صفحه نمای کلی نمای سطح بالایی از عملکرد مدل شما در طول اجرای نمایه ارائه می دهد. این صفحه یک صفحه نمای کلی برای هاست و همه دستگاه‌ها و توصیه‌هایی برای بهبود عملکرد آموزش مدل به شما نشان می‌دهد. همچنین می توانید هاست های جداگانه را در منوی کشویی Host انتخاب کنید.

صفحه نمای کلی داده ها را به صورت زیر نمایش می دهد:

تصویر

  • عملکرد خلاصه: نمایش خلاصه سطح بالایی از عملکرد مدل خود را. خلاصه عملکرد دو بخش دارد:

    1. تفکیک مرحله-زمان: میانگین زمان گام را به چند دسته تقسیم می کند که زمان صرف شده است:

      • کامپایل: زمان صرف شده برای کامپایل کردن کرنل ها.
      • ورودی: زمان صرف شده برای خواندن داده های ورودی.
      • خروجی: زمان صرف شده برای خواندن داده های خروجی.
      • راه‌اندازی هسته: زمان صرف شده توسط میزبان برای راه‌اندازی هسته‌ها
      • زمان محاسبه میزبان..
      • زمان ارتباط دستگاه به دستگاه
      • زمان محاسبه روی دستگاه
      • بقیه، از جمله سربار پایتون.
    2. Device compute precisions - درصد زمان محاسبه دستگاه را گزارش می دهد که از محاسبات 16 و 32 بیتی استفاده می کند.

  • گام زمان نمودار: یک گراف از زمان گام دستگاه (به میلی ثانیه) بیش از همه مراحل نمونه برداری شد. هر مرحله به دسته بندی های متعدد (با رنگ های مختلف) که در آن زمان صرف می شود، تقسیم می شود. ناحیه قرمز مربوط به قسمتی از مرحله زمانی است که دستگاه‌ها در حالت بیکار در انتظار دریافت داده‌های ورودی از میزبان بودند. منطقه سبز نشان می دهد که دستگاه واقعاً چه مدت زمان کار کرده است.

  • صفحه 10 عملیات TensorFlow بر روی دستگاه (به عنوان مثال GPU): نمایش عملیات روی دستگاه که طولانی ترین بود.

    هر ردیف زمان خود عملیات (به عنوان درصد زمان صرف شده توسط همه عملیات ها)، زمان تجمعی، دسته بندی و نام را نشان می دهد.

  • محیط زیست اجرا: نمایش خلاصه در سطح بالا از محیط زیست مدل اجرا از جمله:

    • تعداد هاست های استفاده شده
    • نوع دستگاه (GPU/TPU).
    • تعداد هسته های دستگاه
  • توصیه برای مرحله بعد: گزارش وقتی که یک مدل ورودی محدود است و ابزار توصیه شما می توانید برای قرار دادن و تنگناها عملکرد مدل عزم استفاده کنید.

تحلیلگر خط لوله ورودی

هنگامی که یک برنامه TensorFlow داده ها را از یک فایل می خواند، از بالای نمودار TensorFlow به صورت خط لوله شروع می شود. فرآیند خواندن به چند مرحله پردازش داده تقسیم می شود که به صورت سری به هم متصل شده اند، که در آن خروجی یک مرحله ورودی مرحله بعدی است. این سیستم از داده ها خواندن است که به نام خط لوله ورودی.

یک خط لوله معمولی برای خواندن رکوردها از پرونده ها دارای مراحل زیر است:

  1. خواندن فایل.
  2. پیش پردازش فایل (اختیاری).
  3. انتقال فایل از هاست به دستگاه

یک خط لوله ورودی ناکارآمد می تواند برنامه شما را به شدت کند کند. یک برنامه در نظر گرفته شده ورودی محدود هنگامی که آن را خرج می کند بخش قابل توجهی از زمان در خط لوله ورودی. از بینش به‌دست‌آمده از تحلیل‌گر خط لوله ورودی برای درک اینکه خط لوله ورودی کجا ناکارآمد است، استفاده کنید.

تحلیلگر خط لوله ورودی فوراً به شما می گوید که آیا برنامه شما محدود به ورودی است یا خیر و شما را در تجزیه و تحلیل سمت دستگاه و میزبان راهنمایی می کند تا گلوگاه های عملکرد را در هر مرحله از خط لوله ورودی رفع اشکال کنید.

راهنمای عملکرد خط لوله ورودی را برای بهترین شیوه های توصیه شده برای بهینه سازی خطوط لوله ورودی داده خود بررسی کنید.

داشبورد خط لوله ورودی

برای باز کردن تجزیه و تحلیل خط لوله ورودی، مشخصات انتخاب کنید، سپس از منوی کرکره ای input_pipeline_analyzer ابزارهای انتخاب کنید.

تصویر

داشبورد شامل سه بخش است:

  1. خلاصه: خلاصه خط لوله ورودی به طور کلی با اطلاعات در مورد اینکه آیا درخواست شما به ورودی محدود و اگر چنین است، چه مقدار.
  2. تجزیه و تحلیل دستگاه های سمت: نمایش جزئیات، نتایج تجزیه و تحلیل دستگاه های سمت، از جمله دستگاه گام به زمان و طیف وسیعی از زمان را صرف دستگاه در حال انتظار برای داده های ورودی در سراسر هسته در هر مرحله.
  3. تجزیه و تحلیل میزبان سمت را نشان می دهد تجزیه و تحلیل دقیق در قسمت میزبان، از جمله یک شکست از زمان پردازش ورودی بر روی میزبان.

خلاصه خط لوله ورودی

خلاصه گزارش اگر برنامه شما ورودی را موظف به ارائه درصد زمان صرف شده در دستگاه منتظر ورودی از میزبان است. اگر از یک خط لوله ورودی استاندارد استفاده می کنید که ابزار دقیقی دارد، ابزار گزارش می دهد که بیشتر زمان پردازش ورودی در کجا سپری شده است.

تجزیه و تحلیل سمت دستگاه

تجزیه و تحلیل سمت دستگاه، بینش هایی را در مورد زمان صرف شده در دستگاه در مقابل میزبان و مدت زمان صرف شده دستگاه در انتظار داده های ورودی از میزبان ارائه می دهد.

  1. زمان مرحله رسم برابر تعداد گام: یک گراف از زمان گام دستگاه (به میلی ثانیه) بیش از همه مراحل نمونه برداری شد. هر مرحله به دسته بندی های متعدد (با رنگ های مختلف) که در آن زمان صرف می شود، تقسیم می شود. ناحیه قرمز مربوط به بخشی از زمان مرحله است که دستگاه‌ها در حالت بیکار در انتظار دریافت داده‌های ورودی از میزبان بودند. ناحیه سبز نشان می دهد که دستگاه واقعاً چه مقدار از زمان کار می کرد.
  2. آمار زمان مرحله: گزارش متوسط، انحراف استاندارد، و دامنه ([حداقل، حداکثر) از زمان گام دستگاه.

تجزیه و تحلیل سمت میزبان

تجزیه و تحلیل میزبان سمت گزارش یک شکست از زمان پردازش ورودی (زمان صرف شده در tf.data عملیات API) بر روی میزبان به چند دسته:

  • خواندن داده ها از فایل ها بر روی تقاضا: زمان در خواندن اطلاعات از فایل های بدون caching، واکشی اولیه، و interleaving به سر برد.
  • خواندن داده ها از فایل های در پیش: زمان صرف خواندن فایل، از جمله ذخیره، واکشی اولیه، و interleaving.
  • داده از پیش پردازش: زمان در عملیات پیش پردازش، مانند رفع فشار تصویر به سر برد.
  • داده نوبت بندی به دستگاه منتقل شوند: زمان صرف قرار دادن داده ها را به صف infeed قبل از انتقال داده ها به دستگاه.

باز ورودی آمار عملیات به بازرسی فعالیت عملیات ورودی فردی و دسته خود را با زمان اجرای شکسته.

تصویر

یک جدول داده منبع با هر ورودی حاوی اطلاعات زیر ظاهر می شود:

  1. عملیات ورودی: نشان می دهد که TensorFlow نام عملیات در op ورودی.
  2. تعداد: نشان می دهد تعداد کل موارد اعدام عملیات در طول دوره پروفایل است.
  3. مجموع مدت زمان (به میلی ثانیه): از مجموع تجمعی از زمان صرف شده در هر یک از این موارد نشان می دهد.
  4. مجموع مدت زمان٪ را نشان می دهد کل زمان در عملیات به عنوان یک بخش از کل زمان صرف شده در پردازش ورودی به سر برد.
  5. مجموع خود زمان (به میلی ثانیه): از مجموع تجمعی از زمان خود را صرف در هر یک از این موارد نشان می دهد. زمان خود در اینجا زمان صرف شده در داخل بدنه تابع را اندازه گیری می کند، به استثنای زمان صرف شده در تابعی که فراخوانی می کند.
  6. مجموع مدت زمان خود. کل زمان خود را به عنوان کسری از کل زمان صرف شده برای پردازش ورودی نشان می دهد.
  7. رده. دسته پردازشی عملیات ورودی را نشان می دهد.

آمار TensorFlow

ابزار TensorFlow Stats عملکرد هر عملیات TensorFlow (op) که در هاست یا دستگاه در طول یک جلسه پروفایل اجرا می شود را نمایش می دهد.

تصویر

این ابزار اطلاعات عملکرد را در دو صفحه نمایش می دهد:

  • پنجره بالایی حداکثر چهار نمودار دایره ای را نمایش می دهد:

    1. توزیع زمان خوداجرای هر عملیات روی هاست.
    2. توزیع زمان خوداجرای هر نوع عملیات روی هاست.
    3. توزیع زمان خوداجرای هر عملیات بر روی دستگاه.
    4. توزیع زمان خوداجرای هر نوع عملیات بر روی دستگاه.
  • پنجره پایین جدولی را نشان می دهد که داده های مربوط به عملیات TensorFlow را با یک ردیف برای هر عملیات و یک ستون برای هر نوع داده گزارش می دهد (مرتب سازی ستون ها با کلیک بر روی عنوان ستون). با کلیک بر روی صادرات به CSV روی دکمه در سمت راست پنجره بالا به صادرات داده ها از این جدول به عنوان یک فایل CSV.

    توجه داشته باشید که:

    • اگر هر عملیاتی دارای عملیات کودک است:

      • کل زمان "انباشته" یک عملیات شامل زمان صرف شده در داخل عملیات کودک می شود.
      • کل زمان "خود" یک عملیات شامل زمان صرف شده در داخل عملیات کودک نمی شود.
    • اگر یک عملیات روی هاست اجرا شود:

      • درصد کل زمان خودگردانی که در دستگاه متحمل شده است، 0 خواهد بود.
      • درصد تجمعی کل زمان خودکار روی دستگاه تا و از جمله این عملیات 0 خواهد بود.
    • اگر یک عملیات روی دستگاه اجرا شود:

      • درصد کل زمان خودگردانی که در میزبان متحمل شده توسط این عملیات 0 خواهد بود.
      • درصد تجمعی کل زمان خود بر روی میزبان تا و از جمله این عملیات 0 خواهد بود.

شما می توانید انتخاب کنید که زمان بیکاری را در نمودارها و جدول دایره ای گنجانده یا حذف کنید.

ردیابی بیننده

نمایشگر ردیابی یک جدول زمانی نمایش می دهد که نشان می دهد:

  • مدت زمان عملیاتی که توسط مدل TensorFlow شما اجرا شده است
  • کدام قسمت از سیستم (میزبان یا دستگاه) یک عملیات را اجرا می کند. به طور معمول، میزبان عملیات ورودی را اجرا می کند، داده های آموزشی را پیش پردازش می کند و آنها را به دستگاه منتقل می کند، در حالی که دستگاه آموزش مدل واقعی را اجرا می کند.

نمایشگر ردیابی به شما این امکان را می دهد که مشکلات عملکرد مدل خود را شناسایی کنید، سپس برای حل آنها اقداماتی را انجام دهید. به عنوان مثال، در یک سطح بالا، می توانید تشخیص دهید که آیا آموزش ورودی یا مدل اکثر زمان را می گیرد. با حفاری، می توانید تشخیص دهید که اجرای کدام عملیات طولانی ترین زمان را می برد. توجه داشته باشید که نمایشگر ردیابی به 1 میلیون رویداد در هر دستگاه محدود شده است.

ردیابی رابط بیننده

هنگامی که نمایشگر ردیابی را باز می کنید، ظاهر می شود که آخرین اجرای شما را نشان می دهد:

تصویر

این صفحه شامل عناصر اصلی زیر است:

  1. پنجره گاهشمار: نشان می دهد عملیات که دستگاه و میزبان اجرا در طول زمان.
  2. پنجره جزئیات را نشان می دهد اطلاعات اضافی برای عملیات در سمت گاهشمار انتخاب شده است.

پنجره Timeline شامل عناصر زیر است:

  1. نوار بالا: شامل کنترل های مختلف کمکی.
  2. محور زمان را نشان می دهد زمان نسبت به آغاز کمیاب است.
  3. بخش و آهنگ برچسب: هر بخش شامل چند آهنگ است یک مثلث در سمت چپ که شما می توانید کلیک کنید و به گسترش و فروپاشی بخش و. برای هر عنصر پردازشی در سیستم یک بخش وجود دارد.
  4. ابزار انتخاب: شامل ابزار های مختلف برای برقراری ارتباط با بیننده اثری مانند زوم، پان، انتخاب، و زمان. از ابزار Timeming برای علامت گذاری یک بازه زمانی استفاده کنید.
  5. رویدادها: این نشان می دهد زمان که در طی آن یک op اعدام شد و یا مدت زمان متا حوادث، از جمله مراحل آموزش.
بخش ها و آهنگ ها

نمایشگر ردیابی شامل بخش‌های زیر است:

  • یکی از بخش برای هر گره دستگاه، نشاندار شده با تعداد تراشه دستگاه و گره دستگاه داخل تراشه (به عنوان مثال، /device:GPU:0 (pid 0) ). هر بخش گره دستگاه شامل آهنگ های زیر است:
    • مرحله: مدت زمان مراحل آموزش که بر روی دستگاه در حال اجرا بودند را نشان می دهد
    • TensorFlow عملیات: نشان می دهد عملیات اجرا بر روی دستگاه
    • XLA عملیات: نشان می دهد XLA عملیات (OPS) بودند که بر روی دستگاه صورت XLA کامپایلر استفاده می شود (هر عملیات TensorFlow به یک یا چند عملیات XLA ترجمه کامپایلر XLA ترجمه عملیات XLA به کد که قابل اجرا بر روی دستگاه.).
  • یکی از بخش ها برای موضوع در حال اجرا در CPU دستگاه میزبان، برچسب "میزبان موضوعات". این بخش شامل یک آهنگ برای هر رشته CPU است. توجه داشته باشید که می توانید اطلاعات نمایش داده شده در کنار برچسب های بخش را نادیده بگیرید.
مناسبت ها

رویدادهای درون جدول زمانی در رنگ های مختلف نمایش داده می شوند. خود رنگ ها معنای خاصی ندارند.

نمایشگر ردیابی همچنین می‌تواند آثار فراخوانی تابع پایتون را در برنامه TensorFlow شما نمایش دهد. در صورت استفاده از tf.profiler.experimental.start API، شما می توانید Python فعال ردیابی با استفاده از ProfilerOptions namedtuple در هنگام شروع پروفایل. روش دیگر، اگر شما با استفاده از حالت نمونه برداری برای پروفایل، شما می توانید سطح ردیابی با استفاده از گزینه های کرکره ای در ضبط مشخصات محاوره ای را انتخاب کنید.

تصویر

آمار هسته GPU

این ابزار آمار عملکرد و عملیات اولیه را برای هر هسته شتاب‌دهنده GPU نشان می‌دهد.

تصویر

این ابزار اطلاعات را در دو صفحه نمایش می دهد:

  • پنجره بالایی نمودار دایره ای را نشان می دهد که هسته های CUDA را نشان می دهد که بیشترین زمان کل سپری شده را دارند.

  • در پنجره پایین جدولی با داده های زیر برای هر جفت هسته عملیات منحصر به فرد نمایش داده می شود:

    • رتبه ای به ترتیب نزولی کل مدت زمان GPU سپری شده که بر اساس جفت هسته عملیات گروه بندی شده است.
    • نام هسته راه اندازی شده.
    • تعداد رجیسترهای GPU استفاده شده توسط هسته.
    • اندازه کل حافظه مشترک (استاتیک + پویا مشترک) استفاده شده در بایت.
    • بعد بلوک بیان شده به عنوان blockDim.x, blockDim.y, blockDim.z .
    • ابعاد شبکه به عنوان بیان gridDim.x, gridDim.y, gridDim.z .
    • آیا عملیات واجد شرایط است که استفاده از تانسور هسته .
    • آیا هسته حاوی دستورالعمل های Tensor Core است یا خیر.
    • نام عملیاتی که این هسته را راه اندازی کرد.
    • تعداد وقوع این جفت kernel-op.
    • کل زمان GPU سپری شده بر حسب میکروثانیه.
    • میانگین زمان GPU سپری شده بر حسب میکروثانیه.
    • حداقل زمان GPU سپری شده بر حسب میکروثانیه.
    • حداکثر زمان GPU سپری شده بر حسب میکروثانیه.

ابزار نمایه حافظه

حافظه مشخصات ابزار نظارت و استفاده از حافظه دستگاه خود را در طول فاصله پروفایل است. شما می توانید از این ابزار برای موارد زیر استفاده کنید:

  • با مشخص کردن حداکثر میزان مصرف حافظه و تخصیص حافظه مربوطه به عملیات TensorFlow، مشکلات مربوط به حافظه (OOM) را رفع اشکال کنید. شما همچنین می توانید اشکال زدایی مسائل OOM که ممکن است بوجود می آیند که شما اجرا چند اجاره استنتاج است.
  • اشکال زدایی مشکلات تکه تکه شدن حافظه

ابزار نمایه حافظه داده ها را در سه بخش نمایش می دهد:

  1. خلاصه مشخصات حافظه
  2. نمودار جدول زمانی حافظه
  3. جدول شکست حافظه

خلاصه مشخصات حافظه

این بخش خلاصه سطح بالایی از مشخصات حافظه برنامه TensorFlow شما را مطابق شکل زیر نمایش می دهد:

خلاصه مشخصات حافظه دارای شش قسمت است:

  1. ID حافظه: کرکره که لیست تمام سیستم های حافظه دستگاه موجود است. سیستم حافظه ای را که می خواهید مشاهده کنید از منوی بازشو انتخاب کنید.
  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) .

نمودار جدول زمانی حافظه

این بخش نموداری از میزان استفاده از حافظه (در گیگابایت) و درصد تکه تکه شدن در مقابل زمان (بر حسب میلی ثانیه) را نشان می دهد.

تصویر

محور X نشان‌دهنده جدول زمانی (بر حسب میلی‌ثانیه) بازه نمایه‌سازی است. محور Y در سمت چپ نشان دهنده میزان استفاده از حافظه (در GiBs) و محور Y در سمت راست نشان دهنده درصد تکه تکه شدن است. در هر نقطه از زمان در محور X، کل حافظه به سه دسته تقسیم می شود: پشته (قرمز)، پشته (به رنگ نارنجی)، و آزاد (به رنگ سبز). برای مشاهده جزئیات مربوط به رویدادهای تخصیص/تخصیص حافظه در آن نقطه مانند زیر، ماوس را روی یک مهر زمانی خاص نگه دارید:

تصویر

پنجره پاپ آپ اطلاعات زیر را نمایش می دهد:

  • برچسب زمان (MS): محل این رویداد انتخاب در جدول زمانی.
  • رویداد: نوع رویداد (تخصیص و یا آزادسازی).
  • requested_size (GiBs): مقدار حافظه درخواست شده است. این یک عدد منفی برای رویدادهای واگذاری خواهد بود.
  • allocation_size (GiBs): مقدار واقعی حافظه اختصاص داده است. این یک عدد منفی برای رویدادهای واگذاری خواهد بود.
  • tf_op: عملیات TensorFlow که درخواست تخصیص / آزادسازی.
  • step_id: گام آموزش در است که این رویداد رخ داده است.
  • region_type: نوع موجودیت داده که این حافظه اختصاص داده است برای. مقادیر ممکن عبارتند از temp برای موقت، output برای فعال و شیب، و persist / dynamic وزن و ثابت.
  • data_type: نوع عنصر تانسور (به عنوان مثال، uint8 برای 8 بیتی عدد صحیح بدون علامت).
  • tensor_shape: شکل تانسور اختصاص داده / deallocated.
  • memory_in_use (GiBs): حافظه کل است که در استفاده در این نقطه از زمان.

جدول خرابی حافظه

این جدول تخصیص حافظه فعال را در نقطه اوج استفاده از حافظه در بازه پروفایل نشان می دهد.

تصویر

برای هر TensorFlow Op یک ردیف وجود دارد و هر سطر دارای ستون های زیر است:

  • نام عملیات: نام عملیات TensorFlow است.
  • حجم تخصیص (GiBs): مقدار کل حافظه اختصاص داده شده به این عملیات.
  • اندازه های درخواست شده (GiBs): مقدار کل حافظه درخواست برای این عملیات.
  • ظهور: تعداد از بودجه لازم برای این عملیات.
  • نوع منطقه: نوع نهاد داده که این حافظه اختصاص داده است برای. مقادیر ممکن عبارتند از temp برای موقت، output برای فعال و شیب، و persist / dynamic وزن و ثابت.
  • نوع داده ها: نوع عنصر تانسور.
  • شکل: شکل تانسورها اختصاص داده است.

نمایشگر پاد

ابزار Pod Viewer تفکیک یک مرحله آموزشی را در همه کارگران نشان می دهد.

تصویر

  • پنجره بالایی دارای یک نوار لغزنده برای انتخاب شماره مرحله است.
  • پنجره پایین یک نمودار ستونی انباشته را نشان می دهد. این نمای سطح بالایی از دسته بندی های مرحله-زمان شکسته شده است که بر روی یکدیگر قرار گرفته اند. هر ستون انباشته نشان دهنده یک کارگر منحصر به فرد است.
  • وقتی ماوس را روی یک ستون انباشته نگه می‌دارید، کارت سمت چپ جزئیات بیشتری در مورد تفکیک مرحله نشان می‌دهد.

تجزیه و تحلیل تنگنای داده tf

tf.data ابزار تجزیه و تحلیل تنگنا به طور خودکار تشخیص تنگناها در tf.data خطوط لوله ورودی در برنامه شما و توصیه در مورد چگونگی رفع آنها فراهم می کند. آن را با هر برنامه با استفاده از کار tf.data صرف نظر از پلت فرم (CPU / GPU / TPU). تجزیه و تحلیل و توصیه های آن در این است راهنمای .

با دنبال کردن مراحل زیر یک گلوگاه را تشخیص می دهد:

  1. میزبانی با بیشترین ورودی را پیدا کنید.
  2. یافتن کمترین اجرای یک tf.data خط لوله ورودی.
  3. گراف خط لوله ورودی را از ردیابی پروفایلر بازسازی کنید.
  4. مسیر بحرانی را در نمودار خط لوله ورودی پیدا کنید.
  5. کندترین تحول در مسیر بحرانی را به عنوان یک گلوگاه شناسایی کنید.

تجزیه و تحلیل عملکرد خلاصه، خلاصه ای از تمام ورودی خطوط لوله و ورودی خط لوله نمودار: 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)

نام های طولانی برای تکرار کننده ها از مجموعه داده فوق به صورت زیر خواهد بود:

نوع تکرار کننده نام بلند
دامنه تکرار کننده:: دسته:: تکرار:: نقشه:: محدوده
نقشه تکرار کننده:: دسته:: تکرار:: نقشه
تکرار Iterator::Batch::Repeat
دسته ای تکرار کننده:: دسته ای

خلاصه تمام خطوط لوله ورودی

تصویر

این بخش خلاصه ای از تمام خطوط لوله ورودی در همه میزبان ها را ارائه می دهد. به طور معمول یک خط لوله ورودی وجود دارد. هنگام استفاده از استراتژی توزیع، یک خط لوله ورودی میزبان در حال اجرا برنامه وجود دارد tf.data کد و چند خط لوله ورودی دستگاه بازیابی داده ها از خط لوله ورودی میزبان و انتقال آن به دستگاه.

برای هر خط لوله ورودی، آمار زمان اجرای خود را نشان می دهد. اگر بیش از 50 میکروثانیه طول بکشد، یک تماس کند حساب می شود.

نمودار خط لوله ورودی

تصویر

این بخش نمودار خط لوله ورودی را با اطلاعات زمان اجرا نشان می دهد. می‌توانید از «Host» و «Input Pipeline» برای انتخاب میزبان و خط لوله ورودی استفاده کنید. اعدام خط لوله ورودی توسط زمان اجرای به ترتیب نزولی است که شما می توانید انتخاب کنید با استفاده از رتبه کرکره طبقه بندی شده اند.

تصویر

گره های موجود در مسیر بحرانی دارای خطوط برجسته هستند. گره گلوگاه، که گرهی با طولانی ترین زمان خود در مسیر بحرانی است، دارای یک طرح کلی قرمز است. سایر گره های غیر بحرانی دارای خطوط خاکستری خط چین هستند.

در هر گره، زمان شروع نشان می دهد زمان شروع اجرای. همان گره ممکن است اعدام چندین بار، برای مثال، اگر یک وجود دارد Batch عملیات در خط لوله ورودی. اگر چندین بار اجرا شود، زمان شروع اولین اجرا است.

مجموع مدت زمان زمان دیوار از اعدام است. اگر چندین بار اجرا شود، مجموع دفعات دیوار تمام اجراها است.

زمان خود مجموع مدت زمان بدون زمان همپوشانی با گره فرزند فوری آن است.

"# تماس" تعداد دفعاتی است که خط لوله ورودی اجرا می شود.

جمع آوری داده های عملکرد

TensorFlow Profiler فعالیت های میزبان و ردپای GPU مدل TensorFlow شما را جمع آوری می کند. می‌توانید Profiler را برای جمع‌آوری داده‌های عملکرد از طریق حالت برنامه‌نویسی یا حالت نمونه‌برداری پیکربندی کنید.

پروفایل 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 API تابع

    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 برای شروع یک سرور gRPC با مدل TensorFlow خود را اجرا کنید. پس از شروع سرور gRPC و در حال اجرا مدل خود را، شما می توانید مشخصات از طریق ضبط دکمه مشخصات در این افزونه مشخصات TensorBoard گرفتن. از اسکریپت در بخش Install profiler در بالا برای راه‌اندازی یک نمونه 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)
    

با استفاده از ضبط مشخصات محاوره برای مشخص:

  • فهرستی از نشانی‌های اینترنتی خدمات نمایه یا نام‌های TPU که با کاما محدود شده‌اند.
  • مدت زمان پروفایل
  • سطح ردیابی فراخوانی دستگاه، میزبان و تابع پایتون.
  • چند بار می‌خواهید که در صورت عدم موفقیت، نمایه‌گر دوباره سعی کند نمایه‌ها را بگیرد.

پروفایل کردن حلقه های آموزشی سفارشی

به نمایه حلقه آموزش سفارشی در کد TensorFlow خود، ابزار حلقه آموزش با tf.profiler.experimental.Trace API به علامت مرزهای گام برای کنترل زبری.

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)

این کار تجزیه و تحلیل عملکرد مبتنی بر مرحله Profiler را فعال می کند و باعث می شود که رویدادهای مرحله در نمایشگر ردیابی نشان داده شوند.

اطمینان حاصل کنید که شامل تکرار مجموعه داده در 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 پروفایل در ماشینی متفاوت از جایی که مدل شما در حال اجرا است فراخوانی می شود، به عنوان مثال، در یک Cloud TPU.
  • پروفایل کارگران متعدد: شما می توانید چندین ماشین در هنگام استفاده از قابلیت های آموزش توزیع TensorFlow مشخصات.
  • پلت فرم سخت افزار: پردازنده مشخصات، GPU ها و TPU ها.

جدول زیر یک نمای کلی از موارد استفاده با پشتیبانی از TensorFlow ذکر شده در بالا ارائه می دهد:

پروفایل API محلی از راه دور کارگران متعدد پلتفرم های سخت افزاری
TensorBoard Keras Callback پشتیبانی پشتیبانی نشده پشتیبانی نشده CPU، GPU
tf.profiler.experimental START / STOP API پشتیبانی پشتیبانی نشده پشتیبانی نشده CPU، GPU
tf.profiler.experimental client.trace API پشتیبانی پشتیبانی پشتیبانی CPU، GPU، TPU
API مدیر زمینه پشتیبانی پشتیبانی نشده پشتیبانی نشده CPU، GPU

بهترین روش ها برای عملکرد بهینه مدل

برای دستیابی به عملکرد مطلوب، از توصیه های زیر برای مدل های TensorFlow خود استفاده کنید.

به طور کلی، تمام تغییرات را روی دستگاه انجام دهید و اطمینان حاصل کنید که از آخرین نسخه سازگار کتابخانه‌هایی مانند cuDNN و Intel MKL برای پلتفرم خود استفاده می‌کنید.

بهینه سازی خط لوله داده های ورودی

از داده های [#input_pipeline_analyzer] برای بهینه سازی خط لوله ورودی داده خود استفاده کنید. یک خط لوله ورودی داده کارآمد می تواند سرعت اجرای مدل شما را با کاهش زمان بیکاری دستگاه به شدت بهبود بخشد. سعی کنید به ترکیب بهترین شیوه ها در جزئیات عملکرد بهتر با API tf.data راهنمای و در زیر به خط لوله داده های ورودی خود را کارآمد تر.

  • به طور کلی، موازی کردن هر عملیاتی که نیازی به اجرای متوالی ندارد می تواند خط لوله ورودی داده را به طور قابل توجهی بهینه کند.

  • در بسیاری از موارد، به تغییر ترتیب برخی تماس ها یا تنظیم آرگومان ها به گونه ای کمک می کند که برای مدل شما بهترین کار را داشته باشد. در حین بهینه‌سازی خط لوله داده‌های ورودی، تنها بارگذار داده را بدون مراحل آموزش و انتشار پس‌انداز، محک بزنید تا تأثیر بهینه‌سازی‌ها به طور مستقل کمیت شود.

  • سعی کنید مدل خود را با داده های مصنوعی اجرا کنید تا بررسی کنید که آیا خط لوله ورودی یک گلوگاه عملکرد است یا خیر.

  • استفاده از tf.data.Dataset.shard برای آموزش چند پردازنده گرافیکی. اطمینان حاصل کنید که خیلی زود در حلقه ورودی خرد می کنید تا از کاهش توان جلوگیری شود. هنگام کار با TFRecords، مطمئن شوید که لیست TFRecords را به اشتراک می گذارید و نه محتوای TFRecords.

  • موازی چند عملیات به صورت پویا تنظیم مقدار 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® GPU ها برای بینایی کامپیوتر و برنامه های کاربردی یادگیری عمیق صوتی، استفاده از در حال بارگذاری اطلاعات کتابخانه ( DALI ) برای سرعت بخشیدن به خط لوله داده است.

را بررسی کنید عملیات: NVIDIA® DALI اسناد و مدارک برای یک لیست از عملیات DALI پشتیبانی می شود.

از threading و اجرای موازی استفاده کنید

عملیات اجرا بر روی چند موضوعات CPU با tf.config.threading API برای اجرای آنها سریعتر است.

TensorFlow به طور خودکار تعداد رشته های موازی را به طور پیش فرض تنظیم می کند. Thread Pool موجود برای اجرای عملیات TensorFlow به تعداد رشته‌های CPU موجود بستگی دارد.

کنترل حداکثر تسریع موازی برای عملیات واحد با استفاده از tf.config.threading.set_intra_op_parallelism_threads . توجه داشته باشید که اگر چندین عملیات را به صورت موازی اجرا کنید، همه آنها از thread pool موجود به اشتراک خواهند گذاشت.

اگر شما مستقل غیر مسدود کردن عملیات (عملیات با مسیر حرکت به بین آنها در نمودار)، استفاده از tf.config.threading.set_inter_op_parallelism_threads به آنها اجرا به صورت همزمان با استفاده از استخر موضوع موجود است.

متفرقه

در هنگام کار با مدل های کوچکتر در NVIDIA® GPU ها، شما می توانید راه tf.compat.v1.ConfigProto.force_gpu_compatible=True به زور همه تانسورها CPU با CUDA حافظه دوخته اختصاص داده شود به افزایش قابل توجهی به عملکرد مدل. با این حال، هنگام استفاده از این گزینه برای مدل‌های ناشناخته/بسیار بزرگ احتیاط کنید زیرا ممکن است بر عملکرد میزبان (CPU) تأثیر منفی بگذارد.

بهبود عملکرد دستگاه

دنبال بهترین شیوه در اینجا و در جزئیات راهنمای بهینه سازی عملکرد GPU برای بهینه سازی بر روی دستگاه عملکرد مدل TensorFlow.

اگر از پردازنده‌های گرافیکی NVIDIA استفاده می‌کنید، با اجرای:

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

پیکربندی طرح بندی داده ها

هنگام کار با داده‌هایی که حاوی اطلاعات کانال هستند (مانند تصاویر)، قالب طرح داده‌ها را بهینه کنید تا آخرین کانال‌ها را ترجیح دهید (NHWC بر NCHW).

فرمت های داده کانال آخرین بهبود تانسور هسته بهره برداری و ارائه بهبود قابل توجه عملکرد به خصوص در مدل های کانولوشن با AMP همراه است. طرح‌بندی داده‌های NCHW هنوز هم می‌تواند توسط Tensor Cores اجرا شود، اما به دلیل عملیات انتقال خودکار، سربار اضافی را معرفی می‌کند.

شما می توانید طرح داده بهینه سازی ترجیح می دهند به طرح بندی NHWC با تنظیم data_format="channels_last" برای لایه های مانند tf.keras.layers.Conv2D ، tf.keras.layers.Conv3D و tf.keras.layers.RandomRotation .

استفاده از tf.keras.backend.set_image_data_format به تنظیم پیش فرض فرمت طرح داده برای بخش مدیریت API Keras.

حافظه نهان 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