تصحيح أخطاء X10

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

تتمثل إحدى طرق تشخيص المشكلات في استخدام مقاييس التنفيذ والعدادات التي يوفرها X10. أول شيء يجب التحقق منه عندما يكون النموذج بطيئًا هو إنشاء تقرير مقاييس.

المقاييس

لطباعة تقرير مقاييس، أضف استدعاء PrintX10Metrics() إلى برنامجك:

import TensorFlow

...
PrintX10Metrics()
...

سيؤدي هذا إلى تسجيل المقاييس والعدادات المختلفة على مستوى INFO .

فهم تقرير المقاييس

يتضمن التقرير أشياء مثل:

  • كم مرة قمنا بتشغيل تجميعات XLA وإجمالي الوقت المستغرق في التجميع.
  • كم مرة أطلقنا حساب XLA وإجمالي الوقت المستغرق في التنفيذ.
  • كم عدد مقابض بيانات الجهاز التي نقوم بإنشائها/تدميرها، وما إلى ذلك.

يتم الإبلاغ عن هذه المعلومات من حيث النسب المئوية للعينات. مثال على ذلك هو:

Metric: CompileTime
  TotalSamples: 202
  Counter: 06m09s401ms746.001us
  ValueRate: 778ms572.062us / second
  Rate: 0.425201 / second
  Percentiles: 1%=001ms32.778us; 5%=001ms61.283us; 10%=001ms79.236us; 20%=001ms110.973us; 50%=001ms228.773us; 80%=001ms339.183us; 90%=001ms434.305us; 95%=002ms921.063us; 99%=21s102ms853.173us

نحن نوفر أيضًا عدادات، تسمى متغيرات صحيحة تتتبع حالة البرنامج الداخلية. على سبيل المثال:

Counter: CachedSyncTensors
  Value: 395

محاذير معروفة

يتصرف Tensor المدعوم بواسطة X10 بشكل دلالي مثل وضع Tensor الافتراضي. ومع ذلك، هناك بعض التحذيرات المتعلقة بالأداء والاكتمال:

  1. انخفاض الأداء بسبب كثرة عمليات إعادة التجميع.

    تجميع XLA مكلف. يقوم X10 بإعادة ترجمة الرسم البياني تلقائيًا في كل مرة تتم فيها مواجهة أشكال جديدة، دون تدخل المستخدم. تحتاج النماذج إلى رؤية الأشكال المستقرة خلال بضع خطوات تدريبية ومن هذه النقطة لا حاجة إلى إعادة التجميع. بالإضافة إلى ذلك، يجب أن تستقر مسارات التنفيذ بسرعة لنفس السبب: تتم إعادة ترجمة X10 عند مواجهة مسار تنفيذ جديد. خلاصة القول، لتجنب إعادة التجميع:

    • تجنب الأشكال الديناميكية المتغيرة للغاية. ومع ذلك، يمكن لعدد قليل من الأشكال المختلفة أن يكون جيدًا. موترات الوسادة بأحجام ثابتة عندما يكون ذلك ممكنًا.
    • تجنب الحلقات ذات عدد مختلف من التكرارات بين خطوات التدريب. يقوم X10 حاليًا ببسط الحلقات، وبالتالي يتم ترجمة عدد مختلف من تكرارات الحلقة إلى مسارات تنفيذ مختلفة (غير ملتفة).
  2. لا يدعم X10 عددًا صغيرًا من العمليات حتى الآن.

    لدينا حاليًا عدد قليل من العمليات غير المدعومة، إما لأنه لا توجد طريقة جيدة للتعبير عنها عبر XLA والأشكال الثابتة (حاليًا فقط nonZeroIndices ) أو بسبب نقص حالات الاستخدام المعروفة (العديد من عمليات الجبر الخطي والتهيئة متعددة الحدود) . في حين أن الفئة الثانية من السهل معالجتها حسب الحاجة، إلا أنه لا يمكن معالجة الفئة الأولى إلا من خلال إمكانية التشغيل التفاعلي مع وحدة المعالجة المركزية (CPU)، وتنفيذ غير XLA. إن استخدام إمكانية التشغيل البيني في كثير من الأحيان له آثار كبيرة على الأداء بسبب رحلات المضيف ذهابًا وإيابًا وتجزئة النموذج المدمج بالكامل إلى آثار متعددة. ولذلك يُنصح المستخدمون بتجنب استخدام مثل هذه العمليات في نماذجهم.

    في Linux، استخدم XLA_SAVE_TENSORS_FILE (موثق في القسم التالي) للحصول على تتبع مكدس Swift الذي يطلق عليه العملية غير المدعومة. يمكن فك تشابك أسماء الوظائف يدويًا باستخدام swift-demangle .

