-sdy-add-data-flow-edges

প্রতিটি ডেটা-ফ্লো এজের জন্য DataFlowEdgeOp সন্নিবেশ করে।

ডেটা-ফ্লো এজ-এর মালিক এমন প্রতিটি মানের জন্য DataFlowEdgeOp সন্নিবেশ করে; অর্থাৎ, মডিউলের প্রতিটি ShardableDataFlowOpInterfacegetBlockArgumentEdgeOwners এবং getOpResultEdgeOwners দ্বারা ফেরত আসা সমস্ত মানের জন্য।

সন্নিবেশিত DataFlowEdgeOp টি মালিক টার্গেটের বিদ্যমান শার্ডিং গ্রহণ করবে, যদি তা বিদ্যমান থাকে।

-sdy-add-func-data-flow-edges

প্রতিটি ফাংশন/কল ডেটা-ফ্লো এজের জন্য FuncDataFlowEdgeOp সন্নিবেশ করে।

প্রতিটি func আর্গুমেন্ট এবং কল ফলাফলের জন্য FuncDataFlowEdgeOp সন্নিবেশ করে।

-sdy-apply-sharding-constraints

এমন সীমাবদ্ধতা প্রয়োগ করে যা তাদের ইনপুটের বিভাজন নির্ধারণ করে।

একটি ShardingConstraintOp এর শার্ডিং তার ইনপুটে কপি করে, যদি এটি নিম্নলিখিত সব শর্ত পূরণ করে:

  • ইনপুটটির কোনো বিদ্যমান শার্ডিং নেই।
  • ShardingConstraintOp এর শার্ডিং সম্পূর্ণরূপে বন্ধ।
  • ইনপুটটিতে ShardingConstraintOp বা ManualComputationOp টাইপের ভিন্ন শার্ডিংযুক্ত অন্য কোনো ব্যবহারকারী নেই।

এই শর্তগুলো নির্দেশ করে যে ShardingConstraintOp তার ইনপুটের শার্ডিং নির্ধারণ করে।

যদি ইনপুটটি কোনো ডেটা-ফ্লো এজ-এর টার্গেট হয়, তাহলে অপ-এর শার্ডিং সেট করার পরিবর্তে, আমরা input সমস্ত ব্যবহারকে ShardingConstraintOp দিয়ে প্রতিস্থাপন করি, যাতে এজ-টির সমস্ত টার্গেটের শার্ডিং সীমাবদ্ধ করা এড়ানো যায়।

উল্লেখ্য যে, এই পাস নির্বিশেষে প্রোপাগেশনের সময় একটি ShardingConstraintOp এর শার্ডিং তার ইনপুট বা ব্যবহারকারীদের কাছে পৌঁছে যাবে, কিন্তু যেহেতু একটি ডাইমেনশনের ক্লোজড প্রপার্টি প্রোপাগেট করে না, তাই উপরের ক্ষেত্রগুলিতে কনস্ট্রেইন্টটি সম্পূর্ণরূপে মেনে চলার জন্য শার্ডিংটি কপি করা গুরুত্বপূর্ণ।

এছাড়াও, যদি একটি টেনসর ShardingConstraintOp এর এমন একটি শৃঙ্খল দ্বারা ব্যবহৃত হয় যা নিম্নলিখিত সমস্ত শর্ত পূরণ করে:

  • টেনসরটি কোনো ShardingConstraintOp দ্বারা উৎপাদিত নয় এবং এর ShardingConstraintOp বা ManualComputationOp টাইপের অন্য কোনো ব্যবহারকারী নেই;
  • চেইনের শেষটি ছাড়া অন্য কোনো ShardingConstraintOp এর একাধিক ব্যবহার নেই;
  • চেইনের শেষ ShardingConstraintOp টিতে ShardingConstraintOp বা ManualComputationOp টাইপের কোনো ব্যবহারকারী নেই (অন্যথায় এটি চেইনের শেষ নয়);

তাহলে এই পাসটি চেইনের ইনপুটের অন্য সব ব্যবহারকে প্রতিস্থাপন করে, অর্থাৎ:

  • func.return op নয়;
  • চেইনের শেষ ShardingConstraintOp পরে (এবং একই ব্লকের মধ্যে) সংজ্ঞায়িত করা হয়।

চেইনের ফলাফলের সাথে, কারণ এটিই ওই ব্যবহারগুলোর বিভাজন নির্ধারণ করবে।

বিকল্প

-debug-sharding-origins          : Whether to compute the debug origin shardings for constraints. See `debug-sharding-origins` option in propagation for more info.
-debug-propagation-edge-sharding : Whether to sink the debug propagation edge sharding info. See `debug-propagation-edge-sharding` option in propagation for more info.

-sdy-constant-or-scalar-splitter

