ترجمت واجهة Cloud Translation API‏ هذه الصفحة.
Switch to English

Optimize TensorFlow performance using the Profiler

استخدم الأدوات المتاحة مع ملف التعريف لتتبع أداء نماذج TensorFlow. تعرف على كيفية أداء النموذج الخاص بك على المضيف (وحدة المعالجة المركزية) ، أو الجهاز (GPU) ، أو على مجموعة من كل من المضيف والجهاز (الأجهزة).

يساعدك التوصيف على فهم استهلاك موارد الأجهزة (الوقت والذاكرة) لعمليات TensorFlow المختلفة (العمليات) في النموذج الخاص بك وحل مشكلات الأداء ، وفي النهاية ، جعل النموذج ينفذ بشكل أسرع.

سيرشدك هذا الدليل إلى كيفية تثبيت Profiler ، والأدوات المختلفة المتاحة ، والأوضاع المختلفة لكيفية قيام Profiler بتجميع بيانات الأداء ، وبعض أفضل الممارسات الموصى بها لتحسين أداء النموذج.

إذا كنت ترغب في تكوين ملف تعريف لأداء النموذج الخاص بك على Cloud TPU ، فراجع دليل Cloud TPU .

قم بتثبيت المتطلبات الأساسية لـ Profiler و GPU

قم بتثبيت ملف التعريف عن طريق تنزيل البرنامج النصي install_and_run.py وتشغيله من مستودع GitHub .

للتوصيف على GPU ، يجب عليك:

  1. قم بتثبيت CUDA® Toolkit 10.1 أو أحدث. تدعم CUDA® Toolkit 10.1 التنميط الفردي لوحدة معالجة الرسومات. لتوصيف عدة وحدات معالجة رسومات ، راجع ملف تعريف وحدات معالجة رسومات متعددة . تأكد من أن إصدار برنامج تشغيل CUDA® الذي تقوم بتثبيته هو 440.33 على الأقل لنظام التشغيل Linux أو 441.22 لنظام التشغيل Windows.
  2. تأكد من وجود CUPTI على المسار:
/sbin/ldconfig -N -v $(sed 's/:/ /g' <<< $LD_LIBRARY_PATH) | \
grep libcupti

إذا لم يكن لديك CUPTI على المسار ، $LD_LIBRARY_PATH دليل التثبيت الخاص به إلى متغير البيئة $LD_LIBRARY_PATH عن طريق تشغيل:

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

قم بتشغيل الأمر ldconfig أعلاه مرة أخرى للتحقق من العثور على مكتبة CUPTI.

ملف تعريف وحدات معالجة الرسومات المتعددة

يدعم TensorFlow حاليًا تنميط GPU المتعدد للأنظمة المضيفة الفردية. لا يتم حاليًا دعم إنشاء ملفات تعريف GPU المتعددة للأنظمة متعددة المضيف. قم بتثبيت CUDA® Toolkit 10.2 أو إصدار أحدث لتكوين ملفات تعريف متعددة لوحدات معالجة الرسومات. نظرًا لأن 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 أو على Linux ، فقد تواجه مشكلات تتعلق بامتيازات CUPTI غير الكافية ( CUPTI_ERROR_INSUFFICIENT_PRIVILEGES ). راجع محرر مستندات مطور NVIDIA لمعرفة المزيد حول كيفية حل هذه المشكلات على Linux.

لحل مشكلات امتياز CUPTI في بيئة Docker ، قم بتشغيل

docker run option '--privileged=true'

أدوات ملف التعريف

قم بالوصول إلى Profiler من علامة التبويب Profile في TensorBoard والتي تظهر فقط بعد التقاط بعض بيانات النموذج.

يحتوي ملف التعريف على مجموعة مختارة من الأدوات للمساعدة في تحليل الأداء:

  • صفحة نظرة عامة
  • محلل خط أنابيب الإدخال
  • احصائيات TensorFlow
  • عارض التتبع
  • احصائيات نواة GPU
  • أداة ملف تعريف الذاكرة

صفحة نظرة عامة

توفر صفحة النظرة العامة عرض المستوى الأعلى لكيفية أداء نموذجك أثناء تشغيل ملف التعريف. تعرض لك الصفحة صفحة نظرة عامة مجمعة لمضيفك وجميع الأجهزة ، وبعض التوصيات لتحسين أداء تدريب النموذج الخاص بك. يمكنك أيضًا تحديد مضيفين فرديين في قائمة المضيف المنسدلة.

