این صفحه به‌وسیله ‏Cloud Translation API‏ ترجمه شده است.
Switch to English

Optimize TensorFlow performance using the Profiler

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

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

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

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

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

با بارگیری و اجرای اسکریپت install_and_run.py از مخزن GitHub ، Profiler را نصب کنید .

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

  1. CUDA® Toolkit 10.1 یا جدیدتر را نصب کنید . CUDA® Toolkit 10.1 فقط از پروفایل های GPU پشتیبانی می کند. برای مشاهده چندین GPU ، به پروفایل های GPU متعدد مراجعه کنید. اطمینان حاصل کنید که نسخه درایور CUDA® که نصب می کنید حداقل 440.33 برای لینوکس یا 441.22 برای ویندوز است.
  2. اطمینان حاصل کنید که 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 پیدا شده است.

GPU های متعدد پروفایل

TensorFlow در حال حاضر از پروفایل های چند گرافیکی GPU فقط برای سیستم های میزبان منفرد پشتیبانی می کند. پروفایل پروفایل GPU چندگانه برای سیستم های چند میزبان در حال حاضر پشتیبانی نمی شود. جعبه ابزار CUDA® 10.2 یا بالاتر را برای پروفایل چندین GPU نصب کنید. از آنجا که TensorFlow نسخه های CUDA® Toolkit را فقط تا 10.1 پشتیبانی می کند ، پیوندهای نمادین به libcudart.so.10.1 و 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

برای نمایه سازی تنظیمات GPU چند کاره ، کارگران را به صورت مستقل نمایان کنید.

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

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

برای حل مشکلات امتیاز CUPTI در یک محیط داکر ، اجرا کنید

docker run option '--privileged=true'

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

از برگه Profile در TensorBoard به Profiler دسترسی داشته باشید که فقط پس از گرفتن برخی از داده های مدل ظاهر می شود.

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

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

صفحه نمای کلی

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

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

تصویر

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

    1. تقسیم گام به گام - میانگین زمان قدم را به چند دسته تقسیم می کند:

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

  • نمودار گام به گام - نمودار تمام وقت مرحله دستگاه (در میلی ثانیه) را در تمام مراحل نمونه برداری نشان می دهد. هر مرحله به چند دسته (با رنگ های مختلف) که در آن زمان سپری می شود شکسته شده است. منطقه قرمز مربوط به بخشی از زمانی است که دستگاهها در حالت بیکار نشسته بودند و منتظر اطلاعات ورودی از میزبان بودند. فضای سبز نشان می دهد که در واقع چه مدت دستگاه کار می کند

  • 10 عملیات برتر TensorFlow در دستگاه - گزینه های دستگاه را که طولانی ترین طول را نشان می دهد ، نشان می دهد.

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

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

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

آنالایزر لوله ورودی

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

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

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

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

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

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

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

برای باز کردن آنالایزر خط لوله ورودی ، Profile را انتخاب کنید ، سپس از قسمت drop Tools ( ورودی) Tools_pipeline_analyzer را انتخاب کنید.

تصویر

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

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

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

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

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

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

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

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

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

  • خواندن داده ها از پرونده ها در صورت تقاضا - مدت زمان صرف شده برای خواندن داده ها از پرونده ها بدون حافظه پنهان ، تنظیم مجدد و درهم آمیختن
  • خواندن داده ها از پرونده ها از قبل - مدت زمان صرف خواندن پرونده ها ، از جمله حافظه پنهان ، تنظیم مجدد و درهم آمیختن
  • پردازش داده ها - مدت زمان صرف شده برای پیش پردازش گزینه ها ، مانند رفع فشار تصویر
  • ذخیره داده ها برای انتقال به دستگاه - مدت زمانی که داده را قبل از انتقال داده ها به دستگاه قرار می دهید ، وارد صف می شوید

Input Op Statistics را باز کنید تا آمار مربوط به گزینه های ورودی فردی و دسته بندی های آنها در زمان اجرا تقسیم شود.

تصویر

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

  1. ورودی ورودی - نام گزینه TensorFlow را از ورودی ورودی نشان می دهد
  2. Count - تعداد کل موارد اجرای عملیات در طول دوره پروفایل را نشان می دهد
  3. Total Time (در ms) - مجموع زمان صرف شده برای هر یک از این موارد را نشان می دهد
  4. Total Time٪ - کل زمان صرف شده برای کارخانه را به عنوان بخشی از کل زمان صرف شده در پردازش ورودی را نشان می دهد
  5. Total Self Time (در ms) - مجموع تجمعی زمان خود را که برای هر یک از این موارد صرف شده است نشان می دهد. زمان خود در اینجا زمان صرف شده در بدن عملکرد را اندازه می گیرد ، به استثنای زمان صرف شده در عملکردی که آن را فراخوانی می کند.
  6. زمان کل خود٪ . کل وقت خود را به عنوان بخشی از کل زمان صرف شده برای پردازش ورودی نشان می دهد
  7. دسته دسته پردازش گزینه ورودی را نشان می دهد