ধ্রুবক এবং স্কেলার সম্প্রসারণকে এমনভাবে বিভক্ত করে যাতে প্রতিটির একটিমাত্র ব্যবহার থাকে।

ধ্রুবক উপ-গণনা এবং স্কেলার সম্প্রসারণগুলিকে এমনভাবে বিভক্ত করে যাতে সেগুলির একজনই ব্যবহারকারী থাকে।

এটি নিশ্চিত করে যে একটি কনস্ট্যান্ট সাব-কম্পিউটেশনের বিভিন্ন ব্যবহারের মধ্যে শার্ডিং যেন ছড়িয়ে না পড়ে, কারণ এটিকে একটি মিথ্যা নির্ভরতা হিসেবে বিবেচনা করা হয় (শুধুমাত্র একই কনস্ট্যান্ট ব্যবহার করার কারণে এর বিভিন্ন ব্যবহারকে একই উপায়ে শার্ড করা উচিত নয়)। ফলস্বরূপ, প্রতিটি ব্যবহারের জন্য একটি ভিন্ন শার্ডিং থাকতে পারে, যা কনস্ট্যান্ট সাব-কম্পিউটেশনটির নিজস্ব কপিতে বিচ্ছিন্নভাবে ছড়িয়ে পড়তে পারে।

একটি ধ্রুবক উপ-গণনা হলো হয়:

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

স্কেলার সম্প্রসারণ হলো একটি স্কেলারের সম্প্রচার।

উল্লেখ্য যে, একটি ধ্রুবক উপ-গণনার মধ্যে একটি মানের একাধিক ব্যবহার থাকতে পারে।

আরও মনে রাখবেন যে এই পাসটি স্কেলার টেনসরগুলিকে বিভক্ত করে না, কারণ সেগুলি শার্ড হয় না (তাদের র‍্যাঙ্ক ০ থাকে)।

-sdy-explicit-gather-scatter-batching

gather/scatter-এর অন্তর্নিহিত ব্যাচ ডাইমেনশনকে সুস্পষ্ট ব্যাচিং ডাইমেনশনে রূপান্তর করে।

stablehlo.gather এবং stablehlo.scatter অপারেশনগুলিতে অন্তর্নিহিত ব্যাচ ডাইমেনশনগুলি সনাক্ত করে এবং সেগুলিকে সুস্পষ্ট অপারেন্ড/স্টার্ট_ইনডেক্স ব্যাচিং ডাইমেনশনে রূপান্তর করে।

-sdy-flatten-call-graph

কল গ্রাফকে সমতল করে।

কল গ্রাফকে সমতল করে।

-sdy-import-func-calls

NamedComputationOp এ ইনলাইন কল।

একটি CallOp-কে NamedComputationOp-এ রূপান্তর করার জন্য একটি পাস তৈরি করে, যেখানে ফাংশন বডি ইনলাইন করা থাকে এবং ক্যালি-এর নাম অন্তর্ভুক্ত থাকে। উল্লেখ্য যে, যদি কোনো ফাংশন একাধিক কলে ব্যবহৃত হয়, তবে তার ফাংশন বডিগুলো ক্লোন করা হয়।

যদি একই ক্যালি-এর জন্য একাধিক কল অপস থাকে, তাহলে আমরা প্রতিটি কল অপসের জন্য ফাংশন বডি ক্লোন করব এবং একটি সতর্কবার্তা দেব।

বিকল্প

-add-data-flow-edges-on-named-computations : Whether to add data flow edges on named computations.

-sdy-inline-meshes

ইনলাইন MeshAttr s এ TensorShardingAttr s.

TensorShardingAttr এর মধ্যে থাকা মেশ সিম্বলের নামগুলোকে ইনলাইন করা MeshAttr দিয়ে প্রতিস্থাপন করে এবং সমস্ত অব্যবহৃত MeshOp মুছে ফেলে।

-sdy-lift-inlined-meshes

শার্ডিং-এর মধ্যে থাকা ইনলাইন MeshAttr গুলিকে MeshOp সিম্বল হিসেবে উত্তোলন করে।

একটি TensorShardingAttr মধ্যে থাকা যেকোনো ইনলাইন MeshAttr একটি মেশ সিম্বল নাম দিয়ে প্রতিস্থাপন করে, যা মডিউলের কোনো বিদ্যমান বা নতুন MeshOp রেফারেন্স করে, যাতে কোনো দুটি MeshOp এর MeshAttr একই না হয় (বিদ্যমান MeshOp গুলোও ডিডুপ করা হয়)।

প্রতিটি নতুন MeshOp এর নাম হবে নিম্নলিখিতগুলির মধ্যে একটি:

  • maximal_mesh_{device-id} , একটি সর্বোচ্চ মেশের জন্য (অর্থাৎ, খালি অক্ষ তালিকা এবং একটি একক ডিভাইস আইডি), অথবা
  • [ mesh , mesh_0 , mesh_1 , ...] এর মধ্যে প্রথম উপলব্ধ নামটি।