تعرض صفحة النظرة العامة البيانات على النحو التالي:

صورة

  • ملخص الأداء - يعرض ملخصًا عالي المستوى لأداء النموذج الخاص بك. يتكون ملخص الأداء من جزأين:

    1. تقسيم الوقت المتدرج - يقسم متوسط ​​وقت الخطوة إلى فئات متعددة للمكان الذي يقضي فيه الوقت:

      • التجميع - الوقت المستغرق في تجميع النوى
      • الإدخال - الوقت المستغرق في قراءة بيانات الإدخال
      • الإخراج - الوقت المستغرق في قراءة بيانات الإخراج
      • إطلاق Kernel - الوقت الذي يقضيه المضيف في إطلاق النواة
      • وقت حساب المضيف
      • وقت الاتصال من جهاز إلى جهاز
      • وقت الحوسبة على الجهاز
      • كل الآخرين ، بما في ذلك بايثون
    2. دقة حساب الجهاز - يبين النسبة المئوية لوقت حساب الجهاز الذي يستخدم حسابات 16 و 32 بت

  • الرسم البياني لوقت الخطوة - يعرض رسمًا بيانيًا لوقت خطوة الجهاز (بالمللي ثانية) عبر جميع الخطوات التي تم أخذ عينات منها. يتم تقسيم كل خطوة إلى فئات متعددة (بألوان مختلفة) حيث يتم قضاء الوقت. تتوافق المنطقة الحمراء مع جزء وقت الخطوة الذي كانت فيه الأجهزة جالسة في وضع الخمول في انتظار بيانات الإدخال من المضيف. تُظهر المنطقة الخضراء مقدار الوقت الذي كان يعمل فيه الجهاز بالفعل

  • أعلى 10 عمليات TensorFlow على الجهاز - تعرض العمليات على الجهاز التي استغرقت أطول مدة.

    يعرض كل صف الوقت الذاتي للعملية (كنسبة مئوية من الوقت الذي تستغرقه جميع العمليات) والوقت التراكمي والفئة والاسم.

  • بيئة التشغيل - تعرض ملخصًا عالي المستوى لبيئة تشغيل النموذج بما في ذلك:

    • عدد الأجهزة المضيفة المستخدمة
    • نوع الجهاز (GPU / TPU)
    • عدد نوى الجهاز
  • توصية للخطوات التالية - التقارير عندما يكون النموذج مرتبطًا بالإدخال ويوصي بالأدوات التي يمكنك استخدامها لتحديد معوقات أداء النموذج وحلها

محلل خط أنابيب الإدخال

عندما يقرأ برنامج TensorFlow البيانات من ملف ، فإنه يبدأ في الجزء العلوي من الرسم البياني TensorFlow بطريقة مبسطة. تنقسم عملية القراءة إلى عدة مراحل لمعالجة البيانات متصلة في سلسلة ، حيث يكون إخراج إحدى المراحل هو المدخل إلى المرحلة التالية. يسمى نظام قراءة البيانات هذا بخط أنابيب الإدخال .

يحتوي خط الأنابيب النموذجي لقراءة السجلات من الملفات على المراحل التالية:

  1. قراءة الملف
  2. معالجة الملف (اختياري)
  3. نقل الملفات من المضيف إلى الجهاز

يمكن أن يؤدي خط أنابيب الإدخال غير الفعال إلى إبطاء تطبيقك بشدة. يعتبر التطبيق مقيدًا بالإدخال عندما يقضي جزءًا كبيرًا من الوقت في خط أنابيب الإدخال. استخدم الأفكار التي تم الحصول عليها من محلل خط أنابيب الإدخال لفهم أين يكون خط أنابيب الإدخال غير فعال.

يخبرك محلل خط أنابيب الإدخال على الفور ما إذا كان برنامجك مرتبطًا بالإدخال ويوجهك خلال تحليل جانب الجهاز والمضيف لتصحيح اختناقات الأداء في أي مرحلة في خط أنابيب الإدخال.