آمار TensorFlow

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

تصویر

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

  • قسمت بالای صفحه تا چهار نمودار پای نشان داده شده است:

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

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

    • در صورت وجود هر گزینه گزینه های کودک:

      • کل زمان "جمع شده" یک عملكرد شامل زمان صرف شده در آپشن های كودك است

      • کل زمان "خود" در یک عمل شامل زمان صرف شده در آپشن های کودک نمی شود

    • اگر op روی میزبان اجرا شود:

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

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

می توانید زمان نمودار کار را در نمودارهای پای و جدول قرار دهید.

ردیاب ردیابی

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

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

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

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

هنگامی که بیننده ردیابی را باز می کنید ، به نظر می رسد جدیدترین اجرای شما را نشان می دهد:

تصویر

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

  1. صفحه جدول زمانی - گزینه هایی را نشان می دهد که دستگاه و میزبان با گذشت زمان اجرا شوند
  2. صفحه جزئیات - اطلاعات اضافی را برای گزینه های انتخاب شده در صفحه Timeline نشان می دهد

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

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

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

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

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

ردیاب ردیاب همچنین می تواند اثری از تماسهای عملکرد پایتون را در برنامه TensorFlow شما نشان دهد. اگر از API tf.profiler.experimental.start() استفاده می کنید ، می توانید هنگام شروع پروفایل ، ردیابی پایتون را با استفاده از ProfilerOptions navêtuple فعال کنید. روش دیگر ، در صورت استفاده از حالت نمونه برداری برای پروفایل ، می توانید با استفاده از گزینه های کشویی در گفتگوی Capture Profile ، سطح ردیابی را انتخاب کنید.

تصویر

آمار هسته GPU

این ابزار آمارهای عملکردی را نشان می دهد و گزینه اصلی آن برای هر هسته پردازنده شتاب یافته است.

تصویر

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

  • در قسمت فوقانی نمودار پایینی نمایش داده شده است که هسته های CUDA را که بیشترین زمان از بین رفته را نشان می دهد

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

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

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

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

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

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

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

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

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

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

  1. Memory ID - کشویی که لیست تمام سیستم های حافظه دستگاه موجود را نشان می دهد. سیستم حافظه مورد نظر برای دیدن را از قسمت کشویی انتخاب کنید
  2. # جابجایی - تعداد تخصیص حافظه ساخته شده در بازه پروفایل
  3. #Delocation - تعداد جابجایی های حافظه در فاصله پروفایل
  4. ظرفیت حافظه - ظرفیت کل (در GiB) سیستم حافظه ای که شما انتخاب می کنید
  5. طریقه استفاده Peak - استفاده از حافظه اوج (در GiBs) از زمان اجرای مدل
  6. طریقه استفاده حافظه - اوج استفاده از حافظه (در GiB) در فاصله پروفایل. این قسمت شامل زیر فیلدهای زیر است:
    1. Timestamp - علامت زمانی از زمان استفاده حداکثر حافظه در نمودار Timeline
    2. Stack Reservation - مقدار حافظه ذخیره شده در پشته (در GiBs)
    3. Heap Allocation - مقدار حافظه اختصاص داده شده بر روی پشته (در GiBs)
    4. حافظه رایگان - مقدار حافظه رایگان (در GiB). ظرفیت حافظه ، مجموعه ای از مجموعه های Stack Reservation ، Heap Allocation و Memory Free است
    5. قطعه قطعه شدن - درصد قطعه قطعه شدن (پایین تر بهتر است). این به صورت درصدی از (1 - اندازه بزرگترین بخش حافظه رایگان / کل حافظه رایگان) محاسبه می شود

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

در این بخش نقشه استفاده از حافظه (در GiBs) و درصد قطعه قطعه شدن در مقابل زمان (در ms) نمایش داده می شود.

تصویر

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

