এইচএলও পাস

এই নথিটি XLA কম্পাইলারে HLO অপ্টিমাইজেশান এবং রূপান্তর পাসের রূপরেখা দেয়।

ভূমিকা

একটি একক এইচএলও পাস এক বা একাধিক কম্পাইলার অপ্টিমাইজেশান এবং রূপান্তর নিয়ে গঠিত হতে পারে এবং XLA এরকম কয়েকশ পাস প্রদান করে। এইচএলও অপ্টিমাইজেশান বা রূপান্তরকে সহজ করার জন্য অ্যারেগুলির আকৃতি (যেমন একটি 3x4 ম্যাট্রিক্স) এবং অপারেশন শব্দার্থবিদ্যার উপর ফোকাস করে।

যেমন:

  • AlgebraicSimplifier : একটি পাস যা বেশিরভাগ গাণিতিক সরলীকরণ এবং অপ্টিমাইজেশানগুলি সম্পাদন করে। সহ:

    • ধ্রুবক দ্বারা ভাগ করার সময়, একটি অপ্টিমাইজেশান সঞ্চালিত হয় ক্রিয়াটিকে ধ্রুবকের বিপরীত দ্বারা গুণে রূপান্তরিত করার জন্য।
  • HloRematerialization : একটি পাস যা অ্যারে-আকৃতির মানগুলির দীর্ঘ লাইভ রেঞ্জের কারণে সৃষ্ট মেমরির চাপ কমাতে গণনায় নির্বাচিত অভিব্যক্তিগুলিকে পুনরায় গণনা করে।

বিকাশকারীর বিবরণ

HLO পাসের জন্য বেস ক্লাস পাওয়া যাবে xla/hlo/pass/hlo_pass_interface.h এ। HLO পাস সরাসরি এই ক্লাসটি প্রসারিত করা উচিত নয় বরং তার পরিবর্তে HloModulePass প্রসারিত করা উচিত।

এছাড়াও XLA HLO পাস ফ্রেমওয়ার্ক দেখুন।

টুলিং এবং টেস্টিং

XLA এইচলো-অপ্ট টুল সহ একাধিক কমান্ড লাইন টুল সহ আসে। এই টুলটি প্রদত্ত প্ল্যাটফর্ম সংকলন পর্যায়গুলি থেকে স্বাধীনভাবে একটি পৃথক পাস কার্যকর করার অনুমতি দেয়। আরও তথ্যের জন্য টুলিং দেখুন।

এইচএলও পাসের জন্য ইউনিট পরীক্ষা লেখার তথ্যের জন্য এইচএলও পাস পরীক্ষা দেখুন।

হার্ডওয়্যার-স্বাধীন এইচএলও পাসের উদাহরণ

এই বিভাগে XLA ব্যাকএন্ড জুড়ে ভাগ করা পাসের কয়েকটি উদাহরণ বর্ণনা করা হয়েছে। কিছু পাস নির্দিষ্ট ব্যাকএন্ডের জন্য বিশেষায়িত হতে পারে, কিন্তু উচ্চ-স্তরের কার্যকারিতা একই রকম।

শেয়ার্ড পাস বা হার্ডওয়্যার-স্বাধীন পাসগুলি xla/hlo/transforms এ পাওয়া যাবে।

রিমেটেরিয়ালাইজেশন

আরও দেখুন HloRematerialization .

মেমরির ব্যবহার কমাতে HLO গ্রাফের মধ্যে এক্সপ্রেশনগুলিকে বেছে বেছে পুনরায় গণনা করে। কম মেমরি ব্যবহারের জন্য উচ্চ গণনা বন্ধ ট্রেড. কয়েক শতাংশ মেমরি ব্যবহার কমাতে পারে এবং অনেক বড় মডেল চালানোর জন্য প্রয়োজন।

বীজগণিত সরলীকৃত

আরও দেখুন AlgebraicSimplifier

সরলীকরণ, অপ্টিমাইজেশান এবং ক্যানোনিকালাইজেশনের একটি ব্যাগ। LLVM এর instcombine পাসের সাথে সাদৃশ্যপূর্ণ।

ধ্রুবক ভাঁজ

এছাড়াও HloConstantFolding দেখুন।

অভিব্যক্তিগুলিকে প্রতিস্থাপন করে যা কম্পাইলের সময় তাদের ধ্রুবক সমতুল্য দিয়ে মূল্যায়ন করা যেতে পারে।

মৃত কোড নির্মূল

এছাড়াও HloDCE দেখুন।

অব্যবহৃত ফলাফল (দ্রুত বাস্তবায়ন) সহ অপারেশনগুলি সরিয়ে দেয়।

কল গ্রাফ সমতলকরণ

এছাড়াও FlattenCallGraph দেখুন।

একটি বৈধকরণ পাস যা ক্লোনিং গণনার মাধ্যমে HLO কল গ্রাফকে একটি গাছে রূপান্তরিত করে। প্রয়োজন কারণ মেমরি স্ট্যাটিকভাবে HLO অপারেশনে বরাদ্দ করা হয়েছে এবং গতিশীল কল প্রসঙ্গের উপর ভিত্তি করে নয়।

রিশেপ মুভার

এছাড়াও ReshapeMover দেখুন।

পুনর্নির্মাণ এবং স্থানান্তর ব্যয়বহুল হতে পারে, বিশেষ করে TPU-তে। এই পাসটি সরানো এবং পুনর্নির্মাণ করে এবং উপাদানভিত্তিক ক্রিয়াকলাপ জুড়ে স্থানান্তর করে যা অপারেশনগুলিকে একত্রিত বা নির্মূল করতে সক্ষম করে।