راجع الإرشادات الخاصة بأداء مسار الإدخال للحصول على أفضل الممارسات الموصى بها لتحسين خطوط أنابيب إدخال البيانات.

لوحة أجهزة القياس في خط أنابيب الإدخال

لفتح محلل خط أنابيب الإدخال ، حدد ملف التعريف ، ثم حدد input_pipeline_analyzer من قائمة الأدوات المنسدلة.

صورة

تحتوي لوحة القيادة على ثلاثة أقسام:

  1. الملخص - يلخص مسار الإدخال العام بمعلومات حول ما إذا كان التطبيق الخاص بك مرتبطًا بالإدخال ، وإذا كان الأمر كذلك ، فكم
  2. التحليل من جانب الجهاز - يعرض نتائج التحليل التفصيلية من جانب الجهاز ، بما في ذلك وقت خطوة الجهاز ونطاق الوقت الذي يقضيه الجهاز في انتظار بيانات الإدخال عبر النوى في كل خطوة
  3. تحليل جانب المضيف - يُظهر تحليلاً مفصلاً على جانب المضيف ، بما في ذلك تفصيل وقت معالجة الإدخال على المضيف

ملخص خط أنابيب الإدخال

يُبلغ الملخص إذا كان البرنامج الخاص بك مقيدًا بإدخال من خلال تقديم النسبة المئوية للوقت الذي يقضيه الجهاز في انتظار الإدخال من المضيف. إذا كنت تستخدم خط أنابيب إدخال قياسي تم تجهيزه ، تقوم الأداة بالإبلاغ عن المكان الذي يقضي فيه معظم وقت معالجة الإدخال.

تحليل جانب الجهاز

يوفر التحليل من جانب الجهاز رؤى حول الوقت الذي يقضيه الجهاز مقابل المضيف ومقدار الوقت الذي تم قضاؤه في انتظار بيانات الإدخال من المضيف.

  1. وقت الخطوة المرسوم مقابل رقم الخطوة - يعرض رسمًا بيانيًا لوقت خطوة الجهاز (بالملي ثانية) عبر جميع الخطوات التي تم أخذ عينات منها. يتم تقسيم كل خطوة إلى فئات متعددة (بألوان مختلفة) حيث يتم قضاء الوقت. تتوافق المنطقة الحمراء مع جزء وقت الخطوة الذي كانت فيه الأجهزة جالسة في وضع الخمول في انتظار بيانات الإدخال من المضيف. تُظهر المنطقة الخضراء مقدار الوقت الذي كان يعمل فيه الجهاز بالفعل
  2. إحصائيات وقت الخطوة - تُظهر المتوسط ​​والانحراف المعياري والمدى ([الحد الأدنى ، الحد الأقصى]) لوقت خطوة الجهاز

تحليل جانب المضيف

يُبلغ تحليل جانب المضيف عن تفصيل وقت معالجة الإدخال (الوقت المستغرق في tf.data API ops) على المضيف إلى عدة فئات:

  • قراءة البيانات من الملفات عند الطلب - الوقت الذي يقضيه في قراءة البيانات من الملفات دون التخزين المؤقت والجلب المسبق والتداخل
  • قراءة البيانات من الملفات مسبقًا - الوقت المستغرق في قراءة الملفات ، بما في ذلك التخزين المؤقت والجلب المسبق والتداخل
  • المعالجة المسبقة للبيانات - الوقت المنقضي في عمليات المعالجة المسبقة ، مثل إزالة ضغط الصورة
  • انتظار البيانات المراد نقلها إلى الجهاز - الوقت المستغرق في وضع البيانات في قائمة انتظار البيانات قبل نقل البيانات إلى الجهاز

قم بتوسيع Input Op Statistics لرؤية إحصائيات عمليات الإدخال الفردية وفئاتها مقسمة حسب وقت التنفيذ.

صورة