-sdy-manual-axes-cleanup

ManualComputationOp এ ম্যানুয়াল অ্যাক্সিসের ব্যবহারকে পরিচ্ছন্ন করে।

  1. যেসব ইন/আউট শার্ডিং-এ ম্যানুয়াল অ্যাক্সিস নির্দিষ্ট করা নেই, সেগুলোর replicated_axes-এ সেই ম্যানুয়াল অ্যাক্সিসটি যোগ করুন। এর উদ্দেশ্য হলো ম্যানুয়াল অ্যাক্সিসগুলো যেন সর্বদা সম্পূর্ণরূপে নির্দিষ্ট থাকে তা নিশ্চিত করা।
  2. ম্যানুয়াল অক্ষগুলোকে মেশ অক্ষ ঘোষণার ক্রম অনুসারে সাজায়।

এছাড়াও, যদি কোনো ম্যানুয়াল গণনার কোনো ইনপুট বা আউটপুট না থাকে এবং এর বডি খালি না হয়, তাহলে এই পাসটি ব্যর্থ হবে।

-sdy-pre-order-funcs

মডিউলের ফাংশনগুলোকে কল গ্রাফের পূর্ব-ক্রম অনুসারে পুনর্বিন্যাস করে।

মডিউলের ফাংশনগুলোকে কল গ্রাফের পূর্ব-ক্রম অনুসারে পুনর্বিন্যাস করে। এটি তখন উপযোগী হয় যখন আমরা ফাংশন/কলগুলোকে ইনলাইন করি, কারণ ব্লকগুলোতে প্রোপাগেশন উপর থেকে নিচে হয়, এবং ফাংশনগুলোর উপর একটি পূর্ব-ক্রম পুনরাবৃত্তি এটিকে অনুকরণ করে।

-sdy-propagate-sharding-from-func-to-call

যদি খালি থাকে, তাহলে কল ফলাফলের শার্ডিংগুলোকে ফাংশন ফলাফলের শার্ডিং হিসেবে সেট করুন।

যদি কলে রেজাল্ট শার্ডিং না থাকে কিন্তু ফাংশনে থাকে, তবে ফাংশনের রেজাল্ট শার্ডিং কলে প্রচার করার জন্য এটি একটি পাস তৈরি করে। উল্লেখযোগ্যভাবে, যদি কলে আগে থেকেই রেজাল্ট শার্ডিং থাকে, তবে এটি কলের রেজাল্ট শার্ডিং ধরে রাখে, এমনকি যদি প্রতিটি স্বতন্ত্র রেজাল্ট শার্ডিং খালিও থাকে।

-sdy-remove-size-one-axes

শার্ডিং থেকে সাইজ ওয়ান অক্ষগুলো সরিয়ে দেয়।

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

-sdy-sharding-group-import

শার্ডিং গ্রুপগুলোর ক্যানোনিকালাইজেশন ও ভ্যালিডেশন সফল হয়েছে।

ইম্পোর্ট করার সময় শার্ডিং গ্রুপগুলিতে ক্যানোনিকালাইজেশন এবং ভ্যালিডেশন প্রয়োগ করে। যথা, এগুলো হলো:

  1. শার্ডিং গ্রুপ একীকরণ

    গ্রুপ সদস্যতার সংক্রমণশীল বৈশিষ্ট্য ব্যবহার করে শার্ডিং গ্রুপগুলোকে একত্রিত করা হয়। যখনই কোনো টেনসর T একটি শার্ডিং গ্রুপ G1 এবং শার্ডিং গ্রুপ G2-তে থাকে, তখন আমরা অনুমান করতে পারি যে G1 এবং G2-এর সমস্ত সদস্যকে একই উপায়ে শার্ড করা উচিত। এইভাবে আমরা G1 এবং G2-কে একটি একক গ্রুপে একত্রিত করতে পারি। গ্রুপগুলোর ন্যূনতম সেটের জন্য, একীভূত করার পর ক্যানোনিকাল গ্রুপ আইডিগুলোর সেট হবে 0, 1, ... N-1।

  2. শার্ডিং গ্রুপ বৈধতা

    শার্ডিং গ্রুপগুলো সুগঠিত এবং ইমপ্লিমেন্টেশনের আওতাধীন অনুমানগুলো মেনে চলে কিনা, তা যাচাই করে। এটি বর্তমানে নিশ্চিত করে যে, যদি কোনো শার্ডিং গ্রুপে ManualComputationOp এর ব্লকের ভেতরে সংজ্ঞায়িত কোনো Value থাকে, তবে সেই গ্রুপের অন্য সব ভ্যালুও অবশ্যই একই ব্লকে থাকতে হবে।