শূন্য আকারের এইচএলও নির্মূল

এছাড়াও ZeroSizedHloElimination দেখুন।

HLO শূন্য আকারের অ্যারে সমর্থন করে (এক বা একাধিক মাত্রা শূন্যের সীমাবদ্ধ)। এই পাসটি শূন্য-আকারের ক্রিয়াকলাপগুলিকে শূন্য-আকারের ধ্রুবক দিয়ে প্রতিস্থাপন করে গ্রাফটিকে সরল করে।

TPU-নির্দিষ্ট HLO পাসের উদাহরণ

TPU ব্যাকএন্ডের জন্য নির্দিষ্ট পাস।

মডেল সমান্তরালতা

একাধিক কোর জুড়ে একটি XLA প্রোগ্রামের বিভাজন এইচএলও স্তরে সঞ্চালিত হয় এবং টিপিইউ এইচএলও পাইপলাইনে মাল্টি-কোর এক্সিকিউশন সমর্থন করার জন্য বেশ কয়েকটি পাস অন্তর্ভুক্ত রয়েছে।

স্থানিক বিভাজন

ShardingPropagation আরও দেখুন।

নন-ব্যাচ মাত্রা সহ ডিভাইস জুড়ে বিভাজন ক্রিয়াকলাপ সমর্থন করতে পাস করুন।

bfloat 16 হ্যান্ডলিং

BFloat16ConversionFolding , BFloat16MixedPrecisionRemoval , এবং BFloat16Propagation দেখুন।

TPUs 32-বিট ফ্লোটের চেয়ে কম-নির্ভুলতা, আরও কমপ্যাক্ট ফ্লোটিং-পয়েন্ট উপস্থাপনা হিসাবে bfloat16 সমর্থন করে। bfloat16 ব্যবহার করলে মেমরির পদচিহ্ন এবং মেমরি ব্যান্ডউইথ কমে যায়। TPU HLO পাইপলাইন প্রোগ্রামে bfloat16 দিয়ে ফ্লোট প্রতিস্থাপন এবং গ্রাফের মাধ্যমে নির্ভুলতা প্রচার করার জন্য বিভিন্ন পাস অন্তর্ভুক্ত করে।

বৈধকরণ পাস

এছাড়াও GatherExpander , এবং BatchNormExpander দেখুন।

পাস যা অসমর্থিত এইচএলওকে এমন একটি ফর্মে রূপান্তরিত করে যা ব্যাকএন্ড নির্গত করতে পারে বা যার জন্য ব্যাকএন্ড আরও কার্যকরী হ্রাস তৈরি করে।

GPU-নির্দিষ্ট HLO পাস উদাহরণ

GPU ব্যাকএন্ডের জন্য নির্দিষ্ট পাসগুলি xla/service/gpu তে পাওয়া যায়। এই পাসগুলিকে namespace gpu তে সংজ্ঞায়িত ক্লাস হিসাবে চিহ্নিত করা যেতে পারে।

cuDNN রিরাইটার

এছাড়াও CudnnFusedConvRewriter এবং CudnnNormRewriter দেখুন।

cuDNN-এ তাদের নিজ নিজ লাইব্রেরি কলগুলিতে ফিউজড কনভোলিউশন এবং আদর্শ ক্রিয়াকলাপগুলি পুনর্লিখন করে।

CPU-নির্দিষ্ট HLO পাসের উদাহরণ

CPU ব্যাকএন্ডের জন্য নির্দিষ্ট পাসগুলি xla/service/cpu তে পাওয়া যায়। এই পাসগুলি namespace cpu তে সংজ্ঞায়িত ক্লাস হিসাবে চিহ্নিত করা যেতে পারে।

কনভোলিউশন ক্যানোনিকালাইজেশন

ConvCanonicalization এছাড়াও দেখুন।

কনভোলিউশনগুলিকে ক্যানোনিকালাইজ করে যাতে সেগুলিকে আইজেনে দ্রুত বাস্তবায়নে নামানো যায়।

অপারেশন সমান্তরালকরণ

এছাড়াও ParallelTaskAssigner দেখুন।

আলাদা থ্রেডে চালানোর জন্য HLO-কে টাস্কে পার্টিশন করে।

বিশ্লেষণ পাস

বিশ্লেষণ পাসগুলিকে "HLO পাস" হিসাবে বিবেচনা করা হয় না কারণ তারা HLO রূপান্তরিত করে না এবং HloModulePass প্রসারিত করতে পারে না। শেয়ার করা বিশ্লেষণগুলি xla/hlo/analysis এ পাওয়া যায়।

বিশ্লেষণ পাস উদাহরণ

ডেটাফ্লো বিশ্লেষণ

আরও দেখুন HloDataflowAnalysis .

গ্রাফের সমস্ত HLO মান এবং তাদের ব্যবহার সনাক্ত করে।

উপনাম বিশ্লেষণ

এছাড়াও HloAliasAnalysis দেখুন।

প্রোগ্রামের মানগুলির মধ্যে অবশ্যই-উনাম সম্পর্ক সনাক্ত করে।

গণনা খরচ বিশ্লেষণ

এছাড়াও HloCostAnalysis দেখুন।

প্রোগ্রামের সমস্ত ক্রিয়াকলাপের জন্য FLOP গণনা এবং মেমরি ব্যবহার গণনা করে।

HLO যাচাইকরণ

এছাড়াও HloVerifier দেখুন।

HLO গ্রাফের বিভিন্ন পরিবর্তন যাচাই করে।