يظهر جدول بيانات المصدر مع كل إدخال يحتوي على المعلومات التالية:

  1. مرجع الإدخال - يعرض اسم عملية TensorFlow لمرجع الإدخال
  2. العد - يُظهر العدد الإجمالي لمثيلات تنفيذ العملية أثناء فترة التوصيف
  3. إجمالي الوقت (بالمللي ثانية) - يعرض المجموع التراكمي للوقت المنقضي في كل من هذه الحالات
  4. إجمالي الوقت٪ - يُظهر إجمالي الوقت المنقضي في عملية التشغيل كجزء من إجمالي الوقت المنقضي في معالجة الإدخال
  5. إجمالي الوقت الذاتي (بالمللي ثانية) - يعرض المجموع التراكمي للوقت الذاتي الذي يقضيه في كل من هذه الحالات. يقيس الوقت الذاتي هنا الوقت الذي يقضيه داخل الجسم الوظيفي ، باستثناء الوقت الذي يقضيه في الوظيفة التي يستدعيها.
  6. إجمالي الوقت الذاتي٪ . يُظهر إجمالي الوقت الذاتي ككسر من إجمالي الوقت المنقضي في معالجة الإدخال
  7. الفئة . يعرض فئة معالجة مرجع الإدخال

احصائيات TensorFlow

تعرض أداة TensorFlow Stats أداء كل عملية TensorFlow (عملية تشغيل) يتم تنفيذها على المضيف أو الجهاز أثناء جلسة التوصيف.

صورة

تعرض الأداة معلومات الأداء في جزأين:

  • يعرض الجزء العلوي ما يصل إلى أربعة مخططات دائرية:

    1. توزيع وقت التنفيذ الذاتي لكل عملية تشغيل على المضيف
    2. توزيع وقت التنفيذ الذاتي لكل نوع op على المضيف
    3. توزيع وقت التنفيذ الذاتي لكل عملية تشغيل على الجهاز
    4. توزيع وقت التنفيذ الذاتي لكل نوع عملية على الجهاز
  • يُظهر الجزء السفلي جدولاً يُبلغ عن بيانات حول عمليات TensorFlow بصف واحد لكل عملية وعمود واحد لكل نوع من أنواع البيانات (فرز الأعمدة عن طريق النقر فوق عنوان العمود). انقر فوق الزر تصدير بتنسيق CSV على الجانب الأيمن من الجزء العلوي لتصدير البيانات من هذا الجدول كملف CSV.

    لاحظ أن:

    • إذا كان لدى أي عمليات عمليات طفل:

      • إجمالي الوقت "المتراكم" لعملية تشمل الوقت الذي تم قضاؤه داخل العمليات الفرعية

      • إجمالي وقت "الذات" لعملية لا يشمل الوقت الذي يقضيه داخل عمليات الطفل

    • إذا تم تنفيذ المرجع على المضيف:

      • ستكون النسبة المئوية لإجمالي الوقت الذاتي الذي تكبدته العملية على الجهاز 0
      • ستكون النسبة المئوية التراكمية لإجمالي الوقت الذاتي على الجهاز حتى بما في ذلك هذا المرجع 0
    • إذا تم تنفيذ عملية على الجهاز:

      • ستكون النسبة المئوية لإجمالي الوقت الذاتي على المضيف الذي تكبده هذا المرجع 0
      • ستكون النسبة المئوية التراكمية لإجمالي الوقت الذاتي على المضيف حتى بما في ذلك هذا المرجع 0

يمكنك اختيار تضمين أو استبعاد وقت الخمول في المخططات الدائرية والجدول.

عارض التتبع

يعرض عارض التتبع مخططًا زمنيًا يُظهر:

  • مدد العمليات التي تم تنفيذها بواسطة نموذج TensorFlow الخاص بك
  • أي جزء من النظام (مضيف أو جهاز) نفذ عملية تشغيل. عادةً ما ينفذ المضيف عمليات الإدخال ويعالج بيانات التدريب وينقلها إلى الجهاز ، بينما ينفذ الجهاز تدريب النموذج الفعلي

يسمح لك عارض التتبع بتحديد مشاكل الأداء في نموذجك ، ثم اتخاذ الخطوات لحلها. على سبيل المثال ، على مستوى عالٍ ، يمكنك تحديد ما إذا كان تدريب الإدخال أو النموذج يستغرق معظم الوقت. بالتفصيل ، يمكنك تحديد العمليات التي تستغرق وقتًا أطول في التنفيذ. لاحظ أن عارض التتبع يقتصر على مليون حدث لكل جهاز.

واجهة عارض التتبع

عندما تفتح عارض التتبع ، فإنه يظهر يعرض آخر تشغيل لك:

صورة