الحصول على الآثار والرسوم البيانية

إذا كنت تشك في وجود مشكلات في طريقة تتبع الرسوم البيانية، أو كنت تريد فهم عملية التتبع، فسيتم توفير الأدوات لتسجيل الخروج وتصور الآثار. يمكنك جعل X10 يسجل الخروج من الآثار التي يجدها عن طريق تعيين متغير البيئة XLA_SAVE_TENSORS_FILE :

export XLA_SAVE_TENSORS_FILE=/home/person/TraceLog.txt

تأتي سجلات التتبع هذه في ثلاثة تنسيقات: text و hlo و dot ، مع إمكانية ضبط التنسيق من خلال متغير البيئة XLA_SAVE_TENSORS_FMT:

export XLA_SAVE_TENSORS_FMT=text

عند تشغيل التطبيق الخاص بك، سيُظهر تمثيل text الذي تم تسجيل الخروج منه كل أثر فردي في تدوين نصي عالي المستوى يستخدمه X10. يُظهر تمثيل hlo التمثيل الوسيط الذي تم تمريره إلى مترجم XLA. قد ترغب في تقييد عدد التكرارات داخل حلقات التدريب أو الحساب الخاصة بك لمنع هذه السجلات من أن تصبح كبيرة جدًا. بالإضافة إلى ذلك، سيتم إلحاق كل تشغيل لتطبيقك بهذا الملف، لذا قد ترغب في حذفه بين مرات التشغيل.

سيؤدي تعيين المتغير XLA_LOG_GRAPH_CHANGES إلى 1 أيضًا إلى الإشارة ضمن سجل التتبع إلى مكان حدوث التغييرات في الرسم البياني. يعد هذا مفيدًا للغاية في العثور على الأماكن التي ستؤدي إلى إعادة الترجمة.

للحصول على تمثيل مرئي للتتبع، سيقوم خيار dot بتسجيل الخروج من الرسوم البيانية المتوافقة مع Graphviz. إذا قمت باستخراج جزء من التتبع الذي يبدو

digraph G {
    ...
}

في ملفه الخاص، يمكن لـ Graphviz (على افتراض أنه مثبت) إنشاء مخطط مرئي عبر

dot -Tpng trace.dot -o trace.png

لاحظ أن تعيين متغير البيئة XLA_SAVE_TENSORS_FILE ، خاصة عند استخدامه مع XLA_LOG_GRAPH_CHANGES سيكون له تأثير سلبي كبير على الأداء. استخدمها فقط عند تصحيح الأخطاء، وليس للتشغيل المنتظم.

متغيرات البيئة الإضافية

تتضمن متغيرات البيئة الإضافية لتصحيح الأخطاء ما يلي:

  • XLA_USE_BF16 : إذا تم تعيينه على 1، فسيتم تحويل جميع قيم Float إلى BF16. يجب استخدامه فقط لتصحيح الأخطاء نظرًا لأننا نقدم دقة مختلطة تلقائية.

  • XLA_USE_32BIT_LONG : في حالة التعيين على 1، يتم تعيين النوع S4TF Long إلى النوع الصحيح XLA 32 بت. على TPU، تكون حسابات الأعداد الصحيحة 64 بت باهظة الثمن، لذا فإن تعيين هذه العلامة قد يساعد. وبطبيعة الحال، يحتاج المستخدم إلى التأكد من أن القيم لا تزال مناسبة لعدد صحيح 32 بت.