تصویر

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

  • timestamp (ms) - مکان رویداد انتخاب شده در جدول زمانی
  • رویداد - نوع رویداد (تخصیص یا تفکیک مکان)
  • request_size (GiBs) - مقدار حافظه درخواستی. این یک عدد منفی برای رویدادهای تغییر مکان خواهد بود
  • alignation_size (GiBs) - مقدار واقعی حافظه اختصاص یافته است. این یک عدد منفی برای رویدادهای تغییر مکان خواهد بود
  • tf_op - TensorFlow Op که درخواست تخصیص / جابجایی می کند
  • step_id - مرحله آموزشی که در آن این رویداد رخ داده است
  • region_type - نوع موجودیت داده ای که این حافظه اختصاص داده شده برای آن است. مقادیر ممکن عبارتند از temp برای موقت، output برای فعال و شیب، و persist / dynamic وزن و ثابت
  • data_type - نوع عنصر تانسور (به عنوان مثال ، uint8 برای عدد صحیح 8 بیتی بدون امضا)
  • tensor_shape - شکل تانسور به صورت اختصاصی / جابجایی است
  • memor_in_use (GiBs) - کل حافظه مورد استفاده در این زمان از زمان

جدول تجزیه حافظه

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

تصویر

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

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

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

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

پروفایل های API

می توانید از API های زیر برای انجام پروفایل استفاده کنید.

# 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])
  • حالت برنامه نویسی با استفاده از API عملکرد 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() تا یک سرور gRPC را با استفاده از مدل TensorFlow خود اجرا کنید. پس از راه اندازی سرور gRPC و اجرای مدل خود ، می توانید یک پروفایل را از طریق دکمه Capture Profile در افزونه مشخصات TensorBoard ضبط کنید. از اسکریپت در بخش نصب پروفایل استفاده کنید تا در صورت عدم اجرا ، نمونه TensorBoard را راه اندازی کنید.

    به عنوان مثال،

# Start a gRPC server at port 6009
tf.profiler.experimental.server.start(6009)
# ... TensorFlow program ...

برای مشخص کردن از گفتگوی Capture Profile استفاده کنید:

  • URL خدمات نمایه یا نام TPU
  • مدت زمان پروفایل
  • سطح ردیابی تماس دستگاه ، میزبان و عملکرد پایتون
  • چند بار می خواهید که Profiler اگر در ابتدا ناموفق بود ، مجدداً از ضبط پروفایل استفاده کند

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

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

جدول زیر یک مرور کلی است که از موارد استفاده فوق توسط API های مختلف پروفایل در TensorFlow 2.3 پشتیبانی می شود:

API پروفایل محلی از راه دور چند کارگر سکوهای سخت افزاری
پاسخ به تماس TensorBoard Keras پشتیبانی پشتیبانی نشده پشتیبانی نشده CPU ، GPU
API عملکرد tf.experimental.profiler پشتیبانی پشتیبانی نشده پشتیبانی نشده CPU ، GPU
API مدیر متن پشتیبانی پشتیبانی نشده پشتیبانی نشده CPU ، GPU
در صورت تقاضای API پشتیبانی نشده پشتیبانی پشتیبانی محدود CPU ، GPU ، TPU

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

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

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

خط لوله داده ورودی را بهینه کنید

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

  • داده های prefetch
  • استخراج داده ها را موازی کنید
  • تغییر داده ها را موازی کنید
  • داده حافظه پنهان در حافظه
  • توابع تعریف شده توسط کاربر را بردار کنید
  • هنگام استفاده از تحولات ، میزان استفاده از حافظه را کاهش دهید

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

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

  • افزایش اندازه آموزش مینی دسته ای (تعداد نمونه های آموزش استفاده شده در هر دستگاه در یک تکرار حلقه تمرین)
  • از TF Stats استفاده کنید تا بدانید که گزینه های دستگاه چگونه کار می کنند
  • استفاده از tf.function برای انجام محاسبات و به صورت اختیاری، فعال کردن experimental_compile پرچم
  • عملیات پایتون میزبان را بین مراحل و به حداقل رساندن تماس های تلفنی به حداقل برسانید. به جای هر مرحله ، معیارها را محاسبه کنید
  • واحد محاسبه دستگاه را مشغول نگه دارید
  • ارسال داده ها به صورت موازی به چندین دستگاه
  • برای ترجیح دادن کانالها ابتدا طرح داده را بهینه کنید (به عنوان مثال NCHW از NHWC). برخی از پردازنده های گرافیکی خاص مانند NVIDIA® V100 با یک طرح داده NHWC عملکرد بهتری دارند.
  • استفاده از بازنمایی های عددی 16 بیتی مانند fp16 ، فرمت نقطه شناور نیمه دقیق مشخص شده توسط IEEE یا فرمت bfloat16 از نقطه شناور Brain را در نظر بگیرید.
  • در نظر بگیرید از API Precision Mix Keras استفاده کنید
  • هنگام آموزش در GPU ، از TensorCore استفاده کنید. هسته های GPU وقتی از دقت Fp16 استفاده می کنند و ابعاد ورودی / خروجی توسط 8 یا 16 تقسیم می شوند (برای int8)

منابع اضافی