تحتوي هذه الشاشة على العناصر الرئيسية التالية:

  1. جزء المخطط الزمني - يعرض العمليات التي نفذها الجهاز والمضيف بمرور الوقت
  2. جزء التفاصيل - يعرض معلومات إضافية عن العمليات المحددة في جزء المخطط الزمني

يحتوي جزء المخطط الزمني على العناصر التالية:

  1. الشريط العلوي - يحتوي على عناصر تحكم مساعدة مختلفة
  2. محور الوقت - يُظهر الوقت بالنسبة إلى بداية التتبع
  3. تسميات الأقسام والمسار - يحتوي كل قسم على مسارات متعددة ويحتوي على مثلث على اليسار يمكنك النقر فوقه لتوسيع القسم وطيّه. يوجد قسم واحد لكل عنصر معالجة في النظام
  4. محدد الأداة - يحتوي على أدوات متنوعة للتفاعل مع عارض التتبع مثل التكبير والتحريك والتحديد والتوقيت. استخدم أداة التوقيت لتمييز الفاصل الزمني.
  5. الأحداث - تعرض الوقت الذي تم خلاله تنفيذ المرجع أو مدة الأحداث الوصفية ، مثل خطوات التدريب
الأقسام والمسارات

يحتوي عارض التتبع على الأقسام التالية:

  • قسم واحد لكل عقدة جهاز ، مُسمى برقم شريحة الجهاز وعقدة الجهاز داخل الشريحة (على سبيل المثال ، /device:GPU:0 (pid 0) ). يحتوي كل قسم من عقدة الجهاز على المسارات التالية:
    • الخطوة - توضح مدة خطوات التدريب التي كانت تعمل على الجهاز
    • TensorFlow Ops - . يظهر العمليات المنفذة على الجهاز
    • XLA Ops - يعرض عمليات XLA (العمليات) التي يتم تشغيلها على الجهاز إذا كان XLA هو المترجم المستخدم (يتم ترجمة كل عملية TensorFlow إلى واحدة أو عدة عمليات XLA. ويترجم مترجم XLA عمليات XLA إلى رمز يتم تشغيله على الجهاز).
  • قسم واحد للخيوط التي تعمل على وحدة المعالجة المركزية للجهاز المضيف ، بعنوان "خيوط المضيف" . يحتوي القسم على مسار واحد لكل مؤشر ترابط CPU. لاحظ أنه يمكنك تجاهل المعلومات المعروضة بجانب تسميات الأقسام.
الأحداث

يتم عرض الأحداث ضمن المخطط الزمني بألوان مختلفة ؛ الألوان نفسها ليس لها معنى محدد.

يمكن أن يعرض عارض التتبع أيضًا آثار استدعاءات دالة Python في برنامج TensorFlow الخاص بك. إذا كنت تستخدم واجهة برمجة التطبيقات tf.profiler.experimental.start() API tf.profiler.experimental.start() ، يمكنك تمكين تتبع Python باستخدام ProfilerOptions المسماةtuple عند بدء التشكيل الجانبي. بدلاً من ذلك ، إذا كنت تستخدم وضع أخذ العينات للتنميط ، يمكنك تحديد مستوى التتبع باستخدام خيارات القائمة المنسدلة في مربع حوار ملف تعريف الالتقاط .

صورة

احصائيات نواة GPU

تعرض هذه الأداة إحصائيات الأداء والمرجع الأصلي لكل نواة مُسرعة من خلال GPU.

صورة

تعرض الأداة المعلومات في جزأين:

  • يعرض الجزء العلوي مخططًا دائريًا يُظهر نواة CUDA التي لها أعلى إجمالي الوقت المنقضي

  • يعرض الجزء السفلي جدولاً بالبيانات التالية لكل زوج فريد kernel-op:

    • ترتيب تنازلي لإجمالي مدة GPU المنقضية مجمعة حسب زوج kernel-op
    • اسم النواة التي تم إطلاقها
    • عدد تسجيلات GPU المستخدمة بواسطة kernel
    • الحجم الإجمالي للذاكرة المشتركة (الثابتة + الديناميكية المشتركة) المستخدمة بالبايت
    • يتم التعبير عن بُعد الكتلة كـ blockDim.x, blockDim.y, blockDim.z
    • يتم التعبير عن أبعاد الشبكة بالشكل: gridDim.x, gridDim.y, gridDim.z
    • ما إذا كان المرجع مؤهلاً لاستخدام TensorCores أم لا
    • ما إذا كانت النواة تحتوي على تعليمات TensorCore أم لا
    • اسم المرجع الذي أطلق هذه النواة
    • عدد تكرارات زوج kernel-op هذا
    • إجمالي الوقت المنقضي لوحدة معالجة الرسومات بالميكروثانية
    • متوسط ​​الوقت المنقضي لوحدة معالجة الرسومات بالميكروثانية
    • أدنى وقت منقضي لوحدة معالجة الرسومات بالميكروثانية
    • أقصى وقت منقضي لوحدة معالجة الرسومات بالميكروثانية

