ডিবাগিং 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

পরিচিত সতর্কতা

X10 দ্বারা সমর্থিত Tensor ডিফল্ট আগ্রহী মোড Tensor মতো শব্দার্থগতভাবে আচরণ করে। যাইহোক, কিছু কর্মক্ষমতা এবং সম্পূর্ণতা সতর্কতা আছে:

  1. অত্যধিক পুনঃসংকলনের কারণে কর্মক্ষমতা হ্রাস পেয়েছে।

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

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

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

    লিনাক্সে, সুইফট স্ট্যাক ট্রেস পেতে XLA_SAVE_TENSORS_FILE (পরবর্তী বিভাগে নথিভুক্ত) ব্যবহার করুন যা অসমর্থিত অপারেশন বলে। swift-demangle ব্যবহার করে ফাংশনের নাম ম্যানুয়ালি ডিম্যাঙ্গল করা যেতে পারে।

প্রাপ্ত এবং গ্রাফিং ট্রেস

আপনি যদি সন্দেহ করেন যে গ্রাফগুলি যেভাবে ট্রেস করা হচ্ছে তাতে সমস্যা আছে, বা ট্রেসিং প্রক্রিয়াটি বুঝতে চান, লগ আউট করার জন্য এবং ট্রেসগুলি কল্পনা করার জন্য সরঞ্জামগুলি সরবরাহ করা হয়। XLA_SAVE_TENSORS_FILE এনভায়রনমেন্ট ভেরিয়েবল সেট করে আপনি X10 লগ আউট করতে পারেন:

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 বিকল্পটি গ্রাফভিজ-সামঞ্জস্যপূর্ণ গ্রাফগুলিকে লগ আউট করবে। আপনি একটি ট্রেস এর অংশ নিষ্কাশন করা হলে যে মত দেখায়

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 বিট পূর্ণসংখ্যাতে ফিট করে।