أداة ملف تعريف الذاكرة

تراقب أداة ملف تعريف الذاكرة استخدام الذاكرة لجهازك أثناء فترة التنميط. يمكنك استخدام هذه الأداة من أجل:

  • تصحيح مشكلات نفاد الذاكرة (OOM) عن طريق تحديد ذروة استخدام الذاكرة وتخصيص الذاكرة المقابل لعمليات TensorFlow. يمكنك أيضًا تصحيح مشكلات OOM التي قد تنشأ عند تشغيل الاستدلال متعدد الإيجارات
  • تصحيح مشاكل تجزئة الذاكرة

تعرض أداة ملف تعريف الذاكرة البيانات في ثلاثة أقسام:

  1. ملخص ملف تعريف الذاكرة
  2. مخطط الذاكرة الزمني
  3. جدول تقسيم الذاكرة

ملخص ملف تعريف الذاكرة

يعرض هذا القسم ملخصًا عالي المستوى لملف تعريف الذاكرة لبرنامج TensorFlow الخاص بك كما هو موضح أدناه:

يحتوي ملخص ملف تعريف الذاكرة على ستة حقول:

  1. معرف الذاكرة - القائمة المنسدلة التي تسرد جميع أنظمة ذاكرة الجهاز المتاحة. حدد نظام الذاكرة الذي تريد عرضه من القائمة المنسدلة
  2. #Allocation - عدد عمليات تخصيص الذاكرة التي تم إجراؤها أثناء فترة التخصيص
  3. #Deallocation - عدد عمليات إلغاء تخصيص الذاكرة في فاصل التوصيف
  4. سعة الذاكرة - السعة الإجمالية (بالجيجابايت) لنظام الذاكرة الذي تحدده
  5. ذروة استخدام الكومة - أقصى استخدام للذاكرة (بالجيب) منذ بدء تشغيل النموذج
  6. ذروة استخدام الذاكرة - أقصى استخدام للذاكرة (بالجيب) في فاصل التوصيف. يحتوي هذا الحقل على الحقول الفرعية التالية:
    1. الطابع الزمني - الطابع الزمني لوقت حدوث أقصى استخدام للذاكرة في الرسم البياني للخط الزمني
    2. حجز المكدس - مقدار الذاكرة المحجوزة في المكدس (بالجيبيز)
    3. تخصيص الكومة - مقدار الذاكرة المخصص في الكومة (بالجيبيز)
    4. الذاكرة الحرة - مقدار الذاكرة الفارغة (بالجيب). سعة الذاكرة هي إجمالي حجز المكدس وتخصيص الكومة والذاكرة الخالية
    5. التجزئة - النسبة المئوية للتجزئة (الأقل أفضل). يتم حسابها كنسبة مئوية (1 - حجم أكبر جزء من الذاكرة الخالية / إجمالي الذاكرة الخالية)

مخطط زمني للذاكرة

يعرض هذا القسم مخططًا لاستخدام الذاكرة (بالجيب) والنسبة المئوية للتجزئة مقابل الوقت (بالمللي ثانية).

صورة

يمثل المحور X المخطط الزمني (بالمللي ثانية) لفاصل التنميط. يمثل المحور Y الموجود على اليسار استخدام الذاكرة (في GiBs) ويمثل المحور Y على اليمين النسبة المئوية للتجزئة. في كل نقطة زمنية على المحور X ، يتم تقسيم الذاكرة الإجمالية إلى ثلاث فئات: المكدس (باللون الأحمر) ، والكومة (باللون البرتقالي) ، والحرة (باللون الأخضر). مرر مؤشر الماوس فوق طابع زمني محدد لعرض التفاصيل حول أحداث تخصيص / إلغاء تخصيص الذاكرة في تلك النقطة كما هو موضح أدناه:

صورة

تعرض النافذة المنبثقة المعلومات التالية:

  • الطابع الزمني (مللي ثانية) - موقع الحدث المحدد في المخطط الزمني
  • الحدث - نوع الحدث (تخصيص أو إلغاء التخصيص)
  • Request_size (GiBs) - مقدار الذاكرة المطلوب. سيكون هذا رقمًا سالبًا لأحداث إلغاء التخصيص
  • Customize_size (GiBs) - المقدار الفعلي للذاكرة المخصصة. سيكون هذا رقمًا سالبًا لأحداث إلغاء التخصيص
  • tf_op - TensorFlow Op الذي يطلب التخصيص / إلغاء التخصيص
  • step_id - خطوة التدريب التي وقع فيها هذا الحدث
  • region_type - نوع كيان البيانات المخصص لهذه الذاكرة المخصصة. القيم الممكنة هي temp لالمؤقتة المتقبلة، output عن التنشيط والتدرجات، و persist / dynamic للأوزان والثوابت
  • data_type - نوع عنصر الموتر (على سبيل المثال ، uint8 لعدد صحيح بدون إشارة 8 بت)
  • tensor_shape - شكل الموتر الذي يتم تخصيصه / إلغاء تخصيصه
  • memory_in_use (GiBs) - إجمالي الذاكرة المستخدمة في هذا الوقت

جدول انهيار الذاكرة

يوضح هذا الجدول عمليات تخصيص الذاكرة النشطة عند نقطة ذروة استخدام الذاكرة في فاصل التوصيف.

صورة

يوجد صف واحد لكل عملية TensorFlow Op ولكل صف الأعمدة التالية:

  • اسم العملية - اسم مرجع TensorFlow
  • حجم التخصيص (GiBs) - إجمالي مساحة الذاكرة المخصصة لهذا المرجع
  • الحجم المطلوب (GiBs) - إجمالي حجم الذاكرة المطلوبة لهذا المرجع
  • مرات التكرار - عدد التخصيصات لهذا المرجع
  • نوع المنطقة - نوع كيان البيانات المخصص لهذه الذاكرة المخصصة. القيم الممكنة هي temp لالمؤقتة المتقبلة، output عن التنشيط والتدرجات، و persist / dynamic للأوزان والثوابت
  • نوع البيانات - نوع عنصر الموتر
  • الشكل - شكل الموترات المخصصة

جمع بيانات الأداء

يجمع TensorFlow Profiler أنشطة المضيف وآثار GPU لنموذج TensorFlow الخاص بك. يمكنك تكوين منشئ ملفات التعريف لتجميع بيانات الأداء من خلال الوضع البرنامجي أو وضع أخذ العينات.

التنميط واجهات برمجة التطبيقات

يمكنك استخدام واجهات برمجة التطبيقات التالية لإجراء التنميط.

# 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.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. استخدم البرنامج النصي في قسم Install profiler أعلاه لتشغيل مثيل TensorBoard إذا لم يكن قيد التشغيل بالفعل.

    كمثال،

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

استخدم مربع حوار ملف تعريف الالتقاط لتحديد:

  • عنوان URL لخدمة الملف الشخصي أو اسم TPU
  • مدة التنميط
  • مستوى تتبع استدعاء الجهاز والمضيف ووظيفة Python
  • كم مرة تريد أن يقوم منشئ ملفات التعريف بإعادة محاولة التقاط ملفات التعريف إذا لم تنجح في البداية

التنميط الحلقات التدريبية المخصصة

لتشكيل حلقات تدريب مخصصة في كود TensorFlow الخاص بك ، قم بأداة حلقة التدريب باستخدام tf.profiler.experimental.Trace API لتحديد حدود الخطوة 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 على نفس الجهاز الذي ينفذه نموذجك ، على سبيل المثال ، محطة عمل محلية مع وحدات معالجة الرسومات. في التنميط عن بُعد ، يتم استدعاء واجهة برمجة تطبيقات التوصيف على جهاز مختلف من حيث يتم تنفيذ نموذجك ، على سبيل المثال ، على Cloud TPU.
  • تحديد ملفات تعريف عدة عمال: يمكنك وضع ملفات تعريف لأجهزة متعددة عند استخدام إمكانات التدريب الموزعة لـ TensorFlow.
  • النظام الأساسي للأجهزة: وحدات المعالجة المركزية (CPUs) ، ووحدات معالجة الرسومات (GPU) ، و TPU.

الجدول أدناه هو نظرة عامة سريعة على أي من حالات الاستخدام المذكورة أعلاه مدعومة من قبل واجهات برمجة التطبيقات المختلفة للتنميط في TensorFlow 2.3:

التنميط API محلي التحكم عن بعد تعدد العمال منصات الأجهزة
رد اتصال Keras من TensorBoard أيد غير مدعوم غير مدعوم وحدة المعالجة المركزية ، GPU
tf.experimental.profiler وظيفة API أيد غير مدعوم غير مدعوم وحدة المعالجة المركزية ، GPU
مدير السياق API أيد غير مدعوم غير مدعوم وحدة المعالجة المركزية ، GPU
API عند الطلب غير مدعوم أيد دعم محدود وحدة المعالجة المركزية ، GPU ، TPU

أفضل الممارسات لأداء النموذج الأمثل

استخدم التوصيات التالية حسب الاقتضاء لنماذج TensorFlow لتحقيق الأداء الأمثل.

بشكل عام ، قم بإجراء جميع التحويلات على الجهاز وتأكد من استخدام أحدث إصدار متوافق من المكتبات مثل cuDNN و Intel MKL لمنصتك.

تحسين خط أنابيب إدخال البيانات

يمكن أن يؤدي خط أنابيب إدخال البيانات الفعال إلى تحسين سرعة تنفيذ النموذج بشكل كبير عن طريق تقليل وقت خمول الجهاز. ضع في اعتبارك دمج أفضل الممارسات التالية كما هو مفصل هنا لجعل خط أنابيب إدخال البيانات أكثر كفاءة:

  • بيانات الجلب المسبق
  • موازاة استخراج البيانات
  • موازاة تحويل البيانات
  • ذاكرة التخزين المؤقت للبيانات في الذاكرة
  • توجيه الوظائف المعرفة من قبل المستخدم
  • تقليل استخدام الذاكرة عند تطبيق التحويلات

بالإضافة إلى ذلك ، حاول تشغيل نموذجك ببيانات تركيبية للتحقق مما إذا كان خط أنابيب الإدخال يمثل عقبة في الأداء.

تحسين أداء الجهاز

  • زيادة حجم الدفعة المصغرة للتدريب (عدد عينات التدريب المستخدمة لكل جهاز في تكرار واحد لحلقة التدريب)
  • استخدم TF Stats لمعرفة مدى كفاءة تشغيل العمليات على الجهاز
  • استخدم tf.function لإجراء عمليات حسابية ، tf.function اختياريًا تمكين العلامة experimental_compile
  • قلل عمليات مضيف Python بين الخطوات وتقليل عمليات الاسترجاعات. احسب المقاييس كل بضع خطوات بدلاً من كل خطوة
  • احتفظ بوحدات حساب الجهاز مشغولة
  • إرسال البيانات إلى أجهزة متعددة بالتوازي
  • تحسين تخطيط البيانات لتفضيل القنوات أولاً (على سبيل المثال NCHW على NHWC). تعمل بعض وحدات معالجة الرسومات مثل NVIDIA® V100 بشكل أفضل مع تخطيط بيانات NHWC.
  • ضع في اعتبارك استخدام التمثيلات الرقمية ذات 16 بت مثل fp16 ، تنسيق النقطة العائمة نصف الدقة المحدد بواسطة IEEE أو تنسيق Brain العائم الفاصلة bfloat16
  • ضع في اعتبارك استخدام واجهة برمجة تطبيقات الدقة المختلطة Keras
  • عند التدريب على وحدات معالجة الرسومات ، استفد من TensorCore. تستخدم نوى GPU TensorCore عندما تكون الدقة fp16 وأبعاد الإدخال / الإخراج قابلة للقسمة على 8 أو 16 (لـ int8)

مصادر إضافية